介绍
虽然通过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
再次按 y 和 Enter 当被要求继续时。
一旦安装完成,请使用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/」中的檔案可以用來超過這兩個檔案的設定。
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
,字面上/etc/fail2ban/jail.local
/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
如果您想配置电子邮件警报,您可能需要取代destemail
、sendername
和mta
设置。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 规则和文件如何工作。