NGINX ModSecurity安装说明



本文提供了有关在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 

Source: https://habr.com/ru/post/zh-CN437032/


All Articles