CentOS 7安装使用Fail2Ban保护SSH

大多数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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

退出移动版