最近有几台机器老是被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规则