Fail2ban是一款开源的Linux平台网络工具,它会监视指定的日志文件,例如 SSH、HTTP等服务的日志文件,基于正则表达式以识别恶意行为,例如登录失败尝试、恶意请求等日志。当匹配到规则时,Fail2ban会触发定义的响应操作,例如将攻击者的 IP 地址添加到防火墙规则中以阻止其访问,或向管理员发送电子邮件报警。
本文搭配Firewalld防火墙,介绍常用配置。
安装
apt install fail2ban
配置
Fail2ban的配置文件默认为/etc/fail2ban/fail2ban.conf和/etc/fail2ban/jail.conf,但不要修改它们,而是通过新建jail.local文件来覆盖一些默认的配置。
nano /etc/fail2ban/jail.local
这里通过sshd的防护示例配置来介绍一些参数。
#DEFAULT默认配置
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
banaction = firewallcmd-ipset
findtime = 30
maxretry = 3
bantime = 1h
#ssh服务
[sshd]
enabled = true
filter = sshd
port = 22
findtime = 2m
maxretry = 5
bantime = -1
- DEFAULT:默认配置。覆盖fail2ban.conf中的相应条目。
- ignoreip:永远不会被禁止的IP地址白名单。本地主机的IP地址(127.0.0.1/8),其IPv6相当于(::1)。
- banaction:这里使用Firewalld防火墙。
- findtime: 时间周期。
- maxretry: 在findtime时间内允许的最多失败次数。
- bantime: 禁止IP地址的持续时间。单位默认为秒(“ m”代表分钟,“ h”代表小时)。值-1将永久禁止。
- sshd:自定义的服务配置名。
- enabled:是否启用这项服务配置。
- filter:规则名称,必须填写位于fail2ban/filter.d目录里面的规则。sshd是fail2ban的内置规则。
- port:对应端口。以逗号间隔。可以指定一个端口范围,例如 5000:10000.
上面的配置表示ssh服务在2分钟的周期内最大尝试5次失败,违反这个规则将被永久封禁IP。
启用配置
在增加或修改 Fail2Ban 的新配置后,需要重新加载配置来生效。
fail2ban-client reload
查看指定服务状态
包括已经封禁的IP列表,例如sshd:
fail2ban-client status sshd
手动封禁IP
指令格式为:fail2ban-client set <JAIL> banip <IP>
例如指定sshd服务而封禁某IP:
fail2ban-client set sshd banip 192.168.1.100
解除指定被封禁的IP
例如解除因sshd服务而被封禁的某IP:
fail2ban-client set sshd unbanip 192.168.1.100
查看fail2ban日志
tail -f /var/log/fail2ban.log
只显示封禁/解封日志
tail -f /var/log/fail2ban.log | grep fail2ban.actions
Woredpress登录页面配置
wordpress的登录页面是wp-login.php,当有人频繁扫描这个页面时,将它封禁。
先在fail2ban/filter.d目录新建一个规则文件,例如:
nano /etc/fail2ban/filter.d/wordpress.conf
增加以下内容:
[Definition]
failregex = ^<HOST> -.*"POST /wp-login\.php.*HTTP.*" 403 .*
^<HOST> -.*"GET /wp-login\.php.*HTTP.*" 403 .*
ignoreregex =
修改Fail2ban的配置文件,追加以下内容:
[wordpress]
enabled = true
filter = wordpress
port = http,https
findtime = 1m
maxretry = 20
bantime = 24h
logpath = /var/log/nginx/access.log
- logpath:nginx的日志文件路径。