ubuntu使用fail2ban阻止别人不停的尝试ssh端口登录密码
背景
- fail2ban是一个根据ip来ban掉那种不停尝试ssh密码的人的linux软件。
- 原理是通过检测/var/log/auth.log把不停试错密码的ip放到监狱里,阻止该ip再此访问ssh端口。
- 所谓放到监狱里就是通过iptables来添加规则(sudo iptables -L查看全部规则),因此如果阻止失败了可以考虑这方面原因。
- /var/log/auth.log的试错密码log行一般如下:
- Apr 22 08:30:09 xxx sshd[2882]: Failed password for root from 92.118.39.101 port 12345 ssh2
安装:
sudo apt-get update
sudo apt-get install nftables # 必须(先!)确保安装了这个
sudo apt-get install fail2ban
注意:不建议用git克隆代码后的方式安装,因为它会安装在/usr/local/bin下面,但是sudo service start fail2ban默认不会在这个目录下面找fail2ban的程序(而是/usr/bin/fail2ban*)。。就会很麻烦。
启动
sudo service fail2ban start
参数查看:
fail2ban-client -h
检测是否启动成功:
sudo fail2ban-client version
sudo service fail2ban status
配置:
直接默认就可以阻止ssh重复尝试密码。。
也可以在这里修改:
cd /etc/fail2ban/ && sudo vi jail.conf
默认配置项:
- maxretry = 5 表示试错密码大于5次(即6次)就ban (测试时我发现每一轮ssh试错密码(实际输入三次密码)会产生5次试错记录)
- bantime = 10m 表示ban十分钟,十分钟后就把ban掉的ip从监狱里给放出来。
- findtime = 10m 表示十分钟内试错密码大于5次就ban
查看fail2ban的日志(默认):
sudo cat /var/log/fail2ban.log
ban的部分逻辑:
sudo service fail2ban stop 时,它会把ban了的ip放出监狱(可以ssh了)。
而当sudo service fail2ban start时,它会把尚未刑满释放的ip再次投入监狱(阻止ssh)。
(这个行为可以通过fail2ban的日志看出来。)
检查fail2ban当前ban了哪些ip:
- sudo fail2ban-client status
- sudo fail2ban-client status <jail_name> # jail_name可以是sshd
或者: - sudo iptables -L |grep REJECT
如果上面的命令有ban的ip,而iptables规则里却没有,说明fail2ban写iptables失败了。。
明明ban了但是还是可以访问:
当明明触发了ban了,但是依然可以ssh,那么:
- sudo iptables -L | grep f2b
如果是空的,那显然是fail2ban写iptables失败了。。重新安装貌似可以解决。 - 如果不是空的,但还是不行,则这种情况通常是iptables里现有的其他规则放行了“f2b的阻拦规则”。
- 确定:如果/var/log/fail2ban.log日志里频繁的有: WARNING [sshd] 176.65.137.251 already banned 则说明大概率就是这个情况。
- 可以找AI解决:
- 把sudo iptables -L的输出甩给AI,问“如何让f2b-sshd链的优先级最高?”
- AI给我的答案是:sudo iptables -I INPUT 1 -j f2b-sshd 解决了。
- 把sudo iptables -L的输出甩给AI,问“如何让f2b-sshd链的优先级最高?”
把某个ip放出来
sudo fail2ban-client set sshd unbanip 192.168.1.100
卸载:
sudo apt-get purge fail2ban
浙公网安备 33010602011771号