
本文提供了有关在NGINX Web服务器上将Dynamic ModSecurity模块安装为Web应用程序防火墙(WAF)的说明。 NGINX以
反向代理模式运行 。 该工作已在Linux发行版
CentOS 7上完成 。 该模块被设置为“动态”,以便该服务在配置上保持灵活。 使用了
官方的NGINX安装
指南 。
1.组件的预安装
为了使服务正常工作,必须安装其他库才能工作。 从源代码构建项目将需要库。 假定用户具有更新的系统(
#yum update )。
yum install install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev
2.开始服务安装
为了使使用
service nginx start命令启动服务没有问题,从GitHub上的官方存储库安装了一个版本。
创建要在其中添加发行版本的文件
/etc/yum.repos.d/nginx.repo 。 如果不指定NGINX版本,则会拉起该站点上启动的最后一个版本。
[nginx-1.13.7] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
接下来,只需安装
yum install nginx
3.模块的编译

首先,转到相应的目录:
cd /home/user/Downloads
从GitHub的主要分支下载模块:
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity.git
接下来,转到带有防火墙的文件夹并编译源代码:
cd ModSecurity git submodule init git submodule update ./build.sh ./configure make make install
4.安装连接器
为了使整个系统更加灵活,将安装一个连接器以连接
NGINX和ModSecurity 。 这意味着该模块将不会被连接到服务器代码中,而只会是一个动态组件,这将允许它随时被删除,更改代码等。
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
5.重建Web服务器
为了使NGINX与将要连接模块的连接器一起使用,您需要重建服务器。 为此,首先找出安装了哪个版本的NGINX:
nginx –v
输出应该是这样的(取决于版本)
nginx版本:nginx / 1.13.7接下来,从官方站点下载适当的版本,以便在启动服务并使用特定参数进行编译时不会出现错误:
cd .. wget http://nginx.org/download/nginx-1.13.7.tar.gz tar zxvf nginx-1.13.7.tar.gz cd nginx-1.13.7 ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx make modules
接下来,将模块文件复制到Web服务文件夹:
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
在
/etc/nginx/nginx.conf中的第一个块之前,添加:
load_module modules/ngx_http_modsecurity_module.so;
6.模块配置文件
开发人员提供了保护网络资源的基本规则。 应当注意的是,安装它们后,就不应该再过分了,因为创建者保留了用户完全的配置和编写规则的自由,这限制了他们将基本规则添加到标准配置文件中。
mkdir /etc/nginx/modsec cd /etc/nginx/modsec sudo wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended sudo mv modsecurity.conf-recommended modsecurity.conf
在
modsecurity.conf文件中
,将
SecRuleEngine DetectionOnly替换为
SecRuleEngine On接下来,创建
/etc/nginx/modsec/main.conf文件并将其添加到其中:
# Include the recommended configuration Include /etc/nginx/modsec/modsecurity.conf
7. OWASP规则
OWASP是Web安全问题的领导者已经不是什么秘密了。 他们对此模块有自己的设置,与项目一样,该模块也向用户开放。 因此,将其安装为基本规则集:
cd /usr/local wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.0.0.tar.gz tar -xzvf v3.0.0.tar.gz mv owasp-modsecurity-crs-3.0.0 /usr/local cd /usr/local/owasp-modsecurity-crs-3.0.0 cp crs-setup.conf.example crs-setup.conf
在
/etc/nginx/modsec/main.conf中添加以下内容:
# OWASP CRS v3 rules Include /usr/local/owasp-modsecurity-crs-3.0.0/crs-setup.conf Include /usr/local/owasp-modsecurity-crs-3.0.0/rules/*.conf
8.工作完成
在文件
/etc/nginx/conf.d/proxy.conf中添加
server { listen 80; modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; # If you have proxy location / { proxy_pass http://192.168.xx; } }
9.健康检查
要检查Web服务的组件,只需启动它并查看错误。 通常,您将需要删除负责检查使用其他模块的位置(例如
GeoIP )的规则。 因此,您可以安全地删除此规则。
rm /usr/local/owasp-modsecurity-crs-3.0.0/rules/REQUEST-910-IP-REPUTATION.conf
Unicode相关的错误也是可能的。 为了不干扰服务,我们只需在配置文件中(
末尾 )将其注释掉即可。
#SecUnicodeMapFile unicode.mapping 20127
使用
curl工具测试服务器。 它将显示应用程序是否返回。 如果一切正确,则会收到代码为
200 OK的选项 curl -I 127.0.0.1
要检查保护机构的操作,可以使用为此目的设计的任何实用程序。 建议使用
nikto作为建议:
nikto -host localhost
要启动服务器:
service nginx start