大多数Linux服务器通过端口22提供SSH登录,用于远程管理。 这个端口是一个众所周知的端口,所以经常受到暴力袭击。 Fail2ban的服务可以通过创建规则来缓解这个问题,这些规则会根据预定义次数的不成功登录尝试自动更改您的iptables防火墙配置。这将允许您的服务器响应非法访问尝试,而无需您的干预。
Fail2ban可以根据登录失败次数,自动在防火墙的iptables添加一条规则,防止恶意登录。下面,我们将介绍如何在CentOS 7服务器上安装和使用Fail2ban。
安装Fail2ban
Fail2ban不在官方软件包仓库中,它在EPEL中(Extra Packages for Enterprise Linux)。
安装epel-release:
sudo yum install epel-release
安装Fail2ban:
sudo yum install fail2ban
安装完成之后,启用Fail2ban:
sudo systemctl enable fail2ban
配置Fail2ban
Fail2ban服务的配置文件在/etc/fail2ban
目录。在其中可以找到jail.conf
配置文件,我不会直接编辑这个文件,因为在升级软件包时,会覆盖这个文件,使配置失效。我们应该创建一个新文件jail.local
,在jail.local
定义的值会覆盖jail.conf
中的值。
我们来创建一个jail.local
文件:
vim /etc/fail2ban/jail.local
写入如下代码:
[DEFAULT] # 禁止一个IP一小时 bantime = 3600 # 覆写 /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true
上面覆写了三个配置,bantime,使用iptables,开启sshd。
配置完成之后,重启fail2ban:
sudo systemctl restart fail2ban
查询fail2ban服务状态:
sudo fail2ban-client status
查询某个jail的详细信息:
fail2ban-client status sshd
探索其他设置
上面定义的jail.local
是最初始的配置,还有很多其他配置选项。打开jail.conf
文件,看看更多选项。
实用命令
最近一次启动,fail2ban日志:
journalctl -b -u fail2ban
实时跟踪显示fail2ban日志(按Ctrl-C退出):
tail -F /var/log/fail2ban.log
显示防火墙规则:
iptables -L
显示防火墙规则对应的命令:
iptables -S
fail2ban从黑名单(ban list)中移除IP的方法:
fail2ban-client set sshd unbanip 1.1.1.1
此时再查看banlist会发现IP已移除。
fail2ban-client status sshd
跟踪失败的登录条目:
以下命令用于检查是否通过ssh端口尝试登录服务器失败。
cat /var/log/secure | grep 'Failed password'
执行上述命令将得到来自不同IP地址的根密码尝试失败的列表。 结果的格式与下面所示的相似:
Fer 8 12:41:12 htf sshd[5487]: Failed password for root from 1.1.1.1 port 23021 ssh2 Fer 8 12:41:15 htf sshd[1254]: Failed password for root from 1.1.1.1 port 15486 ssh2 Fer 8 12:41:16 htf sshd[1254]: Failed password for root from 1.1.1.1 port 24457 ssh2 Fer 8 12:41:18 htf sshd[1254]: Failed password for root from 1.1.1.1 port 24457 ssh2
通过Fail2Ban检查被禁止的IP:
iptables -L -n