在Ubuntu 20.04上使用Apache安装LibModsecurity

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

在Ubuntu 20.04上使用Apache安装LibModsecurity

先决条件

运行系统更新

将系统软件包重新同步到其最新版本。

apt update
apt upgrade

安装LAMP堆栈

您必须先安装LAMP Stack并运行服务器,然后才能在Ubuntu 20.04上使用Apache安装和配置LibModsecurity。请按照下面的链接在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源代码

要安装最新的稳定版本 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

在继续在Ubuntu 20.04上使用Apache编译和安装LibModsecurity之前,请确保已解决所有依赖性问题(如果有)。

如果以上配置脚本正确无误地完成,请继续在Ubuntu 20.04上编译并安装LibModSecurity。

make
make install

LibModSecurity aka ModSecurity v3现在已在Ubuntu 20.04上安装

安装ModSecurity-Apache连接器

ModSecurity-apache连接器提供了Apache与libModsecurity之间的通信通道。现在已经安装了libmodsecurity,请按照以下步骤安装Modsecurity Apache连接器。

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

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

使用LibModsecurity配置Apache

加载Apache ModSecurity连接器模块

通过将以下行添加到主Apache配置文件中,配置Apache以加载Modsecurity 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的值以打开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

接下来,测试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 ""]

从浏览器访问网站并测试命令注入攻击, http://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正在按预期运行。

这就是我们在Ubuntu 20.04上如何使用Apache安装LibModsecurity的指南中的相关内容。

参考:

ModSecurity-Apache

ModSecurity

相关指南

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

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

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

在CentOS 8上使用Nginx配置LibModsecurity

在Fedora 30/29 / CentOS 7上使用Apache安装LibModsecurity

Sidebar