网站搜索

使用 Mod_Security 和 Mod_evasive 模块保护 Apache 免受暴力或 DDoS 攻击


对于从事托管业务的人来说,或者如果您托管自己的服务器并将其暴露在互联网上,那么保护您的系统免受攻击者的攻击必须是重中之重。

mod_security(用于与网络服务器无缝集成的网络应用程序的开源入侵检测和防御引擎)和mod_evasive是两个非常重要的工具,可用于保护网络服务器抵御暴力或 (D)DoS 攻击。

mod_evasive,顾名思义,在受到攻击时提供规避功能,充当保护 Web 服务器免受此类威胁的保护伞。

在本文中,我们将讨论如何在 RHEL/CentOS 87 上安装、配置它们并与 Apache 一起使用以及Fedora。此外,我们将模拟攻击,以验证服务器是否做出相应反应。

这假设您的系统上安装了 LAMP 服务器。如果没有,请先查看本文,然后再继续操作。

  • 如何在 CentOS 8 上安装 LAMP 服务器
  • 如何在 RHEL/CentOS 7 中安装 LAMP 堆栈

如果您运行的是RHEL/CentOS 8/7Fedora,您还需要将iptables设置为默认防火墙前端,而不是firewalld。强>。我们这样做是为了在 RHEL/CentOS 8/7Fedora 中使用相同的工具。

步骤1:在RHEL/CentOS 8/7和Fedora上安装Iptables防火墙

首先,停止并禁用 firewalld

systemctl stop firewalld
systemctl disable firewalld

然后在启用 iptables 之前安装 iptables-services 软件包:

yum update && yum install iptables-services
systemctl enable iptables
systemctl start iptables
systemctl status iptables

第2步:安装Mod_Security和Mod_evasive

除了已经安装好 LAMP 之外,您还必须在 RHEL/CentOS 8/7 中启用 EPEL 存储库,以便安装这两个软件包。 Fedora 用户不需要启用任何存储库,因为 epel 已经是 Fedora 项目的一部分。

yum update && yum install mod_security mod_evasive

--------------- CentOS/RHEL 8 --------------- 
dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm
dnf --enablerepo=raven-extras install mod_evasive

安装完成后,您将在 /etc/httpd/conf.d 中找到这两个工具的配置文件。

ls -l /etc/httpd/conf.d

现在,为了将这两个模块与 Apache 集成并让它在启动时加载它们,请确保以下行出现在 mod_evasive.conf 的顶级部分中和 mod_security.conf 分别:

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

注意,modules/mod_security2.somodules/mod_evasive24.so是相对路径,从/etc/httpd目录到源文件模块的。您可以通过列出 /etc/httpd/modules 目录的内容来验证这一点(并根据需要进行更改):

cd /etc/httpd/modules
pwd
ls -l | grep -Ei '(evasive|security)'

然后重新启动 Apache 并验证它是否加载 mod_evasivemod_security

systemctl restart httpd 	

转储已加载的静态和共享模块的列表。

httpd -M | grep -Ei '(evasive|security)'				

步骤 3:安装核心规则集并配置 Mod_Security

简而言之,核心规则集(又名CRS)为 Web 服务器提供了有关在特定条件下如何运行的说明。 mod_security 的开发公司提供了一个名为 OWASP(开放 Web 应用程序安全项目)ModSecurity CRS 的免费 CRS,可以按如下方式下载和安装。

1.OWASP CRS 下载到为此目的创建的目录中。

mkdir /etc/httpd/crs-tecmint
cd /etc/httpd/crs-tecmint
wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master

2.解压CRS文件并更改目录名称以方便我们使用。

tar xzf master
mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs

3. 现在是时候配置 mod_security 了。将包含规则的示例文件 (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) 复制到另一个不带 .example 扩展名的文件中:

cd owasp-modsecurity-crs/
cp crs-setup.conf.example crs-setup.conf

并通过在 Web 服务器的主配置文件 /etc/httpd/conf/httpd.conf 文件中插入以下行来告诉 Apache 使用此文件和模块。如果您选择将 tarball 解压到另一个目录中,则需要编辑 Include 指令后面的路径:

<IfModule security2_module>
        Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf
        Include crs-tecmint/owasp-modsecurity-crs/rules/*.conf
</IfModule>

最后,建议我们在 /etc/httpd/modsecurity.d 目录中创建自己的配置文件,我们将在其中放置自定义指令(我们将其命名为 howtoing.conf) b> 在下面的示例中),而不是直接修改 CRS 文件。这样做可以在新版本发布时更轻松地升级 CRS。

<IfModule mod_security2.c>
	SecRuleEngine On
	SecRequestBodyAccess On
	SecResponseBodyAccess On 
	SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
	SecDataDir /tmp
</IfModule>

您可以参考 SpiderLabs 的 ModSecurity GitHub 存储库,获取 mod_security 配置指令的完整说明指南。

步骤 4:配置 Mod_Evasive

mod_evasive 使用 /etc/httpd/conf.d/mod_evasive.conf 中的指令进行配置。由于软件包升级期间没有要更新的规则,因此我们不需要单独的文件来添加自定义指令,这与 mod_security 不同。

默认的 mod_evasive.conf 文件启用了以下指令(请注意,该文件有大量注释,因此我们删除了注释以突出显示下面的配置指令):

<IfModule mod_evasive24.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 时间内,其源 IP 地址将被列入黑名单。在 DOSBlockingPeriod 期间,来自该 IP 地址的任何请求都将遇到 403 Forbidden 错误。

请随意尝试这些值,以便您的 Web 服务器能够处理所需的流量和类型。

只有一个小警告:如果这些值设置不正确,您将面临阻止合法访问者的风险。

您可能还想考虑其他有用的指令:

DOSE邮件通知

如果您有一个邮件服务器正在运行,您可以通过 Apache 发送警告消息。请注意,如果 SELinux 设置为强制,您将需要授予 apache 用户 SELinux 发送电子邮件的权限。你可以通过运行来做到这一点

setsebool -P httpd_can_sendmail 1

接下来,将此指令与其余其他指令一起添加到 mod_evasive.conf 文件中:

DOSEmailNotify [email 

如果设置了此值并且您的邮件服务器正常工作,则每当 IP 地址被列入黑名单时,都会向指定的地址发送电子邮件。

DOS系统命令

这需要一个有效的系统命令作为参数,

DOSSystemCommand </command>

该指令指定每当 IP 地址被列入黑名单时要执行的命令。它通常与 shell 脚本结合使用,该脚本添加防火墙规则以阻止来自该 IP 地址的进一步连接。

编写一个在防火墙级别处理 IP 黑名单的 shell 脚本

当某个 IP 地址被列入黑名单时,我们需要阻止来自该地址的未来连接。我们将使用以下 shell 脚本来执行此作业。在 /usr/local/bin 中创建一个名为 scripts-howtoing 的目录(或您选择的任何名称)和一个名为 ban_ip.sh 的文件在该目录中。

#!/bin/sh
IP that will be blocked, as detected by mod_evasive
IP=$1
Full path to iptables
IPTABLES="/sbin/iptables"
mod_evasive lock directory
MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
Add the following firewall rule (block all traffic coming from $IP)
$IPTABLES -I INPUT -s $IP -j DROP
Remove lock file for future checks
rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"

我们的 DOSSystemCommand 指令应如下所示:

DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"

在上面的行中,%s 表示 mod_evasive 检测到的违规 IP。

将 apache 用户添加到 sudoers 文件中

请注意,除非您授予用户 apache 权限以在没有终端和密码的情况下运行我们的脚本(仅限该脚本!),否则所有这些都将不起作用。像往常一样,您只需以 root 身份输入 visudo 即可访问 /etc/sudoers 文件,然后添加以下两行,如下图所示:

apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty

重要:作为默认安全策略,您只能在终端中运行 sudo。由于在这种情况下,我们需要使用不带 ttysudo,因此我们必须注释掉下图中突出显示的行:

#Defaults requiretty

最后,重新启动网络服务器:

systemctl restart httpd

第四步:模拟对 Apache 的 DDoS 攻击

您可以使用多种工具来模拟对服务器的外部攻击。您只需通过 google 搜索“模拟 ddos 攻击的工具”即可找到其中的几个。

请注意,您,而且只有您,将对模拟结果负责。甚至不要考虑对不在您自己的网络中托管的服务器发起模拟攻击。

如果您想对其他人托管的 VPS 执行相同的操作,则需要适当警告您的托管提供商或请求允许此类流量洪流通过其网络。 linux-console.net 无论如何都不对您的行为负责!

此外,仅从一台主机发起模拟 DoS 攻击并不代表真实的攻击。为了模拟这种情况,您需要同时从多个客户端瞄准您的服务器。

我们的测试环境由 CentOS 7 服务器 [IP 192.168.0.17] 和 Windows 主机组成,我们将从该主机发起攻击 [IP 192.168.0.103]:

请播放下面的视频并按照所示顺序执行步骤来模拟简单的 DoS 攻击:

然后,有问题的 IP 会被 iptables 阻止:

结论

启用 mod_securitymod_evasive 后,模拟攻击会导致 CPURAM 尝试临时使用高峰仅几秒钟,源 IP 就会被列入黑名单并被防火墙阻止。如果没有这些工具,模拟肯定会非常快地击垮服务器并使其在攻击期间无法使用。

我们很想知道您是否计划使用(或过去已经使用过)这些工具。我们始终期待您的来信,因此,如果有任何意见和问题,请随时使用下面的表格留下您的意见和问题。

参考链接

https://www.modsecurity.org/