如何安装配置Fail2ban?

Fail2Ban

1 基础知识

1.1 Fail2Ban介绍

– Fail2Ban根据扫描日志(如/var/log/secure)记录发现并禁用恶意IP(多数是密码失败,扫描漏洞等)
– Fail2Ban通过在单位时间内更新防火墙的拒绝规则禁止IP地址访问服务(也可触发邮件通知)
– Fail2Ban自带各种开箱即用的过滤器(Apache、courier、ssh等)
– Fail2Ban能降低不正确的身份验证尝试发生率,但它无法消除弱身份验证带来的风险
注:基于安全考量,官方建议使用2FA或公钥/私钥认证方式认证

1.2 Fail2Ban的配置文件

– Fail2Ban的配置文件需要保存在“/etc/fail2ban”目录
– Fail2Ban官方默认配置以“.conf”后缀结尾
– Fail2Ban用户本地配置文件以“.local”后缀结尾(会覆盖以“.conf”后缀结尾配置)
– Fail2Ban守护进程配置文件“/etc/fail2ban/fail2ban.conf”或“/etc/fail2ban/fail2ban.d/*.conf”
– Fail2Ban监狱配置文件“/etc/fail2ban/jail.conf”或“/etc/fail2ban/jail.d/*.conf”
– Fail2Ban过滤器配置文件“/etc/fail2ban/filter.d/*.conf”
需要注意的是,“.conf”后缀结尾不建议直接修改,建议创建“.local”后缀结尾的配置文件后修改,如,

cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

以上只需要保留差异的配置即可,另外,如果需要查看合并的配置,请使用如下命令,

fail2ban-client -d
fail2ban-client -vd
fail2ban-client -vvd

2 最佳实践

2.1 安装前的准备

2.1.1 环境信息

如何配置独立的SFTP服务?


注:本章针对sftp为实例配置,如果你需要了解,请参阅以上章节。

2.1.2 安装软件包

dnf install -y fail2ban

安装完成后,可使用如下命令确认安装的包,

rpm -qa | grep fail2ban

命令可见如下显示,

fail2ban-firewalld-0.11.2-1.el8.noarch
fail2ban-0.11.2-1.el8.noarch
fail2ban-server-0.11.2-1.el8.noarch
fail2ban-sendmail-0.11.2-1.el8.noarch

注:需要确认“fail2ban-firewalld”包已经安装,因后面需要使用“firewalld”与“fail2ban”配合。

2.1.3 确认防火墙处于运行状态

systemctl status firewalld.service

可见如下显示,

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2023-03-13 10:27:15 CST; 22h ago
     Docs: man:firewalld(1)
 Main PID: 1054 (firewalld)
    Tasks: 2 (limit: 26213)
   Memory: 32.5M
   CGroup: /system.slice/firewalld.service
           └─1054 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid

注:如上加粗部分包含“running”关键字,则防火墙处于正常运行状态(Fail2Ban需要防火墙配合)

2.2 配置服务

2.2.1 添加服务监狱义配置

cat > /etc/fail2ban/jail.local << EOF
[DEFAULT]
ignoreself = true
ignoreip = 127.0.0.1/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
bantime = 1h
findtime  = 1m
maxretry = 5

[sshd]
enabled = true
port    = sftp
logpath = %(sshd_log)s
backend = %(sshd_backend)s
EOF

“[DEFAULT]”域的定义解析如下,
– 参数“ignoreself”声明为“true”表示不监禁自己
– 参数“ignoreip”声明不监禁的IP地址段(地址段使用空格分隔),范例忽略回环地址以及私网地址
– 参数“bantime”声明监禁的时间,范例表示监禁1小时
– 参数“findtime”声明查找攻击日志的时间范围,范例表示查找1分钟内的攻击日志
– 参数“maxretry”声明攻击尝试的次数,范例定义允许用户5次错误尝试
“[sshd]”域的定义解析如下,
– 参数“enabled”声明“true”表示启用“sshd”的监视
– 参数“port”声明监视的服务名称(范例SSH对应端口详细请参阅“/etc/services”文件的定义)
– 参数“logpath”声明监视日志文件路径的变量(由文件“paths-common.conf”定义)
– 参数“backend”声明检测日志路径变化的后端变量(由文件“paths-common.conf”与“paths-fedora.conf”定义)

2.2.2 启动服务并配置自启动

systemctl start fail2ban.service
systemctl enable fail2ban.service

另外,你可以使用如下命令确认服务状态,

systemctl status fail2ban.service

2.3 测试配置

2.3.1 使用错误密码多次登录sftp服务

sftp -P 990 sftpUser01@sftp.cmdschool.org

2.3.2 检查被监视的日志

grep "Failed password" /var/log/secure

可见如下错误日志,

#...
Mar 14 08:45:51 sftp sshd[18603]: Failed password for sftpUser01 from 116.6.95.46 port 54260 ssh2
Mar 14 08:46:01 sftp sshd[18606]: Failed password for sftpUser01 from 116.6.95.46 port 54261 ssh2
Mar 14 08:46:49 sftp sshd[22754]: Failed password for sftpUser01 from 116.6.95.46 port 54269 ssh2
Mar 14 08:47:53 sftp sshd[26893]: Failed password for sftpUser01 from 116.6.95.46 port 54276 ssh2
Mar 14 08:48:17 sftp sshd[31034]: Failed password for sftpUser01 from 116.6.95.46 port 54277 ssh2
#...

2.3.3 查看Fail2Ban服务状态

fail2ban-client status sshd

可见如下显示,

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     5
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   116.6.95.46

注:如上加粗部分包含被监禁的攻击者IP地址,则说明已经触发监禁规则。

2.3.4 查看防火墙状态

firewall-cmd --list-all

可见如下显示,

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: cockpit dhcpv6-client ssh sftp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="116.6.95.46" port port="sftp" protocol="tcp" reject type="icmp-port-unreachable"

注:如上所示如加粗部分的防火墙规则包含被监禁攻击者源IP地址,则说明恶意攻击者已被监禁。

参阅文档
===============

官方主页
————–
https://www.fail2ban.org/wiki/index.php/Main_Page

软件的GitHub
—————
https://github.com/fail2ban/fail2ban

Fail2Ban的工作原理
——————
https://github.com/fail2ban/fail2ban/wiki/How-fail2ban-works

Fail2Ban的配置文件的使用方法
—————————
https://github.com/fail2ban/fail2ban/wiki/Proper-fail2ban-configuration

故障排除
————–
https://github.com/fail2ban/fail2ban/wiki/Troubleshooting

没有评论

发表回复

Fail2Ban
如何用Fail2ban安全加固HAProxy?

1 前言 一个问题,一篇文章,一出故事。 我们生产环境有使用HAProxy代理sftp服务,详细环境 …

Fail2Ban
如何部署防攻击服务Fail2Ban?

1 理论部分 1.1 环境概述 笔者实战阿里云发现,阿里云提供的centos 6.5版本的镜像是经过 …