一直以来我的服务器经常被一群脚本小子非法扫描很是令人讨厌,比较万幸的是经过我细心照料也从来没有被成功攻破,这得益于从业多年小心谨慎的态度保障了服务器的安全运行。
什么是Fail2ban
Fail2Ban是一个入侵检测系统框架,它可以保护电脑服务器免受蛮力攻击。以Python程式设计语言编写,并能够在类Unix系统上运行,这些系统具有本地安装的封包控制系统或防火墙的界面,例如Iptables或TCP Wrapper。
1、Fail2ban 跟 DenyHosts是类似的工具,可以阻挡有人恶意以字典暴力破解密码,通常应用于有开启 sshd、telnetd跟ftpd的主机上。
2、Fail2ban 的做法是将超过多次失败连线的 IP 列用 iptables(给IPv4 使用) 或 ip6tables (给IPv6使用)禁止该 IP之后的连线。
3、至于要多久之后可以再允许该 IP 再次连线可以在 Fail2ban 的设定档案内设定。
安装Fail2ban
yum -y install fail2ban
配置Fail2ban
建议将SSH端口设置在10000端口以上,这样做的好处是可以规避掉绝大多数的暴力破解
Fail2ban配置文件我这里是统一写在/etc/fail2ban/jail.local
文件中
[DEFAULT] # 禁止一周 bantime = 604800 # 忽略的IP段 ignoreip = 127.0.0.1/8 172.21.0.0/16 # 禁止动作 banaction = iptables-allports [ssh] enabled = true port = 22 filter = sshd logpath = %(sshd_log)s findtime = 259200 maxretry = 2 [nginx-botsearch] enabled = true port = http,https logpath = /var/log/nginx/error.log logencoding = utf-8 maxretry = 2 [nginx-http-auth] enabled = true port = http,https logpath = /var/log/nginx/error.log logencoding = utf-8 maxretry = 2 [mysqld-auth] enabled = true filter = mysqld-auth port = 3306 logpath = /var/log/mysqld.log logencoding = utf-8 findtime = 259200 maxretry = 2
基本命令解释
fail2ban-client -h
命令帮助
fail2ban-client stauts
查看配置状态
fail2ban-client status ssh
查看ssh配置状态
fail2ban-client unbanip {ip}
解封某个IP
Fail2ban演示
这里展示一下Fail2ban拦截到恶意爆破mysql密码被成功禁止的IP
[root@xuchengen ~]# fail2ban-client status mysqld-auth Status for the jail: mysqld-auth |- Filter | |- Currently failed: 0 | |- Total failed: 294 | `- File list: /var/log/mysqld.log `- Actions |- Currently banned: 7 |- Total banned: 8 `- Banned IP list: 34.79.107.251 5.188.206.5 5.188.206.4 5.188.206.6 34.79.68.246 5.188.206.3 5.188.206.2