利用fail2ban防止ssh暴力破解

默认分类 · 2024-04-02

最近有几台机器老是被ssh爆破,虽然是强密码不容易被试出来,但是刷一堆错误日志看着也怪难受的,有些比较老的机器上是用crontab+shell脚本来定时拉黑ip,新装的机器不想用脚本,换fail2ban来试试水

安装

主流发行版的软件源都包含了fail2ban包,直接装就行
Debian系:

apt install fail2ban

RH系:

yum install fail2ban

RH系可能不会自动启动服务,要自己手动开下

systemctl enable fail2ban
systemctl start fail2ban

配置

fail2ban自带了模板配置文件,位置是/etc/fail2ban/jail.conf,不要直接更改这个文件,否则可能会被其他程序覆盖,在/etc/fail2ban/jail.d目录下新建一个custom.local文件,在这个新文件里面写配置

fail2ban自带了很多规则,可以支持除ssh以外众多服务的爆破防御,我这里只需要对ssh防护,就不写别的配置了

[DEFAULT]
bantime = 7d # 封禁时长
findtime = 5m # 触发封禁的时间间隔
maxretry = 3 # 触发封禁的次数,配合上面的时间即5分钟内错误3次则封禁7天

[sshd]
enabled = true
port    = 22 # 22端口可以不写,如果ssh服务改了别的端口这里也要改
action  = iptables[name=SSHD, port="%(port)s", protocol="%(protocol)s"]

配置完之后可以热加载

fail2ban-client reload

当然也可以冷加载

systemctl restart fail2ban

所有的封禁状态都是持久化的,可以放心重启服务,重启不会丢失

查看状态

查看激活的规则:

root@test:~# fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

查看对应规则的封禁情况:

root@test:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     22
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 2
   |- Total banned:     7
   `- Banned IP list:   8.***.**.227 123.**.***.148

可以看到正在封禁2个ip,历史封禁7个

也可以查看fail2ban添加的iptables的规则:

root@aliyun:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
f2b-SSHD   tcp  --  anywhere             anywhere             tcp dpt:ssh
      
Chain f2b-SSHD (1 references)
target     prot opt source               destination         
REJECT     all  --  8.***.**.227         anywhere             reject-with icmp-port-unreachable
REJECT     all  --  123.**.***.148       anywhere             reject-with icmp-port-unreachable

配置里设置的是控制iptables来丢弃某些ip到特定端口的数据包来实现封禁的功能,所以能看到fail2ban对应添加的iptables规则

Theme Jasmine by Kent Liao