如何在CentOS 7上安装Fail2Ban

大多数Linux服务器通过端口22提供SSH登录,用于远程管理目的。这个端口是一个着名的端口,因此,它经常被攻击...

大多数Linux服务器通过端口22提供SSH登录,用于远程管理。 这个端口是一个众所周知的端口,所以经常受到暴力袭击。 Fail2ban是一种软件,用于实时扫描日志文件以进行暴力登录尝试,并使用firewalld或iptables禁止攻击者。 Fail2ban会在管理员设置的时间范围内识别对服务器的不必要的访问或安全漏洞,并阻止显示暴力攻击或字典攻击迹象的IP地址。 此程序在后台运行,并持续扫描日志文件以获取异常的登录模式和安全漏洞尝试。

本教程将介绍在CentOS 7上使用firewalld安装和配置Fail2Ban。

安装Fail2Ban

要在CentOS 7上安装Fail2Ban,我们将首先安装EPEL(Enterprise Linux的额外包)。 EPEL包含所有CentOS版本的其他软件包,其中一个是Fail2Ban。

切换到root用户后,必须执行以下命令。

yum install epel-release

yum install fail2ban fail2ban-systemd

如果您已安装SELinux,请更新SELinux策略:

yum update -y selinux-policy*

配置Fail2Ban的设置

一旦安装,我们将不得不使用jail.local配置文件配置和自定义软件。 jail.local文件覆盖jail.conf文件,用于使您的自定义配置更新安全。

制作一个jail.conf文件的副本,并以jail.local的名称保存:

cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

使用以下命令,在Nano中打开jail.local文件进行编辑。

nano /etc/fail2ban/jail.local

文件代码可能包含许多代码行,以防止禁止一个或多个IP地址,设置主机持续时间等。典型的监控配置文件包含以下行。

[DEFAULT]

#
# MISCELLANEOUS OPTIONS
#

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8

# External command that will take an tagged arguments to ignore, e.g. <ip>,
# and return true if the IP is to be ignored. False otherwise.
#
# ignorecommand = /path/to/command <ip>
ignorecommand =

# "bantime" is the number of seconds that a host is banned.
bantime = 600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600

# "maxretry" is the number of failures before a host get banned.
maxretry = 5

Ignoreip用于设置不被禁止的IP列表。 应使用空格分隔符给出IP地址列表。 此参数用于设置您的个人IP地址(如果您从固定IP访问服务器)。

Bantime参数用于设置主机需要禁止的持续时间。

Findtime是用于检查主机是否被禁止的参数。 当主机在最后一次查找时间生成maxrety时,它被禁止。

Maxretry是用于设置主机重试次数限制的参数,超过此限制时,主机被禁止。

添加一个jail文件来保护SSH。

使用Nano编辑器创建一个新文件

nano /etc/fail2ban/jail.d/sshd.local

在上述文件中,添加以下代码行。

[sshd]
enabled = true
port = ssh
#action = firewallcmd-ipset
logpath = %(sshd_log)s
maxretry = 5
bantime = 86400

参数enabled设置为true,为了提供保护,去激活保护,将其设置为false。 过滤器参数检查位于路径/etc/fail2ban/filter.d/sshd.conf中的sshd配置文件。

参数操作用于使用/etc/fail2ban/action.d/firewallcmd-ipset.conf中提供的过滤器导出需要禁止的IP地址。

端口参数可能会更改为一个新的值,如port = 1212,就像这样。 当使用端口22时,不需要更改此参数。

Logpath提供存储日志文件的路径。 Fail2Ban扫描此日志文件。

Maxretry用于设置失败登录条目的最大限制。

Bantime 参数用于设置主机需要禁止的持续时间。

运行Fail2Ban服务

当您还没有运行CentOS防火墙时,请启动它:

systemctl enable firewalld
systemctl start firewalld

执行以下命令行,在服务器上运行保护性的Fail2Ban软件。

systemctl enable fail2ban
systemctl start fail2ban 

跟踪失败的登录条目

以下命令用于检查是否通过ssh端口尝试登录服务器失败。

cat /var/log/secure | grep 'Failed password'

执行上述命令将得到来自不同IP地址的根密码尝试失败的列表。 结果的格式与下面所示的相似:

Fer 8 12:41:12 htf sshd[5487]: Failed password for root from 108.61.157.25 port 23021 ssh2
Fer 8 12:41:15 htf sshd[1254]: Failed password for root from 108.61.157.25 port 15486 ssh2
Fer 8 12:41:16 htf sshd[1254]: Failed password for root from 108.61.157.25 port 24457 ssh2
Fer 8 12:41:18 htf sshd[1254]: Failed password for root from 108.61.157.25 port 24457 ssh2

通过Fail2Ban检查被禁止的IP

以下命令用于获取被识别为暴力威胁的被禁IP地址列表。

iptables -L -n

检查Fal2Ban状态

使用以下命令检查Fail2Ban jail的状态:

fail2ban-client status

结果应该类似于:

[root@htf ]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

取消打开IP地址

为了从被禁止的列表中删除IP地址,参数IPADDRESS被设置为需要取消禁止的适当的IP。 名称“sshd”是监狱的名称,在这种情况下,我们在上面配置的“sshd”监狱。 以下命令执行该作业。

fail2ban-client set sshd unbanip IPADDRESS