如何在Ubuntu 14.04与保护的fail2ban Apache服务器

当运行一个Web服务器,它实现安全的措施来保护您的网站和用户来说是非常重要的。保护您的网站和应用程序防火墙策略和限制密码验证进入某些地区是一个很好的起点......

介绍

在操作Web服务器时,实施安全措施以保护您的站点和用户非常重要。 使用防火墙策略保护您的网站和应用程序,并使用密码身份验证限制对某些区域的访问是保护系统的一个很好的起点。 然而,任何可以公开访问的密码提示可能会吸引来自恶意用户和机器人的暴力攻击。

设置fail2ban可以帮助缓解这一问题。 当用户多次未能进行身份验证服务(或从事其他可疑活动) fail2ban可以动态修改防火墙的运行政策问题上违规IP地址的临时禁令。 每个fail2ban “监狱”通过检查由服务这表明失败的尝试模式写入日志操作。 设置fail2ban监控Apache日志很容易使用随附的配置过滤器。

在本指南中,我们将演示如何安装fail2ban和配置它来监控你的Apache日志入侵企图。 我们将使用Ubuntu 14.04服务器。

先决条件

在开始之前,您应该使用非root帐户设置一个Ubuntu 14.04服务器。 该帐户应该与配置sudo权限才能发出管理命令。 要了解如何建立与用户sudo权限,按照我们最初的服务器设置指南的Ubuntu 14.04

安装Apache和配置密码验证

如果您有兴趣与保护Apache服务器fail2ban ,你可能已经有一个服务器设置和运行。 如果没有,你可以使用从Ubuntu的默认仓库安装Apache apt

通过键入以下命令更新本地软件包索引并进行安装:

sudo apt-get update
sudo apt-get install apache2

fail2ban服务是为了保护登录入口点有用的。 为了使这对于Apache安装是有用的,必须对服务器上的至少一部分内容实现密码认证。 您可以按照本指南配置密码保护Apache服务器。

安装Fail2Ban

一旦你的Apache服务器正在运行,并设置了密码认证,您可以继续安装fail2ban (含有另一个仓库再取出在这里如果你已经有Apache的设置在前面的步骤):

sudo apt-get update
sudo apt-get install fail2ban

这将安装软件。 缺省情况下, fail2ban被配置为仅禁止失败SSH登录尝试。 我们需要启用一些规则来配置它来检查我们的Apache日志中是否存在指示恶意活动的模式。

调整Fail2Ban中的常规设置

在开始之前,我们需要调整配置文件fail2ban用途来确定哪些应用程序日志监控,当发现违规项采取什么行动。 提供的/etc/fail2ban/jail.conf文件是这样做的主要提供资源。

要进行修改,我们需要把这个文件复制到/etc/fail2ban/jail.local 如果程序包更新提供了一个新的默认文件,这将防止我们的更改被覆盖:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

打开新复制的文件,以便我们可以设置Apache日志监视:

sudo nano /etc/fail2ban/jail.local

更改默认值

我们应该首先评估文件中设置的默认值,看看它们是否符合我们的需要。 这些将下可以找到[DEFAULT]文件中的部分。 这些项目设置了一般策略,并且可以在特定的jail中覆盖。

一第一项来看的是,不受到客户的清单fail2ban政策。 这是通过设置ignoreip指令。 有时一个好主意是添加您自己的IP地址或网络到异常列表,以避免锁定自己。 这是更少的web服务器登录问题,虽然如果你能够维护shell访问,因为你可以总是手动撤消禁令。 您可以向现有列表添加由空格分隔的其他IP地址或网络:

/etc/fail2ban/jail.local
[DEFAULT]

. . .
ignoreip = 127.0.0.1/8 your_home_IP

你可能需要调整的另一个项目是在bantime ,控制违规成员多少秒禁赛。 理想的是将其设置为足够长的时间来破坏恶意演员的努力,同时足够短以允许合法用户纠正错误。 默认情况下,设置为600秒(10分钟)。 根据您的需要增加或减少此值:

/etc/fail2ban/jail.local
[DEFAULT]

. . .
bantime = 3600

接下来的两个项目确定用于确定违规客户端的日志行的范围。 所述findtime指定的时间量,以秒和maxretry指令指示要在该时间内耐受的尝试次数。 如果客户端发出超过maxretry时间由所设定的金额尝试findtime ,他们将被禁止:

/etc/fail2ban/jail.local
[DEFAULT]

. . .
findtime = 3600   # These lines combine to ban clients that fail
maxretry = 6      # to authenticate 6 times within a half hour.

设置邮件通知(可选)

如果您希望在禁令发生时收到邮件,您可以启用电子邮件通知。 为此,您必须首先在服务器上设置MTA,以便它可以发送电子邮件。 要了解如何使用Postfix的这个任务,请按照本指南

一旦你有你的MTA设置,您必须将内调整一些额外的设置[DEFAULT]一节的/etc/fail2ban/jail.local文件。 通过设置启动mta指令。 如果你设置Postfix,像上面的教程演示,将此值更改为“mail”:

/etc/fail2ban/jail.local
[DEFAULT]

. . .
mta = mail

您需要选择将要发送通知的电子邮件地址。 修改destemail该值指示。 sendername指令可以用于修改通知电子邮件的“发件人”字段:

/etc/fail2ban/jail.local
[DEFAULT]

. . .
destemail = youraccount@email.com
sendername = Fail2BanAlerts

fail2ban说法,一个“行动”的程序,当客户端认证失败过很多次紧随其后。 默认动作(称为action_ )是简单地从有问题的端口禁止的IP地址。 但是,如果您设置了邮件,还可以使用两个其他预先设置的操作。

您可以使用action_mw行动,禁止在客户端和发送电子邮件通知您配置的帐户上有问题的地址的“Whois”的报告。 你也可以使用action_mwl动作,做同样的事情,而且还包括触发该禁令违规日志行:

/etc/fail2ban/jail.local
[DEFAULT]

. . .
action = %(action_mwl)s

配置Fail2Ban监控Apache日志

现在,你有一些一般fail2ban到位的设置,我们可以集中精力实现,将监视我们的Web服务器日志为特定行为模式的具体Apache的监狱。

在配置文件中的每个监狱被包含在方括号监狱名称的头标(每个部分,但[DEFAULT]部分表示一个特定的监狱的配置)。 默认情况下,只有[ssh]监狱被启用。

为了使Apache的登录尝试日志监控,我们将启用[apache]监狱。 编辑enabled这一节中,使得其显示为“true”指令:

/etc/fail2ban/jail.local
[apache]

enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6
. . .

如果你的Apache服务器写入默认日志位置( /var/log/apache/error.log )监狱已经配置在正确的地方去寻找。 如果登录到不同的位置,修改logpath需要。 此外,随意调整maxretry指令或添加findtime为此坐牢值,如果你想设置为这个特定的监狱不同的限制:

/etc/fail2ban/jail.local
[apache]

enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache/custom_log_location.log
maxretry = 3
findtime = 600
. . .

上述监狱将负责禁止基本身份验证失败。 也有一些其他的预配置的监狱,是值得让(在[apache-multiport]监狱是不需要传统的监狱)。

[apache-noscript]监狱是用来禁止客户端搜索的网站上的脚本来执行和利用。 如果您不使用PHP或任何其他语言与您的Web服务器,您可以启用此监狱禁止请求这些类型的资源:

/etc/fail2ban/jail.local
[apache-noscript]

enabled  = true
. . .

[apache-overflows]监狱被用来阻止谁试图要求特别长的和可疑的URL的客户。 这些通常试图通过尝试触发缓冲区溢出来尝试利用Apache。 如果您希望防止这些类型的攻击,您可以启用此监狱:

/etc/fail2ban/jail.local
[apache-overflows]

enabled  = true
. . .

一些额外的检查可以通过复制和粘贴制成[apache-overflows]条目并稍微修改它。 例如,您可以复制和粘贴部分和修改监狱的名称和过滤到apache-badbots制止一些已知的恶意僵尸的请求模式:

/etc/fail2ban/jail.local
[apache-overflows]

enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2

[apache-badbots]

enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache*/*error.log
maxretry = 2

如果你不使用Apache来提供访问内部用户的主目录网页内容,您可以复制和重新粘贴,改变监狱和过滤器名称apache-nohome

/etc/fail2ban/jail.local
[apache-overflows]

enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2

[apache-badbots]

enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache*/*error.log
maxretry = 2

[apache-nohome]

enabled  = true
port     = http,https
filter   = apache-nohome
logpath  = /var/log/apache*/*error.log
maxretry = 2

最后,如果你使用的是Apache和PHP,你可能要启用[php-url-fopen]监狱,以阻止企图利用某些PHP的行为用于恶意目的。 你将有可能改变logpath以指向正确的访问日志的位置(在Ubuntu的默认位置是/var/log/apache2/access.log )。 您可以使用类似于匹配其他jail中的错误日志的模式:

/etc/fail2ban/jail.local
[php-url-fopen]

enabled = true
port    = http,https
filter  = php-url-fopen
logpath = /var/log/apache*/*access.log

完成所需的修改后,保存并关闭文件。

实现你的Apache Jails

要实现你的配置更改,则需要重新启动fail2ban服务。 你可以通过键入:

sudo service fail2ban restart

该服务应重新启动,实施您配置的不同禁止策略。

获取有关启用Jails的信息

您可以通过查看所有已启用监狱fail2ban-client命令:

sudo fail2ban-client status

您应该会看到您启​​用的所有jails的列表:

Status
|- Number of jail:      7
`- Jail list:           php-url-fopen, apache-overflows, apache-noscript, ssh, apache-badbots, apache-nohome, apache

你可以看到fail2ban已修改防火墙规则以创建禁止客户端框架。 即使没有以前的防火墙规则,你现在将有一个框架,启用了允许fail2ban来将它们添加到专用链选择性地禁止客户端:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-apache
-N fail2ban-apache-badbots
-N fail2ban-apache-nohome
-N fail2ban-apache-noscript
-N fail2ban-apache-overflows
-N fail2ban-php-url-fopen
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-nohome
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-badbots
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-php-url-fopen
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-noscript
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A fail2ban-apache -j RETURN
-A fail2ban-apache-badbots -j RETURN
-A fail2ban-apache-nohome -j RETURN
-A fail2ban-apache-noscript -j RETURN
-A fail2ban-apache-overflows -j RETURN
-A fail2ban-php-url-fopen -j RETURN
-A fail2ban-ssh -j RETURN

如果你想看到任何一个监狱被强制执行禁令的细节,它可能是更容易使用fail2ban-client再次:

sudo fail2ban-client status apache
Status for the jail: apache
|- filter
|  |- File list:        /var/log/apache2/error.log 
|  |- Currently failed: 0
|  `- Total failed:     0
`- action
   |- Currently banned: 0
   |  `- IP list:
   `- Total banned:     0

测试Fail2Ban策略

重要的是要测试你fail2ban政策,以确保他们阻止业务预期。 例如,对于Apache身份验证提示,您可以提供不正确的凭据多次。 超过限制后,您应该被禁止并无法访问该网站。 如果您设置了电子邮件通知,则应该会在您提供的电子邮件帐户中看到有关禁止的邮件。

如果你看看与地位fail2ban-client命令,你会看到你的IP地址从网站被禁止:

sudo fail2ban-client status apache
Status for the jail: apache
|- filter
|  |- File list:        /var/log/apache2/error.log 
|  |- Currently failed: 0
|  `- Total failed:     12
`- action
   |- Currently banned: 1
   |  `- IP list:       111.111.111.111
   `- Total banned:     1

当你确信自己的规则时,可以手动取消禁止与你的IP地址fail2ban-client通过键入:

sudo fail2ban-client set apache unbanip 111.111.111.111

您现在应该能够再次尝试身份验证。

结论

设置fail2ban来保护Apache服务器是相当简单的最简单的情况。 然而, fail2ban提供具有很大的灵活性来构建,将满足您的特定安全需求的政策。 通过在内的变量和图案考虑看看/etc/fail2ban/jail.local文件,并将这些文件这取决于内/etc/fail2ban/filter.d/etc/fail2ban/action.d目录,就可以找到很多件,随着你的需求变化来调整和改变。 学习如何保护您的服务器基础fail2ban可以为您提供安全用最小的努力很大。

要了解更多有关fail2ban ,看看其中的一些环节: