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为实例配置,如果你需要了解,请参阅以上章节。
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
没有评论