使用fail2ban保护您的服务器

一直以来我的服务器经常被一群脚本小子非法扫描很是令人讨厌,比较万幸的是经过我细心照料也从来没有被成功攻破,这得益于从业多年小心谨慎的态度保障了服务器的安全运行。

什么是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