fail2ban防ssh爆破
centos7(亲测可行)
配置
本文最后更新于2022.3.11,后续应该不会再更新了~
2024.9.12更新,时隔这么久,又踩了一个坑,要执行yum update才可以,不然的话也是用不起的,如果装了fail2ban后没效果,可以执行一下yum update,更新一下依赖库就可以了。
fail2ban官网:http://fail2ban.org/wiki/index.php/Main_Page
yum安装fail2ban:
yum -y install epel-release
yum -y install fail2ban
将jail.conf复制改名为jail.local并vim编辑,官方不推荐直接在jail.conf上面修改,下面是官方推荐的用法:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local
在文末添加如下代码:
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=22, protocol=tcp]
logpath = /var/log/secure //如果没有secure文件,重启服务会失败,去创建secure文件即可,文件名也可以自定义
maxretry = 3
bantime = 365d
findtime=365d
#sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com]//添加邮件通知
maxretry为尝试次数,如果一年内(findtime)尝试次数达三次,一年内禁止连接(bantime默认单位为秒,此处d表示天数)
以上针对Centos7亲测有效
还有一种食用方式,在/etc/fail2ban/jail.d
目录中新建sshd.local
,内容输入如下:
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=22, protocol=tcp]
logpath = /var/log/secure //如果没有secure文件,重启服务会失败,去创建secure文件即可,文件名也可以自定义
maxretry = 3
bantime = 365d
findtime=365d
#sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com]//添加邮件通知
然后重启fail2ban即可
总结配置优先级:jail.d中的配置文件>jail.local>jail.conf
解封
那如何解封呢,以ssh服务为例:
先查看有哪些状态:
fail2ban-client status
显示其中详情,如sshd,ssh,或者ssh-iptables:
fail2ban-client status sshd
解除封锁的IP,如:
fail2ban-client set sshd unbanip XX.XX.XX.XX
linux命令重命名
如果嫌命令长了记不住,可以进行命令重命名,可以参考:https://www.cnblogs.com/sillage/p/14025652.html
我们在my_alias.sh中添加如下命令(也可以根据需要自行添加如vstfp的解封,下面只是针对于ssh解封的快捷命令):
alias uns='fail2ban-client set ssh-iptables unbanip '
alias und='fail2ban-client set sshd unbanip '
之后我们在解封ip时就可以直接用uns ip,und ip
debian9
关于debian9如何使用fail2ban呢,这里有一个vultr官网提供的教程How to Setup Fail2ban on Debian 9
我去尝试了一下,没有成功,我也不知道为什么,还气的我直接rm -rf了,然后登录vultr控制台把服务器重装了。
部分内容参考自克己复礼,更多内容请点击这
添加邮件通知
教程请参考:https://www.cnblogs.com/sillage/p/14589087.html
fail2ban脚本
该脚本一键安装、配置fail2ban,由笔者编写,centos7亲测可用,防ssh爆破,关注公众号韭菜安全
(文章顶部右上角可扫码关注)回复fail2ban脚本
获取。
实操参考
这是使用了两台服务器进行演示,可以看到当尝试超过三次以后,会提示以下信息,会直接拒绝连接,根本不给你输入密码的机会,证明fail2ban服务生效(由于ip是个人隐私,下面就用字母代替):
[root@VM-0-7-centos htp]# ssh a.a.a.a
ssh: connect to host a.a.a.a port 22: Connection refused
下面是被ssh爆破的服务器,我们可以查看到被封锁的ip:
[root@iZhp3661jqu8od84z9g4f8Z fail2ban]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
[root@iZhp3661jqu8od84z9g4f8Z fail2ban]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/secure
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: b.b.b.b
以下是对被封锁的ip进行解封操作:
[root@iZhp3661jqu8od84z9g4f8Z fail2ban]# fail2ban-client set ssh-iptables unbanip b.b.b.b
1
[root@iZhp3661jqu8od84z9g4f8Z fail2ban]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/secure
`- Actions
|- Currently banned: 0
|- Total banned: 1
`- Banned IP list:
[root@iZhp3661jqu8od84z9g4f8Z fail2ban]#
被解封的服务器可以进行正常的ssh连接:
[root@VM-0-7-centos htp]# ssh a.a.a.a
root@a.a.a.a's password: