如何在 CentOS 7 上使用 Fail2Ban 保护 SSH

介绍

虽然通过SSH连接到您的服务器可以非常安全,但SSH大卫本身是一个必须暴露在互联网上才能正常运作的服务,这带来了一些固有的风险,并为潜在的攻击者提供攻击引擎。

如果你注意这些服务的应用日志,你会经常看到重复的,系统的登录尝试,代表用户和机器人一样的暴力攻击。

一个名为Fail2ban的服务可以通过创建规则来缓解这个问题,这些规则会根据预先定义的成功登录尝试数量自动改变您的 iptables 防火墙配置。

在本指南中,我们将介绍如何在 CentOS 7 服务器上安装和使用 Fail2ban。

在 CentOS 7 上安装 Fail2ban

虽然 Fail2ban 在官方 CentOS 包存中不可用,但它是为 EPEL 项目包装的。

1sudo yum install epel-release

您将被要求继续---按 y,然后按 Enter:

1[secondary_label yum prompt]
2Transaction Summary
3============================================================================
4Install 1 Package
5
6Total download size: 14 k
7Installed size: 24 k
8Is this ok [y/d/N]: y

现在我们应该能够安装fail2ban包:

1sudo yum install fail2ban

再次按 yEnter 当被要求继续时。

一旦安装完成,请使用systemctl来启用fail2ban服务:

1sudo systemctl enable fail2ban

设置本地设置

Fail2ban 服务将其配置文件保存在 /etc/fail2ban 目录中. 在那里,您可以找到一个名为 jail.conf’ 的默认值的文件. 由于此文件可能被包升级翻译,我们不应该在现场编辑它。 相反,我们会写一个名为 jail.local的新文件。 在jail.local中定义的任何值都将超过jail.local` 中定义的值。

「jail.conf」包含一個「[DEFAULT]」節,其次是個別服務的節。「jail.local」可能超過這些值。 此外,在「/etc/fail2ban/jail.d/」中的檔案可以用來超過這兩個檔案的設定。

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf,字面上
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local,字面上

任何文件都可能包含第一个执行的[DEFAULT]部分,也可能包含个别监狱的部分。

让我们开始写一个非常简单的版本的‘jail.local’. 使用‘nano’(或您所选择的编辑器)打开一个新的文件:

1sudo nano /etc/fail2ban/jail.local

吃下列东西:

 1[label /etc/fail2ban/jail.local]
 2[DEFAULT]
 3# Ban hosts for one hour:
 4bantime = 3600
 5
 6# Override /etc/fail2ban/jail.d/00-firewalld.conf:
 7banaction = iptables-multiport
 8
 9[sshd]
10enabled = true

这取代了三个设置:它为所有服务设置了新的默认bantime,确保我们正在使用iptables来配置防火墙,并启用了sshd监狱。

退出并保存新文件(在nano中,按Ctrl-X来退出,按y来保存,按Enter来确认文件名) 现在我们可以使用systemctl重启fail2ban服务:

1sudo systemctl restart fail2ban

systemctl命令应该在没有任何输出的情况下完成,为了检查该服务是否正在运行,我们可以使用fail2ban-client:

1sudo fail2ban-client status
1[secondary_label Output]
2Status
3|- Number of jail:      1
4`- Jail list:   sshd

您还可以获得有关特定监狱的更多详细信息:

1sudo fail2ban-client status sshd

探索可用的设置

上面我们定义的jail.local版本是一个很好的开始,但您可能需要调整一些其他设置。打开jail.conf,我们将检查一些默认值。

1sudo nano /etc/fail2ban/jail.conf

所有监狱的默认设置

首先,通过(DEFAULT)部分滚动。

1ignoreip = 127.0.0.1/8

您可以通过将一个值添加到ignoreip参数来调整 Fail2ban 忽略的源地址。目前,该参数配置不禁止来自本地机器的任何流量。

1bantime = 600

bantime参数设置了客户端在未能正确身份验证时将被禁用的时间。

1findtime = 600
2maxretry = 3

您要注意的下一个两个参数是找到时间maxretry,这些参数一起建立了客户应该被禁止的条件。

maxretry变量设置了客户端在findtime定义的时间窗口内验证的尝试次数,然后被禁用。

1destemail = root@localhost
2sendername = Fail2Ban
3mta = sendmail

如果您想配置电子邮件警报,您可能需要取代destemailsendernamemta设置。destemail参数设置了应该接收禁用邮件的电子邮件地址。sendername设置了电子邮件中From字段的值。mta参数配置了发送邮件的邮件服务。

1action = $(action_)s

此参数配置了 Fail2ban 想要设置禁令时所采取的操作. 值 action_ 在该参数前不久在文件中定义。 默认操作是简单地配置防火墙以拒绝侵权主机的流量,直到禁令时间过期。

如果您想配置电子邮件警报,则可以将此值从action_转为action_mw。如果您希望电子邮件中包含相关日志行,则可以将其更改为action_mwl

个人监狱设置

DEFAULT之后,我们会遇到配置不同服务的个别监狱的部分,这些部分通常包括要禁用的端口和监控恶意访问尝试的logpath

1[label /etc/fail2ban/jail.local]
2[sshd]
3
4port    = ssh
5logpath = %(sshd_log)s

在这种情况下,‘ssh’是标准SSH端口的预定义变量,而‘%(sshd_log)s’使用了Fail2ban的标准配置中其他地方定义的值(这有助于在不同的操作系统之间保持‘jail.conf’的可移植性)。

您可能遇到的另一个设置是过滤器,它将用于决定日志中的行是否表明身份验证失败。

过滤器值实际上是指位于 /etc/fail2ban/filter.d 目录中的文件,其 .conf’ 扩展被删除. 此文件包含确定日志中的行是否坏的常规表达式。

但是,您可以通过查看该目录来查看哪些类型的过滤器可用:

1ls /etc/fail2ban/filter.d

如果你看到一个看起来与你正在使用的服务相关的文件,你应该用文本编辑器打开它. 大多数文件都被评论得很好,你应该能够告诉你脚本设计的条件是什么类型。

例如,假装我们正在使用 Nginx 服务一个网站,并意识到我们网站的密码保护部分正在通过登录尝试受到打击,我们可以告诉 Fail2ban 使用 nginx-http-auth.conf 文件在 /var/log/nginx/error.log 文件中检查这种情况。

实际上,这已经在我们的/etc/fail2ban/jail.conf文件中设置了一个名为nginx-http-auth的部分,我们只需要为nginx-http-auth监狱添加一个启用参数到jail.local:

 1[label /etc/fail2ban/jail.local]
 2[DEFAULT]
 3# Ban hosts for one hour:
 4bantime = 3600
 5
 6# Override /etc/fail2ban/jail.d/00-firewalld.conf:
 7banaction = iptables-multiport
 8
 9[sshd]
10enabled = true
11
12[nginx-http-auth]
13enabled = true

然后重新启动fail2ban服务:

1sudo systemctl restart fail2ban

监控 Fail2ban 日志和防火墙配置

重要的是要知道,像 Fail2ban 这样的服务正在按预期工作,开始使用systemctl来检查服务的状态:

1sudo systemctl status fail2ban

如果这里有什么看起来不对劲,您可以通过检查自上次启动以来fail2ban单元的日志来解决问题:

1sudo journalctl -b -u fail2ban

接下来,使用fail2ban-client查询fail2ban-server的整体状态,或任何个别监狱:

1sudo fail2ban-client status
2sudo fail2ban-client status jail_name

跟踪 Fail2ban 的日志以记录最近的操作(按 Ctrl-C 来退出):

1sudo tail -F /var/log/fail2ban.log

列出为 iptables 配置的当前规则:

1sudo iptables -L

显示 iptables 规则以反映每个规则所需的命令的格式:

1sudo iptables -S

结论

您现在应该能够为您的服务配置一些基本的禁令策略 Fail2ban 非常容易设置,是保护使用身份验证的任何类型的服务的好方法。

如果您想了解有关 Fail2ban 如何工作的更多信息,您可以参阅我们的教程 fail2ban 规则和文件如何工作

Published At
Categories with 技术
comments powered by Disqus