__都非拉得的博客

Posted on 31 Aug 2021

安装以及启动

yum install fail2ban
systemctl enable fail2ban # 开机启动
systemctl start fail2ban # 启动
systemct restart fail2ban # 重启
fail2ban-client reload # 重新加载配置
fail2ban-client status # 查看状态

配置

fail2ban的.conf配置文件都是可以被.local覆盖,所以配置方式建议是添加.local文件,不修改原来的配置文件。

jail.local

vi /etc/fail2ban/jail.local

添加默认配置

$ vi /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 86400
findtime = 86400
maxretry = 3
backend = auto

[ssh]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com, sendername="Fail2Ban"]
logpath = /var/log/secure
maxretry = 3

配置说明

[DEFAULT]
#忽略的IP列表,不受设置限制(白名单)
ignoreip = 127.0.0.1

#屏蔽时间,单位:秒
bantime = 86400

#这个时间段内超过规定次数会被ban掉
findtime = 86400

#最大尝试次数
maxretry = 3

#日志修改检测机制(gamin、polling和auto这三种)
backend = auto

#针对各服务的检查配置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置
[ssh]

#是否激活此项(true/false)
enabled = true

#过滤规则filter的名字,对应filter.d目录下的sshd.conf
filter = sshd

#动作的相关参数
action = iptables[name=SSH, port=ssh, protocol=tcp]

#触发报警的收件人
# sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com, sendername="Fail2Ban"]

#检测的系统的登陆日志文件
logpath = /var/log/secure

#最大尝试次数
maxretry = 3

添加nginx-cc拦截规则

vim /etc/fail2ban/filter.d/nginx-cc.conf

配置

[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =

添加nginx-cc配置到jail.local中

检查20秒之内访问次数达到200次就拦截该IP

[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 200
findtime = 10
bantime = 86400
# 说明注释
logpath = /var/log/nginx/access.log

配置说明

enabled :是否开启检测
port:检查的端口
maxretry:最大失败次数, 在检查时间内达到次数就拦截
bantime:拦截后禁止访问的时间,单位:秒
findtime:检查的时间访问,单位:秒
logpath: 扫描的日志文件,fail2ban按行扫描此文件,根据filter规则匹配失败的项目并统计

注意: 配置文件文件可以换行添加注释,但是不能在配置项后面跟注释,例如以下的注释是不允许的,failban会检查配置无效,将 bantime设置成None。

正则规则检查

fail2ban-regex /var/log/nginx/access.log "<HOST> -.*- .*HTTP/1.* .* .*$"

根据配置文件检查

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-cc.conf 

文档