centos 系统,利用 fail2ban 和 firewalld 拦截非法 ssh 请求
发布于 作者:苏南大叔 来源:程序如此灵动~
鉴于在centos的世界里面,ssh非法尝试登陆的现象非常普遍,那么最好的解决方案可以更改ssh的端口号,不用默认的22。或者可以使用fail2ban,短时间内多次尝试ssh登陆失败的话,就把对应ip加入黑名单。在本文中,苏南大叔,将要讲述,如何利用fail2ban,做到ssh的暴力破解防范。

本文的前提是:centos服务器,已经安装好了fail2ban和firewalld。相关文章是:
fail2ban的目录结构
centos服务器上,安装完fail2ban之后,默认的安装目录是:/etc/fail2ban/。定制fail2ban的功能,就是修改这个目录下面的配置文件的过程。大多数情况下,需要编辑的配置文件是:/etc/fail2ban/jail.local。如果没有这个文件,直接添加一个就可以。

jail这个单词的意思是:监狱。顾名思义,jail.local就是配置本地违禁规则的地方。当然,还有个jail.config文件,这个是默认的配置存放的地方。大多数情况下,大家还是只关心jail.local文件即可。
设置jail.local的默认配置
vi /etc/fail2ban/jail.local[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 60
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s
backend = auto
这里通过banaction设置了禁用拉黑的默认动作firewallcmd-ipset,而规则就是:在findtime秒时间内,如果出现maxretry次匹配的话,就加入黑名单bantime秒。因为是实验的缘故,这里,苏南大叔的设置的默认值是:黑名单60秒。超过这个时间,就会继续允许访问。在实际的生产环境下,还是应该设置的bantime时间长一些,比较好点,单位是秒。
设置白名单
白名单设置项目是ignoreip,代码如下:
ignoreip = 127.0.0.1/8多组白名单ip的时候,请使用空格隔开:
ignoreip = 127.0.0.1 127.0.0.2 127.0.0.3 127.0.0.4 127.0.0.5配置ssh的匹配规则
继续编辑文件jail.local,添加ssh相关的规则。
vi /etc/fail2ban/jail.local下面是个ssh的范例,基本上来说,也不用做什么特殊的修改。
[sshd]
enabled = true
filter = sshd
port = 22
action = %(action_mwl)s
logpath = /var/log/secure
注意:logpath是用来提供给fail2ban读取的ssh日志位置,port是端口号,filter是规则名称。规则是已经在filter.d文件中定义好的。
实验效果展示
配置相关屏蔽规则之后,重启服务器。然后,外网故意输入错误密码5次。然后再次连接ssh的话,会提示如下信息,演示成功。
ssh: connect to host 192.168.99.43 port 22: Connection refused
总结
本篇文章中,演示的是ssh相关屏蔽措施,实际上还可以用于其他更多方面的屏蔽。更多经验文字,请点击苏南大叔的博客。