在本指南中,我们将学习如何安装 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 SecRuleEngine
到 On
.
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.example
到 crs-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 基本身份验证