轻松安装 ModSecurity Apache 在 Rocky Linux 8 上

在本指南中,我们将学习如何安装 ModSecurity Apache 在 Rocky Linux 8 上。本指南重点介绍安装 LibMosecurity,也称为 ModSecurity 版本 3。ModSecurity 是一个开源、跨平台 Web 应用程序防火墙 (WAF) 引擎,可提供针对各种 Web 应用程序攻击的保护。

安装 ModSecurity Apache 在 Rocky Linux 8 上

运行系统更新

首先更新您的系统包。

dnf update

安装所需的构建工具和依赖项

LibModsecurity 将从源代码编译,因此需要许多构建工具和依赖项。

运行下面的命令来安装它们。

dnf config-manager --set-enabled powertools

安装其他存储库。

dnf install epel-release -y
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
dnf config-manager --set-enabled remi

安装所需的依赖项。

dnf install gcc-c++ flex bison yajl curl-devel curl zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config git wget openssl openssl-devel vim GeoIP-devel doxygen yajl-devel libmaxminddb libmaxminddb-devel GeoIP-devel lmdb lmdb-devel ssdeep-devel lua-devel perl-File-Path -y

下载 Modsecurity 源代码

创建一个临时目录来存储源 tarball。

mkdir ~/modsec

您可以选择使用 /opt 反而。

导航到 ModSecurity 发布页面并下载 ModSecurity 源代码。 你可以简单地使用 wget 来拉它。

cd ~/modsec
wget -P ~/modsec https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.5/modsecurity-v3.0.5.tar.gz

提取 ModSecurity 源代码。

cd ~/modsec
tar xzf modsecurity-v3.0.5.tar.gz

在 Rocky Linux 上编译和安装 Modsecurity

导航到LibModsecurity源目录,配置、编译和安装

cd modsecurity-v3.0.5

配置 LibModsecurity 以使其适应您的系统并检查是否缺少任何必需的依赖项。

./build.sh

您可以放心地忽略 致命的: * 消息。

./configure --with-maxmind=no

修复任何依赖问题,以防万一,在您可以继续编译和安装 LibModsecurity 之前 Apache 在 CentOS 上

在 Rocky Linux 8 上编译并安装 ModSecurity。

make
make install

安装 ModSecurity-Apache Rocky Linux 8 上的连接器

LibModsecurity 安装完成后,继续安装 ModSecurity-apache 连接器,该连接器提供了之间的通信通道 Apache 和 libModsecurity。

克隆 ModSecurity 的 git 存储库 Apache 连接器。

cd ~ git clone https://github.com/SpiderLabs/ModSecurity-apache

导航到 ModSecurity-apache 目录并运行以下命令进行编译和安装。

cd ModSecurity-apache
./autogen.sh
./configure --with-libmodsecurity=/usr/local/modsecurity/
make
make install

配置 Apache 在 Rocky Linux 8 上使用 Modsecurity

接下来配置 Apache 加载 Modsecurity Apache 通过将下面的行添加到主连接器模块 Apache 配置文件。

echo "LoadModule security3_module /usr/lib64/httpd/modules/mod_security3.so" | sudo tee -a /etc/httpd/conf/httpd.conf

在下创建 ModSecurity 配置目录 /etc/httpd/conf.d

mkdir /etc/httpd/conf.d/modsecurity.d

将示例 ModSecurity 配置文件从源代码目录复制到上面创建的 ModSec 配置目录,将其重命名如下。

cp ~/modsec/modsecurity-v3.0.5/modsecurity.conf-recommended /etc/httpd/conf.d/modsecurity.d/modsecurity.conf

也复制 unicode.mapping 文件从 ModSecurity 源目录到 Apache Modsecurity 配置目录。

sudo cp ~/modsec/modsecurity-v3.0.5/unicode.mapping /etc/httpd/conf.d/modsecurity.d/

通过更改的值激活 ModSecurity SecRuleEngineOn.

sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/httpd/conf.d/modsecurity.d/modsecurity.conf

更改 Modsecurity 的默认日志目录

sed -i 's#/var/log/modsec_audit.log#/var/log/httpd/modsec_audit.log#' /etc/httpd/conf.d/modsecurity.d/modsecurity.conf

通过创建一个文件来配置 ModSecurity 规则,您可以在其中定义要包含的规则。

cat > /etc/httpd/conf.d/modsecurity.d/rules.conf << 'EOL' Include "/etc/httpd/conf.d/modsecurity.d/modsecurity.conf" Include "/etc/httpd/conf.d/modsecurity.d/owasp-crs/crs-setup.conf" Include "/etc/httpd/conf.d/modsecurity.d/owasp-crs/rules/*.conf" EOL

由于我们已经包含了 OWASP 规则,请继续安装它们。

安装 OWASP ModSecurity 核心规则集 (CRS)

OWASP ModSecurity 核心规则集 (CRS) 是一组与 ModSecurity 一起使用的通用攻击检测规则。 它旨在保护 Web 应用程序免受广泛的攻击,包括 OWASP 前十名,尽量减少误报。

将 CRS 从 GitHub 存储库克隆到 /etc/apache2/modsecurity.d/ 如下所示;

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /etc/httpd/conf.d/modsecurity.d/owasp-crs

接下来重命名 crs-setup.conf.examplecrs-setup.conf.

cp /etc/httpd/conf.d/modsecurity.d/owasp-crs/crs-setup.conf{.example,}

在 Rocky Linux 8 上激活 ModSecurity 3

毕竟,在默认站点配置文件或任何虚拟主机配置文件上激活 modsecurity。 在本指南中,我们使用 Apache的默认站点配置文件。

请注意,您必须为每个目录上下文启用 ModSecurity。

vim /etc/httpd/conf/httpd.conf

请参阅下面对默认 Web 根目录所做的更改 Apache 配置;

... >Directory "/var/www/html"<     modsecurity on     modsecurity_rules_file /etc/httpd/conf.d/modsecurity.d/rules.conf     Options Indexes FollowSymLinks     AllowOverride None     Require all granted >/Directory< ... 

线条;

 modsecurity on  modsecurity_rules_file /etc/httpd/conf.d/modsecurity.d/rules.conf

打开 Modsecurity 并分别指定 Modsecurity 规则的位置。

查看 Apache 配置错误并重新启动它。

httpd -t
Syntax OK
systemctl restart httpd

测试模组安全

接下来,使用 OWASP 规则测试 Modsecurity 的有效性,例如使用命令注入。 运行下面的命令;

curl localhost/index.html?exec=/bin/bash
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /index.html on this server.</p> </body></html>

如果你看到, 403 Forbidden 那么这意味着你已经成功了。

您也可以检查 Modsecurity 日志;

tail /var/log/httpd/modsec_audit.log
---AzdMfmgc---B-- GET /index.html?exec=/bin/bash HTTP/1.1 Host: localhost User-Agent: curl/7.61.1 Accept: */*  ---AzdMfmgc---D--  ---AzdMfmgc---F-- HTTP/1.1 403  ---AzdMfmgc---H-- ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [file "/etc/httpd/conf.d/modsecurity.d/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/bash found within ARGS:exec: /bin/bash"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"]  [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "rocky8.kifarunix-demo.com"] [uri "/index.html"] [unique_id "1629389313"] [ref "o1,8v21,9t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"] ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' ) [file "/etc/httpd/conf.d/modsecurity.d/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"]  [data ""] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "rocky8.kifarunix-demo.com"] [uri "/index.html"] [unique_id "1629389313"] [ref ""]  ---AzdMfmgc---I--  ---AzdMfmgc---J--  ---AzdMfmgc---Z-- 

你也会在上面找到这样的日志 Apache 错误日志文件;

tail /var/log/httpd/error_log
... [Thu Aug 19 19:08:33.445040 2021] [:error] [pid 1658:tid 140385787549440] [client ::1:58424] ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [file "/etc/httpd/conf.d/modsecurity.d/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"]  [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/bash found within ARGS:exec: /bin/bash"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"]  [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "rocky8.kifarunix-demo.com"] [uri "/index.html"] [unique_id "1629389313"] [ref "o1,8v21,9t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"] ...  

好吧,你去了。 ModSecurity 3 或 LibModSeceurity 现在已安装、激活并保护您的站点免受 Web 攻击。

随意设置更多规则并保护您的 Web 应用程序。

这标志着我们关于如何安装 ModSecurity 的指南的结束 Apache 在 Rocky Linux 8 上。

使用 Fail2ban 保护 WordPress 免受暴力攻击

使用 libModSecurity 将 WordPress 登录页面的访问权限限制为特定 IP

配置基于 LDAP 的 HTTP 基本身份验证