如何通过配置fail2ban保护Apache HTTP服务器?

生产环境中的Apache HTTP服务器可能会遭到各种不同方式的攻击。攻击者可能采用蛮力攻击或执行恶意脚本,企图访问未经授权的目录或禁止访问的目录。一些恶意机器人程序可能会扫描你的网站,查找任何可能存在的安全漏洞,或者收集电子邮件地址或网站表单,以便发送垃圾邮件。

Apache HTTP服务器随带全面的日志功能,可以捕获及记录表明此类攻击的异常事件。不过,系统性地分析详细的Apache日志,并迅速应对潜在攻击(比如禁止/取消禁止冒犯性的IP地址)仍然很重要。这时候fail2ban派得上用场,可以简化系统管理员的工作。

fail2ban是一款开源入侵预防工具,可以根据系统日志来检测各种各样的攻击,并且自动采取预防行动,比如说使用iptables禁止IP地址,通过/etc/hosts.deny阻止连接,或者通过电子邮件通知事件。fail2ban随带一组预先定义的“jail”(暂译“监狱”),这些jail使用针对特定应用程序的日志过滤器来检测常见攻击。你还可以编写自定义的jail,阻止针对任意应用程序的任何特定的攻击。

我在本教程中将演示你如何可以配置fail2ban,以保护Apache HTTP服务器。我假设你事先已经安装好了Apache HTTP服务器和fail2ban。至于fail2ban的安装,请参阅另一篇教程:http://xmodulo.com/how-to-protect-ssh-server-from-brute-force-attacks-using-fail2ban.html。

fail2ban Jail是什么?

首先允许我比较详细地介绍一下fail2ban jail。jail定义了针对特定应用程序的策略,fail2ban根据该策略来触发保护某个应用程序的行动。针对Apache、Dovecot、Lighttpd、MySQL、Postfix和SSH之类的流行应用程序,fail2ban随带几个在/etc/fail2ban/jail.conf中预先定义的jail。每个jail依靠针对特定应用程序的日志过滤器(位于/etc/fail2ban/fileter.d)来检测常见攻击。不妨看一个示例性的jail:SSH jail。

[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
banaction = iptables-multiport

这个SSH jail的配置由几个参数来定义:

•[ssh]:jail的名称,带方括号。
•enabled:该jail是不是激活。
•port:要保护的端口号(数字编号或公共名)。
•filter:用来检测攻击的分析日志的规则。
•logpath:要仔细分析的日志文件。
•maxretry:禁止之前最多失败次数。
•banaction:禁止动作。

jail配置中定义的任何参数将覆盖对应的适用整个fail2ban范围的默认参数。反过来,任何遗漏的参数会被赋予在[DEFAULT]部分中定义的默认值。

预先定义的日志过滤器位于/etc/fail2ban/filter.d,可用的动作位于/etc/fail2ban/action.d。

如果你想覆盖fail2ban默认参数或者定义任何自定义的jail,只要通过创建/etc/fail2ban/jail.local文件就能实现。我在本教程中将使用/etc/fail2ban/jail.local。#p#

启用预先定义的Apache Jail

默认安装的fail2ban为Apache HTTP服务器提供了几种预先定义的jail和过滤器。我准备启用那些内置的Apache jail。由于Debian配置和红帽配置略有差异,我为它们单独提供了fail2ban jail配置。

在Debian或Ubuntu上启用Apache Jail

想在基于Debian的系统上启用预先定义的Apache jail,就要创建/etc/fail2ban/jail.local,如下所示。

$ sudo vi /etc/fail2ban/jail.local

# 检测密码验证失败

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

# 检测搜索安全薄弱环节和php漏洞的潜在行为

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

# 检测Apache溢出企图

[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
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

由于上述没有一个jail指定动作,所有这些jail被触发后将执行默认动作。想弄清楚默认动作,寻找/etc/fail2ban/jail.conf中[DEFAULT]部分下面的“banaction”。

banaction = iptables-multiport

在这个情况下,默认动作是iptables-multiport(在/etc/fail2ban/action.d/iptables-multiport.conf中定义)。该动作使用iptables以及multiport模块禁止IP地址。

启用jail后,你必须重启fail2ban,以便装入jail。

$ sudo service fail2ban restart

在CentOS/RHEL或Fedora上启用Apache jail

想在基于红帽的系统上启用预先定义的Apache jail,就要创建/etc/fail2ban/jail.local,如下所示。

$ sudo vi /etc/fail2ban/jail.local

# 检测密码验证失败

[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/httpd/*error_log
maxretry = 6

# 检测搜索电子邮件地址的垃圾邮件机器人程序

[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/httpd/*access_log
bantime = 172800
maxretry = 1

#检测搜索安全薄弱环节和php漏洞的潜在行为vulnerabilities

[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/httpd/*error_log
maxretry = 6

# 检测Apache溢出企图

[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/httpd/*error_log
maxretry = 2

# 检测未能在服务器上找到主目录的活动

[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/httpd/*error_log
maxretry = 2

# 检测未能执行与几种流行Web服务

# (比如webmail,phpMyAdmin,WordPress)

# 有关的不存在脚本

port = http,https
filter = apache-botsearch
logpath = /var/log/httpd/*error_log
maxretry = 2

请注意:所有这些jail的默认动作是iptables-multiport(定义为/etc/fail2ban/jail.conf中[DEFAULT]下面的“banaction”)。该动作使用iptable以及multiport模块禁止IP地址。

启用jail后,你必须重启fail2ban,将jail装入到fail2ban中。

在Fedora或CentOS/RHEL 7上:

$ sudo systemctl restart fail2ban

在CentOS/RHEL 6上:

$ sudo service fail2ban restart

#p#

检查和管理Fail2ban禁止状态

一旦jail被激活,你可以使用fail2ban-client命令行工具,监控当前的禁止状态。

想查看活动jail列表:

$ sudo fail2ban-client status

想查看某一个jail的状态(包括被禁止IP列表):

$ sudo fail2ban-client status [name-of-jail]

你还可以手动禁止或取消禁止IP地址。

想让某一个jail禁止IP地址:

$ sudo fail2ban-client set [name-of-jail] banip [ip-address]

想取消禁止某个jail阻止的IP地址:

$ sudo fail2ban-client set [name-of-jail] unbanip [ip-address]

结束语

这篇教程介绍了fail2ban jail是如何工作的,以及如何使用内置的Apache jail保护Apache HTTP服务器。你可能需要改动现有的jail,或者编写自定义的jail和日志过滤器,这要看你的环境以及需要保护的Web服务的具体类型。参阅outfail2ban的官方Github页面:https://github.com/fail2ban/fail2ban,即可了解jail和过滤器的最新例子。

你是否在任何生产环境中使用fail2ban?欢迎交流经验和心得。

原文地址:http://xmodulo.com/configure-fail2ban-apache-http-server.html

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/130638.html<

(0)
运维的头像运维
上一篇2025-02-26 04:24
下一篇 2025-02-26 04:25

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注