通过fail2ban使服务器成获得额外的安全性

阅读更多
Fail2Ban 打出服务器安全的组合拳


sudo apt-get update
sudo apt-get install fail2ban



安装完后服务会自动启动,
该服务的fail2ban保持在它的配置文件/etc/fail2ban目录。 有一个与默认称为文件jail.conf 。 由于此文件可以通过软件包升级进行修改,因此我们不应该就地编辑此文件,而是复制它,以便我们可以安全地进行更改。为了让这两个文件一起成功运作,最好是只包含您要在覆盖设置jail.local文件。 所有默认选项将从采取jail.conf文件。 尽管我们仅应包括从在默认偏差jail.local文件,它是更容易地创建一个jail.local基于现有的文件jail.conf文件。 因此,我们将拷贝过来的文件,与内容注释掉,作为基础jail.local文件。您可以输入以下命令:
awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

一旦文件被复制,我们可以打开原来jail.conf文件,看看事情是如何默认设置
sudo nano /etc/fail2ban/jail.conf

在此文件中,有几个设置,您可能希望调整。位于下的设置[DEFAULT]部分将被应用到的fail2ban启用的所有服务,这是不是在服务本身的部分覆盖。
/etc/fail2ban/jail.conf
[DEFAULT]
. . .
ignoreip = 127.0.0.1/8
. . .

该ignoreip设置配置的fail2ban忽略源地址。 默认情况下,它配置为不禁止来自本地计算机的任何流量。 你可以添加额外的地址加入了忽略[DEFAULT]部分与ignoreip下,将其设置为jail.local文件。您可以通过将其附加到指令的末尾来添加其他地址,以空格分隔。
/etc/fail2ban/jail.conf
[DEFAULT]
. . .
bantime = 600
. . .

该bantime参数设置的,当他们没有正确地验证客户端将被禁止的时间长度。这是以秒为单位。默认情况下,此值设置为600秒,或10分钟。
/etc/fail2ban/jail.conf
[DEFAULT]
. . .
findtime = 600
maxretry = 3
. . .

要注意接下来的两个参数是findtime和maxretry 。这些合作共同确定了客户被发现是应禁止的非法用户的条件。 所述maxretry变量设置一个客户机具有的由定义的时间窗口内进行认证的尝试次数findtime被禁止之前。使用默认设置,fail2ban服务将禁止在10分钟时间内未成功尝试登录3次的客户端。
/etc/fail2ban/jail.conf
[DEFAULT]
. . .
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
. . .
您将要评估destemail , sendername和mta的设置,如果你想配置电子邮件警报。 该destemail参数设置应接收禁令的消息的电子邮件地址。 该sendername设置“发件人”字段的电子邮件中的价值。 在mta参数配置什么邮件服务将被用来发送邮件。 同样,这些添加到jail.local文件,下[DEFAULT]头,如果你要调整其设置为正确的价值观。
/etc/fail2ban/jail.conf
[DEFAULT]
. . .
action = $(action_)s
. . .

此参数配置fail2ban在其想要禁止时采取的操作。该值action_在该文件中,此参数前不久定义。默认操作是简单地配置防火墙以拒绝来自违规主机的流量,直到禁用时间过去。 如果你想配置电子邮件警报,添加或取消注释action项目到jail.local文件,并从它的值更改action_到action_mw 。 如果你想在电子邮件中包含相关的日志行,你可以改变它action_mwl 。如果您选择使用邮件提醒,请确保配置了相应的邮件设置。
Individual Jail设置
最后,我们进入配置文件中处理单个服务的部分。这些是由节标题指明,像[ssh] 这些部分的每一个都可以通过取消注释在头被启用jail.local并改变enabled线为“真”:
/etc/fail2ban/jail.local
[jail_to_enable]
. . .
enabled = true
. . .

默认情况下,启用SSH服务,并禁用所有其他服务。 这些部分通过使用所设置的值的工作[DEFAULT]节为基础,并根据需要对其进行修改。 如果你想要覆盖任何值,你可以通过添加相应的服务的部分这样做jail.local和修改它的值。 在此处设置一些其他设置的filter将被用于决定在日志行是否指示失败的认证和logpath ,它告诉的fail2ban其中用于该特定服务的日志的位置。 该filter的值实际上是位于一个文件的引用/etc/fail2ban/filter.d目录,其.conf扩展除去。这些文件包含正则表达式,用于确定日志中的行是否是失败的身份验证尝试。我们不会在本指南中深入讨论这些文件,因为它们相当复杂,预定义的设置很好地匹配相应的行。 但是,您可以通过查看该目录来查看可用的过滤器类型:
ls /etc/fail2ban/filter.d
如果您看到一个看起来与您正在使用的服务相关的文件,则应使用文本编辑器打开该文件。大多数文件都有相当好的评论,你应该能够至少告诉脚本设计防止什么类型的条件。大多数这些过滤器在适当的(disabled)部分jail.conf文件,我们可以在使jail.local文件如果需要的话。 例如,假装我们正在使用Nginx服务一个网站,并意识到我们网站的密码保护部分正在被砰击着登录尝试。我们可以告诉的fail2ban使用nginx-http-auth.conf文件,以检查在这种情况下/var/log/nginx/error.log文件。 这实际上已经是一个叫段设置[nginx-http-auth]在我们的/etc/fail2ban/jail.conf文件。 我们将只需要注释的部分jail.local文件,并翻转enabled参数来保护我们的服务:
/etc/fail2ban/jail.local
. . .
[nginx-http-auth]

enabled = true
. . .

如果启用此选项,您将需要重新启动fail2ban服务以确保正确构建规则。
把它放在一起


现在,您已经了解了fail2ban的基本思想,让我们通过一个基本的设置。 我们将为SSH和Nginx配置自动禁止策略,正如我们上面所述。我们希望fail2ban在IP被禁止时向我们发送电子邮件。 首先,让我们安装所有相关的软件。 如果你还没有它,你需要nginx,因为我们要监视它的日志,你需要sendmail来邮件通知我们。我们还将抓住iptables-persistent ,使服务器能够在系统启动时自动建立我们的防火墙规则。这些可以从Ubuntu的默认存储库获取:
sudo apt-get update
sudo apt-get install nginx sendmail iptables-persistent

停止fail2ban服务了一会儿,以便我们能够建立一个基础的防火墙没有它增加了规则:
sudo service fail2ban stop

建立基本防火墙
当完成后,我们应该实现一个默认防火墙。你可以学习如何在Ubuntu 14.04配置iptables防火墙在这里。我们将为本指南创建一个基本的防火墙。 我们将告诉它允许已建立的连接,由服务器本身生成的流量,流量发往我们的SSH和Web服务器端口。我们将丢弃所有其他交通。我们可以通过键入以下内容来设置此基本防火墙:
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
sudo iptables -A INPUT -j DROP

这些命令将实施上述策略。我们可以通过键入以下内容查看我们当前的防火墙规则:
sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP

您可以保存防火墙,以便它们在重新启动后仍然可以输入以下内容:
sudo dpkg-reconfigure iptables-persistent
之后,你可以重新启动fail2ban来实现折回规则:
sudo service fail2ban start
我们可以通过键入以下内容查看我们当前的防火墙规则:
sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
-A fail2ban-ssh -j RETURN

我们对每个链条都有我们的默认政策,然后是我们建立的五个基本规则。在红色,我们也有由fail2ban设置的默认结构,因为它已经实现SSH禁止策略默认情况下。这些可能会或可能不会在第一显示出来,因为有时fail2ban直到第一禁令被实现不增加的结构。
调整Fail2ban配置
现在,我们需要使用我们想要的设置配置fail2ban。打开jail.local文件:
sudo nano /etc/fail2ban/jail.local
我们可以在这里设置更严厉的禁令时间。查找并取消[DEFAULT]标题。 在默认的标题,改变bantime ,使我们的服务客户禁止半个小时设置:
/etc/fail2ban/jail.local
[DEFAULT]
. . .
bantime = 1800
. . .
我们还需要配置我们的警报电子邮件信息。首先,找到destemail参数,这也应该是下[DEFAULT]标题。输入您要用于收集这些邮件的电子邮件地址:
/etc/fail2ban/jail.local
[DEFAULT]
. . .
destemail = [email protected]
. . .
您可以设置sendername为别的东西,如果你愿意的话。有一个值可以很容易地使用您的邮件服务过滤是有用的,否则您的常规收件箱可能会充斥警报,如果有很多尝试从各个地方的中断。 向下移动,我们需要的调整action参数,以发送电子邮件我们的行动之一。 选用的是与action_mw该机构的禁令,然后我们的电子邮件侵入主机上的“Whois”报道,或action_mwl它可以完成上述,也电子邮件相关的日志行。 我们将选择action_mwl因为日志线将帮助我们排除故障并收集更多的信息,如果有问题:
/etc/fail2ban/jail.local
[DEFAULT]
. . .
action = %(action_mwl)s
. . .
移动到我们的SSH部分,如果我们要调整应允许建立一个禁令之前,您可以编辑的不成功的尝试量maxretry项。 如果您使用的是“22”以外的端口,你要调整port适当的参数。正如我们之前所说,这个服务已经启用,所以我们不需要修改。 接下来,搜索nginx-http-auth部分。 取消对报头和改变enabled参数为“真”。
/etc/fail2ban/jail.local
. . .
[nginx-http-auth]

enabled = true
. . .
除非您的Web服务器在非标准端口上运行,或者您移动了默认错误日志路径,否则应该完成此部分。
重新启动Fail2ban服务
完成后,保存并关闭文件。 现在,启动或重新启动fail2ban服务。有时,最好完全关闭服务,然后再启动它:
sudo service fail2ban stop
现在我们可以通过键入以下命令重新启动它:
sudo service fail2ban start
您的所有防火墙规则可能需要一段时间才能填充。有时,规则不会添加,直到第一次禁止这种类型被设立。但是,过一段时间后,您可以通过键入以下内容来检查新规则:
sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-nginx-http-auth
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
-A fail2ban-nginx-http-auth -j RETURN
-A fail2ban-ssh -j RETURN

红色的线是我们的fail2ban策略创建的线。现在,他们只是把交通引向新的,几乎空的链,然后让交通流回到INPUT链。 然而,这些新链是将添加禁止规则的地方。
测试禁用策略
从另一个服务器,不需要登录到您的fail2ban服务器,我们可以通过获取我们的第二个服务器禁止测试规则。 登录到第二台服务器后,尝试SSH到fail2ban服务器。您可以尝试使用不存在的名称连接,例如:
ssh blah@fail2ban_server_IP
在密码提示中输入随机字符。重复几次。在某些时候,对的fail2ban服务器将停止响应的Permission denied的消息。这表示您的第二个服务器已被禁止使用fail2ban服务器。 在您的fail2ban服务器上,您可以通过再次检查iptables来查看新规则:
sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-nginx-http-auth
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
-A fail2ban-nginx-http-auth -j RETURN
-A fail2ban-ssh -s 203.0.113.14/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN

如您在突出显示的行中所看到的,我们在配置中有一条新规则,它拒绝来自第二个服务器的IP地址的SSH端口的流量。您还应该已经收到一封有关您配置的帐户中的禁令的电子邮件。
结论
您现在应该能够为您的服务配置一些基本的禁止策略。 Fail2ban非常容易设置,是一个伟大的方式来保护任何使用身份验证的服务。 如果您想了解更多关于如何的fail2ban的作品,你可以看看我们的教程fail2ban规则和文件是如何工作的 。 有关如何使用fail2ban保护其他服务的信息:


how to protect Nginx -> : https://www.howtoing.com/how-fail2ban-works-to-protect-services-on-a-linux-server/

how to protect Apache -> : https://www.howtoing.com/how-to-protect-an-apache-server-with-fail2ban-on-ubuntu-14-04/

你可能感兴趣的:(通过fail2ban使服务器成获得额外的安全性)