安装 LibModsecurity Apache 在 Ubuntu 20.04 上

欢迎阅读我们关于如何安装 LibModsecurity 的指南 Apache 在 Ubuntu 20.04 上。 Libmodsecurity (Modsecurity v3),是由 Trustwave 的 SpiderLabs 开发的开源、跨平台 Web 应用程序防火墙 (WAF)。 它是对 ModSecurity v2 的完全重写,它提供了一种强大的基于事件的编程语言,可以保护 Web 应用程序免受各种攻击,例如 SQL 注入、跨站点脚本 (XSS)、本地文件包含、远程文件包含 e. tc。 它还允许进行 HTTP 流量监控、日志记录和实时分析。

安装 LibModsecurity Apache 在 Ubuntu 20.04 上

先决条件

运行系统更新

将您的系统包重新同步到它们的最新版本。

apt update
apt upgrade

安装 LAMP 堆栈

在安装和配置 LibModsecurity 之前 Apache 在 Ubuntu 20.04 上,您需要安装 LAMP Stack 并运行您的服务器。 按照下面的链接在 Ubuntu 20.04 上设置 LAMP 堆栈。

在 Ubuntu 20.04 上安装 LAMP Stack

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

要在 Ubuntu 20.04 上安装 Libmodsecurity 或 Modsecurity v3,我们将从源代码构建它。 因此,您需要安装一些必需的构建工具和依赖项才能成功构建。

apt install g++ flex bison curl apache2-dev doxygen libyajl-dev ssdeep liblua5.2-dev libgeoip-dev libtool dh-autoreconf libcurl4-gnutls-dev libxml2 libpcre++-dev libxml2-dev git

在 Ubuntu 20.04 上编译安装 LibModsecurity

系统设置好后,您可以继续在 Ubuntu 20.04 上安装 Modsecurity v3。

下载 LibModsecurity 源代码

安装最新的稳定版本 自由模组安全,你需要从源代码编译它。

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

wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.4/modsecurity-v3.0.4.tar.gz

提取 ModSecurity 源代码。

tar xzf modsecurity-v3.0.4.tar.gz

编译安装LibModsecurity

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

cd modsecurity-v3.0.4

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

./build.sh

您可以放心地忽略 fatal: not a git repository (or any of the parent directories): .git 错误信息。

./configure

在继续编译和安装 LibModsecurity 之前,请务必修复任何依赖问题(如果有) Apache 在 Ubuntu 20.04 上。

如果上面的配置脚本完成没有错误,继续在 Ubuntu 20.04 上编译和安装 LibModSecurity。

make
make install

LibModSecurity 又名 ModSecurity v3 现已安装在 Ubuntu 20.04 上

安装 ModSecurity-Apache 连接器

ModSecurity-apache 连接器提供了一个通信通道 Apache 和 libModsecurity。 既然安装了libmodsecurity,请按照以下步骤安装Modsecurity Apache 连接器。

克隆 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 使用 LibModsecurity

加载 Apache ModSecurity 连接器模块

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

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

配置 ModSecurity

在下创建 ModSecurity 配置目录 /etc/apache2

sudo mkdir /etc/apache2/modsecurity.d

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

sudo cp ~/modsecurity-v3.0.4/modsecurity.conf-recommended /etc/apache2/modsecurity.d/modsecurity.conf

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

sudo cp ~/modsecurity-v3.0.4/unicode.mapping /etc/apache2/modsecurity.d/

通过更改的值打开 ModSecurity SecRuleEngineOn.

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

接下来,您需要配置 ModSecurity 规则。 因此,创建一个文件,您可以在其中定义要包含的规则,例如, /etc/apache2/modsecurity.d/modsec_rules.conf.

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

由于我们已将 OWASP 规则包含在 ModSecurity 3 规则中,因此请继续安装它们。

在 Ubuntu 上安装 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/apache2/modsecurity.d/owasp-crs

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

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

激活 ModSecurity

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

cp /etc/apache2/sites-available/000-default.conf{,.old}

查看我们的示例默认站点虚拟主机配置,没有注释;

cat > /etc/apache2/sites-available/000-default.conf << 'EOL' <VirtualHost *:80> 	modsecurity on 	modsecurity_rules_file /etc/apache2/modsecurity.d/modsec_rules.conf  	ServerAdmin [email protected] 	DocumentRoot /var/www/html 	ErrorLog ${APACHE_LOG_DIR}/error.log 	CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> EOL

线条;

	modsecurity on 	modsecurity_rules_file /etc/apache2/modsecurity.d/modsec_rules.conf 

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

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

apachectl -t

如果没有错误,你应该得到输出, 语法确定.

systemctl restart apache2

测试模组安全

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

curl localhost?doc=/bin/ls
<!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 this resource.</p> <hr> <address>Apache/2.4.41 (Ubuntu) Server at localhost Port 80</address> </body></html>

检查 Modsecurity 日志;

tail /var/log/modsec_audit.log
ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:doc' (Value: `/bin/ls' ) [file "/etc/apache2/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/ls found within ARGS:doc: /bin/ls"] [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 "127.0.1.1"] [uri "/"] [unique_id "161428003146.366446"] [ref "o1,6v10,7t: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/apache2/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 "127.0.1.1"] [uri "/"] [unique_id "161428003146.366446"] [ref ""]

从浏览器访问站点并测试命令注入攻击, https://domain.name/?exec=/bin/bash.

尾随 Apache 错误日志;

tail -f /var/log/apache2/error.log
[Thu Feb 25 19:29:06.385428 2021] [:error] [pid 38210] [client 192.168.57.1:45916] ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [file "/etc/apache2/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 "127.0.1.1"] [uri "/"] [unique_id "161428134623.117562"] [ref "o1,8v11,9t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]

因此,这证实了 Modsecurity 正在按预期运行。

这就是我们关于如何安装 LibModsecurity 的指南 Apache 在 Ubuntu 20.04 上。

参考:

ModSecurity-apache

模组安全

相关指南

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

为 ModSecurity 日志创建 Kibana 可视化仪表板

在 ELK Stack 上处理和可视化 ModSecurity 日志

在 CentOS 8 上使用 Nginx 配置 LibModsecurity

安装 LibModsecurity Apache 在 Fedora 30/29 / CentOS 7