|
|
本帖最后由 Millionaire 于 2026-1-30 12:00 编辑
查看Web服务器的访问志我们会发现时常有DIRB、ZmEu这类扫描工具的请求,它们会访问包含admin、phpMyAdmin和其他让人感到厌烦的链接。通过在Fail2ban中编写过滤器进行匹配,然后自动添加防火墙规则,可以将其IP地址屏蔽掉并发送警报邮件。此外Fail2ban还支持SSH等各种服务,下面只是介绍其使用过程,要发挥真正的保护作用,则需要根据实际自行设定。
一、安装Fail2ban
执行以下命令安装Fail2ban:
设置开机自启动:
- systemctl enable fail2ban
复制代码 启动Fail2ban:
二、配置
Fail2ban默认的配置路径为/etc/fail2ban/。此部分的每个.conf文件都可以使用扩展名为.local的文件覆盖,修改也应该在.local文件中进行,这样可以在Fail2ban升级时仍保留之前的修改。
1.创建jail
复制jail.conf文件为jail.local:
- cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
复制代码 然后打开,添加以下内容:
- [apache-botrequest]
- enabled = true
- port = http,https
- filter = apache-request
- action = firewallcmd-rich-rules[port="http,https"]
- mail-whois[name=Apache, [email protected]]
- logpath = /var/log/httpd/access_log
- bantime = 1800
- maxretry = 3
- findtime = 10
复制代码 在上面的配置中,如果Apache在10秒钟内收到3次和过滤器匹配的访问请求,则将屏蔽访问者的IP地址1800秒,并向dest参数设置的邮箱发送警报邮件。为了使mail命令能正常发送邮件,可以参考使用mailx在Linux系统上发邮件(SMTP方式)进行配置,此外邮件功能中还用到whois命令(可选),安装命令如下:
参数说明:
enabled:启用状态。true为启用,false为关闭。
port:端口,http和https协议的默认端口分别为80、443。
filter:过滤器,名称为apache-request,即对应的是/etc/fail2ban/filter.d/目录下的apache-request.local文件。
action:操作,可以包含多个操作,名称为firewallcmd-rich-rules,即对应的是/etc/fail2ban/action.d/目录下的firewallcmd-rich-rules.conf文件。
logpath:日志路径。
bantime:禁止时间(单位为秒)。
maxretry:最大尝试次数。
findtime:查找时间(单位为秒)。
2.添加filter
在/etc/fail2ban/filter.d/目录新建apache-request.local文件,添加以下内容:
- [Definition]
- failregex = ^<HOST>\s-\s-\s.*"(GET|POST).*".*
复制代码 3.添加action
如果在/etc/fail2ban/action.d/没有mail-whois.conf这个文件,请从官方项目地址下载对应版本的Fail2ban,在config目录下的action.d目录中找到mail-whois.conf文件并上传。然后重启Fail2ban:
- systemctl restart fail2ban
复制代码 当有IP地址被屏蔽时,服务器会发出如下的警报邮件。
三、添加白名单
打开/etc/fail2ban/jail.conf文件,在[DEFAULT]部分的ignoreip项中输入IP地址,如下所输入的IP地址192.168.1.3将不会被屏蔽。
四、查看被屏蔽的IP地址
查看apache-botrequest的当前状态,Banned IP list项显示的是已屏蔽的IP地址。
- fail2ban-client status apache-botrequest
复制代码
五、取消屏蔽
例如,取消apache-botrequest中已屏蔽的IP地址192.168.1.3,可以执行以下命令:
- fail2ban-client set apache-botrequest unbanip 192.168.1.3
复制代码 如果要取消所有的屏蔽,则执行以下命令:- fail2ban-client unban --all
复制代码 |
|