简介
Fail2ban是入侵防御框架,与服务器上防火墙iptables配合使用,通常用于在尝试失败后阻止连接尝试。它通过监视特定类型条目的日志文件来运行,并根据其结果运行预定的操作。
环境
系统:Ubuntu 16.04
软件:fail2ban 0.11
防火墙设置
ubuntu1
2
3
4ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp
ufw allow 21/tcp
centos1
2
3
4
5sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
sudo iptables -A INPUT -j DROP
下载安装
#https://github.com/fail2ban/fail2ban 注: 官网版本已过时,最新在github下载1
2
3
4
5
6
7
8git clone git@github.com:fail2ban/fail2ban.git
cd fail2ban
sudo python setup.py install
cp files/debian-initd /etc/init.d/fail2ban
update-rc.d fail2ban defaults
update-rc.d fail2ban enable
/etc/init.d/fail2ban start
#/etc/init.d/fail2ban reload
jail.conf
默认规则1
cat /etc/fail2ban/jail.conf
1 | [INCLUDES] |
ssh vsftp配置
1 | cat /etc/fail2ban/jail.conf |
1 | [sshd] |
- [vsftp]:名称,可以随便填写
- filter:规则名称,必须填写位于filter.d目录里面的规则,vsftpd是fail2ban内置规则
- port:对应的端口
- action:采取的行动,如发送邮件
- logpath:需要监视的日志路径
- maxretry: 登陆失败几次封锁
- bantime: 封锁时间多久
1 | systemctl reload fail2ban |
匹配测试
1 | #fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf |
1 | Running tests |
查看封锁状态
1 | fail2ban-client status vsftpd |
1 | Status for the jail: vsftpd |
或1
iptables --list | grep REJECT
1 | REJECT all -- 112.96.115.148 anywhere reject-with icmp-port-unreachable |
解锁IP
1 | sudo fail2ban-client set <jail> banip/unbanip <ip address> |
防止CC攻击
这里仅以Nginx为例,使用fail2ban来监视nginx日志,匹配短时间内频繁请求的IP,并使用firewalld将其IP屏蔽,达到CC防护的作用。
#需要先新建一个nginx日志匹配规则1
2
3
4
5vi /etc/fail2ban/filter.d/nginx-cc.conf
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =
1 | vim /etc/fail2ban/jail.local |
上面的配置意思是如果在60s内,同一IP达到120次请求,则将其IP 封锁1小时,可以将maxretry修改为10进行测试。刷新网页10次就会封锁。
防止Wordpress爆破
如果您经常分析日志会发现有大量机器人在扫描wordpress登录页面wp-login.php,虽然对方可能没成功,但是为了避免万一还是将他IP干掉为好。1
2
3
4
5vim /etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^<HOST> -.* /wp-login.php.* HTTP/1\.."
ignoreregex =
1 | vim /etc/fail2ban/jail.local |
http://www.vixual.net/blog/archives/252
https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-ubuntu-14-04
使用 NGINX 流控和 fail2ban 防止 CC 攻击