介绍
在运行 Web 服务器时,重要的是要实施安全措施来保护您的网站和用户. 通过防火墙策略保护您的网站和应用程序,并限制使用密码身份验证访问某些区域是确保您的系统安全的一个很好的起点。
设置fail2ban
可以帮助缓解这个问题。当用户反复未能验证服务(或参与其他可疑活动)时,fail2ban
可以通过动态修改正在运行的防火墙策略对侵犯的 IP 地址发出临时禁令。
在本指南中,我们将展示如何安装fail2ban
,并将其配置为监控您的Apache日志,以检测入侵尝试。
前提条件
在你开始之前,你应该有一个 Ubuntu 14.04 服务器,设置一个非 root 帐户. 这个帐户应该配置sudo
权限以发出管理命令. 要了解如何设置具有sudo
权限的用户,请遵循我们的 Ubuntu 14.04 初始服务器设置指南。
安装Apache和配置密码身份验证
如果你有兴趣用fail2ban来保护你的Apache服务器,你可能已经有一个服务器设置和运行了,否则你可以使用apt从Ubuntu的默认存储库中安装Apache。
更新本地包索引并通过键入安装:
1sudo apt-get update
2sudo apt-get install apache2
fail2ban
服务有助于保护登录输入点. 为了在 Apache 安装中使用此功能,至少必须对服务器上的一小组内容实施密码验证。
安装 Fail2Ban
一旦您的Apache服务器运行并启用了密码身份验证,您可以继续安装fail2ban(如果您在之前的步骤中已经安装了Apache,我们将此处添加另一个存储库重置):
1sudo apt-get update
2sudo apt-get install fail2ban
这将安装软件. 默认情况下,‘fail2ban’配置为只禁止失败的SSH登录尝试. 我们需要启用一些规则,将其配置为检查我们的Apache日志,以检测表明恶意活动的模式。
在 Fail2Ban 中调整一般设置
要开始,我们需要调整 fail2ban
使用的配置文件,以确定哪些应用程序日志要监控,以及在发现侵权条目时要采取哪些行动。
要进行更改,我们需要将此文件复制到 /etc/fail2ban/jail.local
. 这将防止我们的更改被重写,如果一个包更新提供了新的默认文件:
1sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
打开新复制的文件,以便我们可以设置我们的Apache日志监控:
1sudo nano /etc/fail2ban/jail.local
改变缺陷
我们应该首先评估文件中设置的默认值,看看它们是否符合我们的需求。这些值将在文件中的DEFAULT
部分中找到。
第一個要看的項目之一是不受「fail2ban」政策的客戶列表,這是由「ignoreip」指令所設定的。有時可以將自己的IP地址或網絡添加到例外列表中,以避免自己被鎖定。如果您能夠保持容器存取,這更不容易,因為您可以隨時手動取消禁令。
1[label /etc/fail2ban/jail.local]
2[DEFAULT]
3
4. . .
5ignoreip = 127.0.0.1/8 your_home_IP
您可能想要调整的另一个项目是破坏时间
,它控制了侵权会员被禁用了多少秒。 理想情况是将此设置为足够长的时间来破坏恶意行为者的努力,而足够短的时间来允许合法用户纠正错误。
1[label /etc/fail2ban/jail.local]
2[DEFAULT]
3
4. . .
5bantime = 3600
接下来的两个条款决定了用于确定违规客户端的日志线的范围。findtime
指定了秒数的时间,而maxretry
指示了在该时间内容忍的尝试数量。
1[label /etc/fail2ban/jail.local]
2[DEFAULT]
3
4. . .
5findtime = 3600 # These lines combine to ban clients that fail
6maxretry = 6 # to authenticate 6 times within a half hour.
设置邮件通知(可选)
您可以启用电子邮件通知,如果您希望在发生禁令时收到邮件。 要做到这一点,您必须先在服务器上设置一个MTA,以便它可以发送电子邮件。
一旦你已经设置了MTA,你将不得不调整某些额外的设置在文件的 /etc/fail2ban/jail.local
部分中。 开始通过设置 mta
指令。 如果你设置了Postfix,如上面的教程所示,改变这个值为邮件
:
1[label /etc/fail2ban/jail.local]
2[DEFAULT]
3
4. . .
5mta = mail
您需要选择将发送通知的电子邮件地址。 用此值修改destemail
指令。 可以使用sendername
指令在通知电子邮件中更改发送
字段:
1[label /etc/fail2ban/jail.local]
2[DEFAULT]
3
4. . .
5destemail = [email protected]
6sendername = Fail2BanAlerts
在fail2ban
中,一个操作
是当客户端过多次失败身份验证时所遵循的程序。默认操作(称为action_
)是简单地禁止 IP 地址从所涉及的端口。
您可以使用「action_mw」操作来禁用客户端,并向配置的帐户发送电子邮件通知,并在侵权地址上发布whois
报告,您也可以使用「action_mwl」操作,该操作可以做同样的事情,但还包括触发禁令的侵权日志行:
1[label /etc/fail2ban/jail.local]
2[DEFAULT]
3
4. . .
5action = %(action_mwl)s
配置 Fail2Ban 来监控 Apache 日志
现在你已经有了一些一般的fail2ban
设置,我们可以专注于启用 Apache 特定的监狱,这些监控将监控我们的 Web 服务器日志以检测特定行为模式。
配置文件中的每个监狱都被标记为包含监狱名称的标题(每个部分但[DEFAULT]
部分表示特定监狱的配置)。
为了启用对Apache登录尝试的日志监控,我们将启用[apache]
监狱。
1[label /etc/fail2ban/jail.local]
2[apache]
3
4enabled = true
5port = http,https
6filter = apache-auth
7logpath = /var/log/apache*/*error.log
8maxretry = 6
9. . .
如果你的Apache服务器正在写到默认的日志位置(/var/log/apache/error.log
),监狱已经配置到正确的位置看。如果你正在登录到不同的位置,则根据需要修改‘logpath’。
1[label /etc/fail2ban/jail.local]
2[apache]
3
4enabled = true
5port = http,https
6filter = apache-auth
7logpath = /var/log/apache/custom_log_location.log
8maxretry = 3
9findtime = 600
10. . .
上面的监狱将负责禁止基本的身份验证失败,还有其他一些预先配置的监狱值得启用(‘apache-multiport’监狱是一个不需要的遗留监狱)。
apache-noscript
监狱被用来禁止在网站上寻找脚本的客户端执行和利用,如果你不使用PHP或任何其他语言与你的Web服务器一起使用,你可以启用这个监狱来禁止那些要求这些类型的资源的人:
1[label /etc/fail2ban/jail.local]
2[apache-noscript]
3
4enabled = true
5. . .
apache-overflows
监狱被用来阻止试图请求异常长和可疑的URL的客户端,这些往往是试图通过试图触发缓冲过流来利用Apache的迹象。
1[label /etc/fail2ban/jail.local]
2[apache-overflows]
3
4enabled = true
5. . .
一些额外的检查可以通过复制和粘贴[apache-overflows]
条目,并稍微修改它,例如,您可以复制和粘贴该部分,并修改监狱名称和过滤到apache-badbots
,以阻止一些已知的恶意机器人请求模式:
1[label /etc/fail2ban/jail.local]
2[apache-overflows]
3
4enabled = true
5port = http,https
6filter = apache-overflows
7logpath = /var/log/apache*/*error.log
8maxretry = 2
9
10[apache-badbots]
11
12enabled = true
13port = http,https
14filter = apache-badbots
15logpath = /var/log/apache*/*error.log
16maxretry = 2
如果您不使用 Apache 提供用户主目录中的网页内容访问,则可以复制、粘贴并将监狱和过滤器名称更改为apache-nohome
:
1[label /etc/fail2ban/jail.local]
2[apache-overflows]
3
4enabled = true
5port = http,https
6filter = apache-overflows
7logpath = /var/log/apache*/*error.log
8maxretry = 2
9
10[apache-badbots]
11
12enabled = true
13port = http,https
14filter = apache-badbots
15logpath = /var/log/apache*/*error.log
16maxretry = 2
17
18[apache-nohome]
19
20enabled = true
21port = http,https
22filter = apache-nohome
23logpath = /var/log/apache*/*error.log
24maxretry = 2
最后,如果您正在使用Apache与PHP,您可能想要启用[php-url-fopen]
监狱,这阻止了试图使用某些PHP行为的恶意目的。您可能需要更改logpath
指令,以指明正确的访问日志位置(在Ubuntu,默认位置是/var/log/apache2/access.log
).您可以使用类似于其他监狱中的错误日志相匹配的模式:
1[label /etc/fail2ban/jail.local]
2[php-url-fopen]
3
4enabled = true
5port = http,https
6filter = php-url-fopen
7logpath = /var/log/apache*/*access.log
当您完成所需的更改时,保存并关闭文件。
实施你的Apache监狱
要实现配置更改,您需要重新启动fail2ban
服务,您可以通过键入:
1sudo service fail2ban restart
该服务应该重新启动,执行您已配置的不同禁用策略。
获取有关启用监狱的信息
您可以通过使用fail2ban-client
命令查看所有已启用的监狱:
1sudo fail2ban-client status
您应该看到您启用的所有监狱的列表:
1[secondary_label Output]
2Status
3|- Number of jail: 7
4`- Jail list: php-url-fopen, apache-overflows, apache-noscript, ssh, apache-badbots, apache-nohome, apache
您可以看到「fail2ban」已修改了您的防火墙规则,以创建禁止客户端的框架,即使没有以前的防火墙规则,您现在也将有一个框架启用,允许「fail2ban」通过将其添加到专门构建的链条中选择性地禁止客户端:
1sudo iptables -S
1[secondary_label Output]
2-P INPUT ACCEPT
3-P FORWARD ACCEPT
4-P OUTPUT ACCEPT
5-N fail2ban-apache
6-N fail2ban-apache-badbots
7-N fail2ban-apache-nohome
8-N fail2ban-apache-noscript
9-N fail2ban-apache-overflows
10-N fail2ban-php-url-fopen
11-N fail2ban-ssh
12-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-nohome
13-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-badbots
14-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-php-url-fopen
15-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows
16-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-noscript
17-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache
18-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
19-A fail2ban-apache -j RETURN
20-A fail2ban-apache-badbots -j RETURN
21-A fail2ban-apache-nohome -j RETURN
22-A fail2ban-apache-noscript -j RETURN
23-A fail2ban-apache-overflows -j RETURN
24-A fail2ban-php-url-fopen -j RETURN
25-A fail2ban-ssh -j RETURN
如果你想看到任何一个监狱实施禁令的细节,那么可能更容易再次使用fail2ban客户端:
1sudo fail2ban-client status apache
1[secondary_label Output]
2Status for the jail: apache
3|- filter
4| |- File list: /var/log/apache2/error.log
5| |- Currently failed: 0
6| `- Total failed: 0
7`- action
8 |- Currently banned: 0
9 | `- IP list:
10 `- Total banned: 0
测试 Fail2Ban 政策
重要的是要测试您的fail2ban
策略,以确保它们按预期阻止流量。例如,对于Apache身份验证提示,您可以多次提供错误的身份验证信息。一旦超过了限制,您应该被禁用并无法访问该网站。
如果你用fail2ban-client
命令查看状态,你会看到你的IP地址被禁止从网站:
1sudo fail2ban-client status apache
1[secondary_label Output]
2Status for the jail: apache
3|- filter
4| |- File list: /var/log/apache2/error.log
5| |- Currently failed: 0
6| `- Total failed: 12
7`- action
8 |- Currently banned: 1
9 | `- IP list: 111.111.111.111
10 `- Total banned: 1
当您确信您的规则正在工作时,您可以通过键入fail2ban-client
来手动解禁您的IP地址:
1sudo 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的信息,请参阅以下几个链接: