如何安装配置Apache中的mod_security和mod_evasive

网站服务器安全是个大话题;说到什么是加固某一台网站服务器的最佳工具和技术,不同的人自有不同的偏好和观点。就Apache网站服务器而言,即便不是所有专家,至少也是绝大多数专家一致认为,mod_security和mod_evasive是两个非常重要的模块,可以保护Apache网站服务器远离常见的威胁。

我们在本文中将探讨如何安装及配置mod_security和mod_evasive,假设Apache HTTP网站服务器已经搭建并运行起来。我们将执行演示性质的压力测试,看看该网站服务器在遇到拒绝服务(DOS)攻击时会有怎样的反应,并且演示它如何借助这些模块来反击。我们在本教程中将使用CentOS平台。

安装mod_security和mod_evasive

要是你还没有启用CentOS/RHEL服务器中的EPEL软件库,就需要先启用该软件库,之后再安装这些软件包。

# yum install mod_security
# yum install mod_evasive

安装完成后,你会在/etc/httpd/conf.d里面找到主配置文件:

现在,你需要确保Apache启动时装入这两个模块。在mod_security.conf和mod_evasive.conf中分别寻找下列行(如果没有这些行,就添加上去):

LoadModule security2_module modules/mod_security2.so
LoadModule evasive20_module modules/mod_evasive20.so

在上述两行:

•LoadModule指令告诉Apache链接对象文件(*.so),将它添加到活动模块列表。

•security2_module和evasive20_module是模块的名称。

•modules/mod_security2.so和modules/mod_evasive20.so是从/etc/httpd目录到模块源文件的相对路径。只要检查/etc/httpd/modules目录的内容,就能核实路径(必要的话,还可以更改路径)。

现在重启Apache网站服务器:

# service httpd restart

#p#

配置mod_security

为了使用mod_security,必须先安装核心规则集(CRS)。基本上而言,CRS为网站服务器提供了一套规则,这套规则明确了在某些情形下服务器有怎样的行为。Trustwave的SpiderLabs(开发mod_security的公司)提供了开放式Web应用安全项目(OWASP)ModSecurity CRS,详见https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project。

如果想下载并安装最新的OWASP CRS,可以使用下面这些命令。

# mkdir /etc/httpd/crs
# cd /etc/httpd/crs
# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master
# tar xzf master
# mv SpiderLabs-owasp-modsecurity-crs-ebe8790 owasp-modsecurity-crs

现在,浏览到已安装的OWASP CRS目录。

# cd /etc/httpd/crs/owasp-modsecurity-crs

在OWASP CRS目录里面,你会找到附有规则的示例文件(modsecurity_crs_10_setup.conf.example)。

我们将该文件的内容拷贝到一个新文件中,为了方便起见,新文件名为modsecurity_crs_10_setup.conf。

# cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf

为了告诉Apache就mod_security模块使用这个文件,将下面几行插入到/etc/httpd/conf/httpd.conf文件中。具体路径可能不一样,取决于你将CRS打包文件解压缩在何处。

<IfModule security2_module>
    Include crs/owasp-modsecurity-crs/modsecurity_crs_10_setup.conf
    Include crs/owasp-modsecurity-crs/base_rules/*.conf
</IfModule>

 

最后但并非最不重要的是,我们将在modsecurity.d目录里面创建自己的配置文件,我们会将所选择的指令加入到该配件文件中。在本例中,我们将这个配置文件命名为xmodulo.conf。强烈建议你别直接编辑CRS文件,而是把所有必要的指令都放在这个配置文件中。这样一来,更新的CRS发布后,就比较容易升级。

 

# vi /etc/httpd/modsecurity.d/xmodulo.conf 
<IfModule mod_security2.c>
 SecRuleEngine On
 SecRequestBodyAccess On
 SecResponseBodyAccess On
 SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream
 SecDataDir /tmp
</IfModule>

•SecRuleEngine On:使用OWASP CRS检测并阻止恶意攻击。

•SecRequestBodyAccess On:启用对传送数据的请求主体(比如POST参数)进行检查的功能。

•SecResponseBodyAccess On:缓冲响应主体(前提是响应MIMI类型符合用SecResponseBodyMimeType配置的列表)。

•SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream:配置认为哪些MIME类型用于响应主体缓冲。如果你对MIME类型不熟悉,或者对它们的名称或用法没有把握,可以检查互联网编号分配机构(IANA)网站。

•SecDataDir /tmp:存储持久性数据(比如IP地址数据和会话数据等数据)的路径。这里的持久性意味着不存储在内存中,而是存储在硬盘上的任何数据。

你可以访问SpiderLabs的ModSecurity GitHub软件库:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Configuration_Directives,参阅配置指令的完整指南。

别忘了重启Apache,让变更生效。#p#

配置mod_evasive

mod_evasive模块读取来自/etc/httpd/conf.d/mod_evasive.conf的配置。与mod_security不一样,我们不需要独立的配置文件,因为在系统或软件包升级过程中没有规则需要更新。

默认的mod_evasive.conf文件已启用了下列指令:

 

<IfModule mod_evasive20.c>
    DOSHashTableSize    3097
    DOSPageCount       2
    DOSSiteCount       50
    DOSPageInterval      1
    DOSSiteInterval       1
    DOSBlockingPeriod   10
</IfModule>

•DOSHashTableSize:用来跟踪每个IP地址活动的哈希表的大小。加大这个数值可以加快查询客户机过去所访问的网站的速度,但要是该值设得过高,可能会影响整体性能。

•DOSPageCount:访客在DOSPageInterval间隔时间内可以向某个URI(比如Apache加载的文件)发出的相同请求的数量。

•DOSSiteCount:类似DOSPageCount,不过是指在DOSSiteInterval间隔时间内可以向网站发出总共多少个请求。

•DOSBlockingPeriod:如果访客超过了DOSSPageCount或DOSSiteCount设定的限制,他或她在DOSBlockingPeriod时间段时被列入黑名单。在这个间隔时间内,来自他/她的任何请求将返回403 Forbidden出错信息。

你可能需要根据自己的网站服务器需要处理的流量大小和类型来更改这些值。请注意:如果这些值没有合理设置,最后可能会阻止正当的访客。

下面是用于mod_evasive的其他实用指令:

1. DOSEmailNotify:只要IP地址被列入黑名单,就发送电子邮件到指定的地址。它需要一个有效的电子邮件地址作为变量。如果SELinux状态被设成enforcing(执行),你就需要为用户apache可授予发送电子邮件的SELinux权限。也就是说,以root用户的身份来运行该命令。

# setsebool -P httpd_can_sendmail 1

然后,将该指令添加到mod_evasive.conf文件中:

DOSEmailNotify [email protected]

2. DOSSystemCommand:只要IP地址被列入黑名单,就执行自定义系统命令。它可能适用于添加防火墙规则,完全阻止不正当的IP地址:

DOSSystemCommand <command>

我们将使用该指令,通过下列脚本(/etc/httpd/scripts/ban_ip.sh)来添加防火墙规则:

#!/bin/sh
# 不正当的IP被mod_evasive检测出来
IP=$1
# 用户apache通过sudo执行的iptables二进制文件的路径
IPTABLES="/sbin/iptables"
# mod_evasive锁定目录
MOD_EVASIVE_LOGDIR=/tmp
# 添加下列防火墙规则(阻止IP)
$IPTABLES -I INPUT -s $IP -j DROP
# 2小时后,通过‘at’命令解除阻止不正当的IP;参阅“man at”,即可了解进一步的细节
echo "$IPTABLES -D INPUT -s $IP -j DROP" | at now + 2 hours
# 删除锁定文件,以便将来核查
rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"
我们的DOSSystemCommand指令然后显示如下:
DOSSystemCommand "sudo /etc/httpd/scripts/ban_ip.sh %s"

别忘了更新sudo权限,以便以apache用户的身份运行脚本:

# vi /etc/sudoers
apache ALL=NOPASSWD: /usr/local/bin/scripts/ban_ip.sh
Defaults:apache !requiretty

#p#

模拟DoS攻击

我们将使用三款工具对我们的Apache网站服务器进行压力测试,该服务器运行在CentOS 6.5平台上,配备512 MB内存和AMD速龙II X2 250处理器,分别在启用和禁用mod_security和mod_evasive的情况下进行测试,检查该网站服务器在每一种情况下表现如何。

确保你只在自己的测试服务器中执行下列步骤,别针对外部的生产网站执行下列步骤。

在下面几个例子中,将http://centos.gabrielcanepa.com.ar/index.php换成你自己的域和所选择的文件。

基于Linux的工具

1. Apache bench:Apache服务器基准测试工具。

# ab -n1000 -c1000 http://centos.gabrielcanepa.com.ar/index.php

•-n:为基准测试会话而执行的请求数量。

•-c:每次执行的多个请求数量。

2. test.pl:mod_evasive模块随带的Perl脚本。

#!/usr/bin/perl
# test.pl:测试mod_dosevasive功效的小脚本
use IO::Socket;
use strict;
for(0..100) {
  my($response);
  my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
                                      PeerAddr=> "192.168.0.16:80");
  if (! defined $SOCKET) { die $!; }
  print $SOCKET "GET /?$_ HTTP/1.0\n\n";
  $response = <$SOCKET>;
  print $response;
  close($SOCKET);
}

基于Windows的工具

1. Low Orbit Ion Cannon(LOIC):这是一款网络压力测试工具。为了生成工作负载,请按照下面屏幕截图中显示的顺序,其他的别去改动。

压力测试结果

mod_security和mod_evasive启用后(三款工具同时运行),处理器和内存使用率达到最高峰,分别是60%和50%,这种情形只持续了2秒,之后源IP被列入黑名单,被防火墙阻止,攻击随告停止。

另一方面,如果禁用mod_security和mod_evasive,上述三款工具很快就击倒了服务器(而且在攻击持续时段一直保持这个状态);当然,不正当的IP地址并没有被列入黑名单。

结束语

我们可以看出,如果配置得当,mod_security和mod_evasive是加固Apache网站服务器,防范几种威胁的两个重要工具,应当考虑部署在暴露在互联网上的环境中。

原文地址:http://xmodulo.com/2014/09/harden-apache-web-server-mod_security-mod_evasive-centos.html

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

(0)
运维的头像运维
上一篇2025-03-02 11:25
下一篇 2025-03-02 11:27

相关推荐

  • 个人主题怎么制作?

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

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

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

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

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

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

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

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

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

    2025-11-20
    0

发表回复

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