近日在查看Nginx的访问日志中,发现了大量404请求,仔细研究一番发现有人正在试图爆破网站。
我刚上线你就企图攻击我?????? 这怎么能忍。。
于是乎 --- 查资料后得知有一个神奇的工具 fail2ban 可以配合 iptables 自动封IP
iptables 是Centos6 的一种防火墙策略,在Centos7 中已被 Firewall所取代
本次实验系统为Centos6
不说了开干
1. 下载并安装fail2ban
1 cd /usr/loca/src 2 wget https://github.com/fail2ban/fail2ban/archive/0.9.4.tar.gz 3 tar -zxf 0.9.4.tar.gz 4 mv 0.9.4 fail2ban-094 5 cd fail2ban-094 6 ./setup.py
2. 目录结构
1 /etc/fail2ban # fail2ban 服务配置目录 2 /etc/fail2ban/action.d # iptables 、mail 等动作文件目录 3 /etc/fail2ban/filter.d # 条件匹配文件目录,过滤日志关键内容 4 /etc/fail2ban/jail.conf # fail2ban 防护配置文件 5 /etc/fail2ban/fail2ban.conf # fail2ban 配置文件,定义日志级别、日志、sock 文件位置等 6 7 cd /etc/fail2ban # 进入配置文件所在的目录 8 cp jail.conf jail.local # 备份配置文件
3. 配置防护
首先编写封禁访问nginx 404状态码的ip地址的配置规则
1 vim /etc/fail2ban/filter.d/nginx.conf 2 3 [Definition] 4 failregex =-.*- .*HTTP/1.* 404 .*$ 5 ignoreregex =
保存后测试配置文件相对于日志是否正确
1 fail2ban-regex /home/wwwlogs/access.log /etc/fail2ban/filter.d/nginx.conf
然后将封禁规则加入配置文件
1 vim /etc/fail2ban/jail.conf # 文件尾部写入 2 3 [nginx] 4 enabled = true 5 port = http,https 6 filter = nginx # 规则文件的名字 7 action = iptables[name=nginx, port=http, protocol=tcp] 8 # sendmail-whois[name=tomcat, dest=[email protected]] 发送邮件功能 9 logpath = /home/wwwlogs/access.log # 日志路径 10 bantime = 14400 # 封禁的时间 11 findtime = 3 # 在几秒内 12 maxretry = 2 # 有几次
4. 启动
1 /etc/init.d/iptables start 2 /etc/init.d/fail2ban start 或 fail2ban-client start
5. 查看状态等命令
1 fail2ban-client start # 启动 2 fail2ban-client reload # 重载 3 fail2ban-client stop # 停止 4 fail2ban-client status # 查看状态 5 fail2ban-client set nginx addignoreip 180.158.35.30 # 将ip加入nginx监狱的白名单 6 fail2ban-client set nginx delignoreip 180.158.35.30 # 将ip移除nginx监狱的白名单 7 fail2ban-client set nginx banip IP地址 # 手工ban 8 fail2ban-client set nginx unbanip IP地址 # 手工解
6. 查看fail2ban的日志
fail2ban的日志默认在 /var/log/fail2ban.log
日志中记录着Ban IP的记录和UnBan IP的记录
也有修改配置文件重载后的记录
cat /var/log/fail2ban
7. 小结
fail2ban 还有许多强大的功能待研究,在 /etc/fail2ban/filter.d 中,有许多模板可以学习并使用
虽说把非法请求封禁一段时间看似安全些,但只要有对外的端口就不能保证服务器的绝对安全。多了解不同工具的组合使用,才会使服务器更加安全。