Fail2ban设置ssh登录失败N次后封锁该IP
Fail2ban是一款用来阻挡使用暴力破解法登录服务器的工具,最常被应用在SSH服务器上。它会去检查服务器的日志(Log),并将登录失败的IP地址记录下来,如果该IP在一段时间内错了超过规定的次数,就会自动添加规则至防火墙中,阻挡该IP一段时间的连入。
安装 Fail2ban
基于Debian的Linux发行版可以使用以下指令来安装Fail2ban:
红帽系的Linux发行版可以使用以下指令来安装Fail2ban:
运行以下指令在开机时自动启动Fail2ban服务:
运行以下指令立刻启动Fail2ban服务:
设置 Fail2ban
如果您是使用基于Debian的Linux发行版,安装完fail2ban
套件后就已经激活sshd
的保护功能了。但还是可以参考这小节的说明来作设置。
Fail2ban的设置档位于/etc/fail2ban
目录,设置档支持的扩展名为.conf
和.local
。扩展名.conf
是缺省的设置档,扩展名.local
是我们要修改设置值时要自行添加的设置档。撰写在.local
设置档的设置会覆写掉.conf
设置档内原先的设置。
要设置sshd
的保护,可以添加一个文件,路径为/etc/fail2ban/jail.d/sshd.local
,文件内容如下:
[sshd] | |
enabled = true | |
bantime = 10m | |
bantime.increment = true | |
bantime.maxtime = 1d | |
findtime = 10m | |
maxretry = 5 |
以上设置档中,[sshd]
是指这个区块的字段是用来设置sshd
这个「jail」(一种称呼某种用来限制访问的机制的常用名称)。enabled = true
表示要激活这个jail。bantime
是每次要封锁的基本持续时间,m
表示分钟、h
表示小时、d
表示天,如果不写单位的话,单位会是秒。bantime.increment = true
是让先前被封锁过的IP再下一次被封锁的时候拉长它的封锁时间。bantime.maxtime
是设置最大的封锁时间。在findtime
的时间内,如果有同样的IP的错误尝试次数超过maxretry
所规定的次数,这个IP就会被封锁。
设置好后可以运行以下指令让Fail2ban重新加载设置档:
以下指令可以查看Fail2ban的状态:
如上图,可以看到sshd
这个jail被激活了。
解封IP
以下指令可以查看被关进sshd
这个jail的IP有哪些:
如上图,可以看到192.168.56.1
这个IP被封锁了。如果要手动即时解封它,可以运行以下指令:
或是用以下指令解封也可以,不过这个指令是把某个IP从所有jail中释放出来:
以下指令可以查看所有被Fail2ban封锁的IP:
以下指令可以解封所有被Fail2ban封锁的IP:
寄信通知
当有IP被封锁的时候,Fail2ban可以主动发出电子邮件通知系统管理员,看要不要做什么后续的处理。
如果要启动寄信通知功能,可以编辑/etc/fail2ban/jail.d/sshd.local
,进行如下的修改:
[sshd] | |
enabled = true | |
bantime = 10m | |
bantime.increment = true | |
bantime.maxtime = 1d | |
findtime = 10m | |
maxretry = 7 | |
destemail = yourname@example.com | |
action = %(action_mwl)s |
destemail
可以设置要寄到的电子邮件信箱。action = %(action_mwl)s
用来设置封锁之后寄信。
注意,您的Linux操作系统必须要有寄信的能力,才能让Fail2ban寄信。可以参考这篇文章来设置:
设置完成后,使用以下指令重启Fail2ban:
如果只是使用fail2ban-client reload
重新加载设置档,貌似对寄信的设置是无效的。重启Fail2ban后,如果Fail2ban能成功寄出信件,您应该会收到一封Fail2ban寄出的sshd
这个jail被启动的通知信,有收到的话表示Fail2ban的寄信通知功能可以正常使用。