介绍
通过SSH连接到服务器可以非常安全,但是SSH守护程序本身是一种必须暴露给Internet才能正常工作的服务。 这带来一些固有的风险,并为潜在的攻击者提供攻击的矢量。
以这种方式暴露给网络的任何服务都是潜在的目标。 如果你注意这些服务的应用程序日志,你会经常看到重复的,系统的登录尝试,代表用户和bots的暴力攻击。
所谓的fail2ban服务可以通过创建基于失败的登录尝试的预定数目会自动修改你的iptables防火墙配置规则缓解这一问题。 这将允许您的服务器响应非法访问尝试,而无需您的干预。
在本指南中,我们将介绍如何在CentOS 7服务器上安装和使用Fail2ban。
在CentOS 7上安装Fail2ban
虽然是的fail2ban中没有官方的CentOS组件库中找到,它被打包为EPEL项目 。 EPEL,代表额外的企业版Linux软件包,可以与发布包,可从CentOS的安装:
sudo yum install epel-release
系统将提示您继续---按Y,然后按Enter:
yum promptTransaction Summary
============================================================================
Install 1 Package
Total download size: 14 k
Installed size: 24 k
Is this ok [y/d/N]: y
现在,我们应该可以安装fail2ban
包:
sudo yum install fail2ban
再次,按Y提示继续时输入 。
一旦安装完成后,使用systemctl
启用fail2ban
服务:
sudo systemctl enable fail2ban
配置本地设置
该服务的fail2ban保持在它的配置文件/etc/fail2ban
目录。 在那里,你可以找到一个名为默认值的文件jail.conf
。 由于此文件可能会被软件包升级覆盖,因此我们不应该对其进行编辑。 相反,我们将编写一个名为新文件jail.local
。 中定义的任何值jail.local
将覆盖在jail.conf
。
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]
部分中,首先执行,并且也可含有个别监狱部分。 给定参数的最后一个vavalue集优先。
首先,让我们写一个非常简单的版本jail.local
。 打开一个新的文件中使用nano
(或您选择的编辑器):
sudo nano /etc/fail2ban/jail.local
粘贴以下内容:
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
这将覆盖三种设置:它设置一个新的默认bantime
所有服务,可以确保我们使用iptables
防火墙配置,并启用sshd
监狱。
退出并保存新文件(在nano
,按Ctrl-X退出,y可以保存,并回车确认文件名)。 现在我们可以重新启动fail2ban
使用服务systemctl
:
sudo systemctl restart fail2ban
该systemctl
命令应该完成而没有任何输出。 为了检查该服务正在运行,我们可以使用fail2ban-client
:
sudo fail2ban-client status
OutputStatus
|- Number of jail: 1
`- Jail list: sshd
您还可以获得有关特定监狱的更多详细信息:
sudo fail2ban-client status sshd
浏览可用设置
该版本jail.local
上面定义是一个好的开始,但你可能需要调整一些其他设置。 打开jail.conf
,我们将讨论一些默认值。 如果您决定改变这些值,请记住,他们应该被复制到的相应部分jail.local
和调整,在那里,而不是就地修改。
sudo nano /etc/fail2ban/jail.conf
所有Jail的默认设置
首先,滚动[DEFAULT]
部分。
ignoreip = 127.0.0.1/8
您可以调整的fail2ban忽略加上一个值的源地址ignoreip
参数。 目前,它被配置为不阻止来自本地机器的任何流量。 您可以通过将其附加到参数末尾(以空格分隔)来包含其他地址。
bantime = 600
该bantime
参数设置的,当他们没有正确地验证客户端将被禁止的时间长度。 这是以秒为单位。 默认情况下,此值设置为600秒,或10分钟。
findtime = 600
maxretry = 3
要注意接下来的两个参数是findtime
和maxretry
。 这些工作共同确定了客户应该被禁止的条件。
所述maxretry
变量设置一个客户机具有的由定义的时间窗口内进行认证的尝试次数findtime
被禁止之前。 使用默认设置,Fail2ban将禁止在10分钟时间内未成功尝试登录3次的客户端。
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
如果要配置电子邮件警报,您可能需要重写destemail
, sendername
和mta
设置。 该destemail
参数设置应接收禁令的消息的电子邮件地址。 该sendername
设置“发件人”字段的电子邮件中的价值。 在mta
参数配置什么邮件服务将被用来发送邮件。
action = $(action_)s
此参数配置当Fail2ban想要禁止时采取的操作。 该值action_
在该文件中,此参数前不久定义。 默认操作是简单地配置防火墙以拒绝来自违规主机的流量,直到禁用时间过去。
如果你想配置电子邮件警报,您可以覆盖从该值action_
到action_mw
。 如果你想在电子邮件中包含相关的日志行,你可以改变它action_mwl
。 如果您选择使用邮件提醒,则需要确保配置了相应的邮件设置。
个别Jail的设置
后[DEFAULT]
,我们会遇到部分配置不同的服务各个监狱。 这通常包括一个port
被禁止和logpath
来监控恶意访问尝试。 例如,我们在已经启用了SSH监狱jail.local
具有以下设置:
[sshd]
port = ssh
logpath = %(sshd_log)s
在这种情况下, ssh
是标准SSH端口一个预先定义的变量, %(sshd_log)s
将使用的fail2ban的标准配置别处定义的值(这有助于保持jail.conf
不同操作系统之间移植)。
可能遇到的另一设置是filter
将被用于决定在日志行是否指示失败的验证。
该filter
的值实际上是位于一个文件的引用/etc/fail2ban/filter.d
目录,其.conf
扩展除去。 此文件包含用于确定日志中的行是否错误的正则表达式。 我们不会在本指南中深入讨论这个文件,因为它相当复杂,预定义的设置匹配适当的行。
但是,您可以通过查看该目录来查看可用的过滤器类型:
ls /etc/fail2ban/filter.d
如果您看到一个看起来与您正在使用的服务相关的文件,则应使用文本编辑器打开该文件。 大多数文件是相当好的评论,你应该能够知道该脚本设计防止什么类型的条件。 大多数这些过滤器在适当的(禁用)部分jail.conf
,我们可以使jail.local
如果需要的话。
例如,假装我们正在使用Nginx服务一个网站,并意识到我们网站的密码保护部分正在被砰击着登录尝试。 我们可以告诉的fail2ban使用nginx-http-auth.conf
文件,以检查在这种情况下/var/log/nginx/error.log
文件。
这实际上已经是一个叫段设置[nginx-http-auth]
在我们的/etc/fail2ban/jail.conf
文件。 我们将只需要添加一个enabled
参数为nginx-http-auth
监狱jail.local
:
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
并重新启动fail2ban
服务:
sudo systemctl restart fail2ban
监视Fail2ban日志和防火墙配置
重要的是要知道像Fail2ban这样的服务是按预期工作的。 通过启动systemctl
来检查服务的状态:
sudo systemctl status fail2ban
如果有什么不对劲这里,你可以通过检查日志中排除fail2ban
自上次启动单位:
sudo journalctl -b -u fail2ban
接下来,使用fail2ban-client
查询的整体状态fail2ban-server
,或任何个别监狱:
sudo fail2ban-client status
sudo fail2ban-client status jail_name
遵循的fail2ban的日志最近的行动(按Ctrl-C退出)的记录:
sudo tail -F /var/log/fail2ban.log
列出为iptables配置的当前规则:
sudo iptables -L
以反映启用每个规则所需的命令的格式显示iptables规则:
sudo iptables -S
结论
您现在应该能够为您的服务配置一些基本的禁止策略。 Fail2ban非常容易设置,是一个伟大的方式来保护任何使用身份验证的服务。
如果您想了解更多有关的fail2ban是如何工作的,你可以看看我们的教程的fail2ban规则和文件是如何工作的 。