ModSecurity 是一个开源、跨平台的 Web 应用程序防火墙引擎,适用于 Apache 和 Nginx。具有强大的基于事件的编程语言,可抵御针对 Web 应用程序的一系列攻击,并允许进行 HTTP 流量监控、日志记录、实时分析。
安装步骤 {#安装步骤}
首先,需要安装一些必要的依赖包,例如 libxml2/libpcre3/libapr1 等。可以通过包管理器完成,例如在 Debian 或 Ubuntu 系统上使用 apt
:
|-------------|---------------------------------------------------------------------------------------------------------------------------------------|
| 1 2
| sudo apt update sudo apt -y install libxml2 libxml2-dev libpcre3 libpcre3-dev libapr1 libapr1-dev libaprutil1 libaprutil1-dev
|
接着,从 GitHub 克隆 ModSecurity 源代码,编译安装:
|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6
| git clone --recursive https://github.com/owasp-modsecurity/ModSecurity ModSecurity cd ModSecurity ./build.sh ./configure make sudo make install
|
安装模块 {#安装模块}
然后,下载 Nginx ModSecurity 模块并编译 Nginx 以包含模块:
|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5
| git clone https://github.com/owasp-modsecurity/ModSecurity-nginx.git cd /path/to/nginx/source ./configure --add-module=/path/to/ModSecurity-nginx make sudo make install
|
在 Nginx 的配置文件中启用 ModSecurity 并指定规则文件。例如,在 nginx.conf
添加:
|-----------------------|---------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7
| server { modsecurity on; location / { root /var/www/html; modsecurity_rules_file /etc/nginx/modsec/main.conf; } }
|
配置规则 {#配置规则}
可使用默认的 OWASP 核心规则集,这是一个广泛认可的标准规则集,专门用于检测和阻止 Web 应用程序攻击。克隆并将其配置到 ModSecurity 中:
|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2
| git clone https://github.com/coreruleset/coreruleset.git /etc/nginx/modsec/coreruleset cp /etc/nginx/modsec/coreruleset/crs-setup.conf.example /etc/nginx/modsec/coreruleset/crs-setup.conf
|
修改 /etc/nginx/modsec/main.conf
来包含配置:
|-------------|-----------------------------------------------------------------------------------------------------------------|
| 1 2
| Include /etc/nginx/modsec/coreruleset/crs-setup.conf Include /etc/nginx/modsec/coreruleset/rules/*.conf
|
测试防御 {#测试防御}
最后,重启 Nginx 以应用更改:
|-----------|-----------------------------------|
| 1
| sudo service nginx reload
|
可以使用以下命令测试防护功能,如返回 403 Forbidden,说明防护已经生效,此处匹配规则是 User-Agent 中不能包含漏洞扫描器名字:
|-----------|-----------------------------------------------|
| 1
| curl -H "User-Agent: Nikto" http://IP
|