fail2ban 是 Linux 上的一个著名的入侵保护的开源框架,它会监控多个系统的日志文件(例如: /var/log/secure )并根据检测到的任何可疑的行为自动触发不同的防御动作。事实上,fail2ban 在防御对SSH服务器的暴力密码破解上非常有用。
本环境为centos6.8 final
1.Python版本必须大于2.4.3
2.防火墙iptables必须开启
# yum install -y fail2ban
# chkconfig fail2ban 35 on
# vi /etc/fail2ban/jail.conf
在配置文件尾部追加以下内容:
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
#系统日志目录
logpath = /var/log/secure
##忽略指定IP
#ignoreip = 192.168.99.1
##用于指定哪些地址可以忽略 fail2ban 防御
ignoreip = 192.168.99.0/24
##ssh客户端允许失败的次数
maxretry = 10
##主机被禁止的时长(秒)
bantime = 604800
# vi /etc/fail2ban/action.d/iptables-multiport.conf
修改:blocktype = REJECT –reject-with icmp-port-unreachable (可以注释掉)
blocktype = DROP
修改日志记录,增大保存时间
# vi /etc/logrotate.d/fail2ban
默认为1天对日志文件进行刷新一次:
/usr/bin/fail2ban-client flushlogs 1>/dev/null || true
更改为7天刷新一次:
/usr/bin/fail2ban-client flushlogs 7>/dev/null || true
# /etc/init.d/fail2ban restart
根据上述配置,fail2ban会自动禁止在最近10分钟内有超过10次访问尝试失败的任意IP地址。一旦被禁,这个IP地址将会在一周内一直被禁止访问 SSH 服务。
使用参数’ping’来运行fail2ban-client 命令。 如果fail2ban服务正常运行,可以看到“Server replied:pong”作为响应。
# fail2ban-client ping
Server replied: pong
# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
# fail2ban-client status ssh-iptables
# fail2ban-client set ssh-iptables unbanip 176.49.76.47
第一种方法:停止Fail2ban 服务
停止Fail2ban 服务,那么所有的IP地址都会被解锁。当你重启 Fail2ban,它会从/var/log/secure中找到异常的IP地址列表,如果这些异常地址的发生时间仍然在禁止时间内,那么Fail2ban会重新将这些IP地址禁止。
第二种方法:日志滚动
# logrotate -f /etc/logrotate.conf
查看/var/log/secure有无被清理,如果没有,手动清理
重启fail2ban
#/etc/init.d/fail2ban restart
重启iptables
# /etc/init.d/iptables restart
当然fail2ban可以缓解暴力密码攻击,但是请注意,这并不能保护SSH服务器避免来自复杂的分布式暴力破解组织,这些攻击者通过使用成千上万个机器控制的IP地址来绕过fail2ban的防御机制。