安装前提
为了使Fail2ban与iptables联动,需禁用自带的firewalld服务,同时安装iptables服务
关于Fail2ban
- 监视日志,根据日志进行正则匹配,然后执行相应的匹配动作(一般都是调用系统防火墙进行屏蔽)
- 使用Fail2ban 配合iptables 实现动态防火墙
安装
wget https://codeload.github.com/fail2ban/fail2ban/tar.gz/0.8.14
tar -xf 0.8.14.tar.gz
cd fail2ban-0.8.14
python setup.py install
# 手动生成系统启动脚本
cp files/redhat-initd /etc/init.d/fail2ban
# 添加系统自启动
chkconfig --add fail2ban
#复制,复制文件后可以在jail.local中进行修改,并且jail.local中相同配置会覆盖jail.conf 中的配置
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
配置文件目录区别
#动作文件夹,内含默认文件;iptables以及mail等动作配置
/etc/fail2ban/action.d
#定义了fai2ban日志级别、日志位置及sock文件位置
/etc/fail2ban/fail2ban.conf
#条件文件夹,内含默认文件;过滤日志关键内容设置
/etc/fail2ban/filter.d
#主要配置文件,模块化;主要设置启用ban动作的服务及动作阀值
/etc/fail2ban/jail.conf
配置举例
配置过来文件中特定的url接口
[root@iZuf660s6hZ filter.d]# pwd
/etc/fail2ban/filter.d
[root@iZuf660s6hZ filter.d]# cat ipofinancing.conf
[Definition]
failregex = .*remote_addr=<HOST>.*create.*ipofinancing.*$
ignoreregex =
[root@iZuf6Z filter.d]# cat ipofinancing.conf
[Definition]
failregex = .*remote_addr=<HOST>.*create.*ipofinancing.*$
ignoreregex =
jail.local 中配置
[ipofinancing]
enabled = true
port = http,https
filter = ipofinancing
logpath = /data/logs/nginx/qian.log*
maxretry = 3
findtime = 10
bantime = 60
action = iptables-multiport[name=HTTP, port="http,https", protocol=tcp]
ignoreip = xxxxx
#解释: 10s内最大允许访问3次,否则则被禁止登陆60s;返回503
参数介绍
maxretry: 时间内的最大尝试次数
findtime: 设置允许访问的时间限制
bantime:屏蔽时间(单位秒)
常用命令
#测试正则有效
fail2ban-regex /path/to/nginx/access.log /etc/fail2ban/filter.d/nginx-dir-scan.conf
systemctl start fail2ban
systemctl stop fail2ban
systemctl enable fail2ban
查看被ban的IP
fail2ban-client status [name]
添加白名单
fail2ban-client set ssh-iptables addignoreip IP地址
删除白名单
fail2ban-client set ssh-iptables delignoreip IP地址
查看被禁IP
iptables -L -n