nginx添加WAF模块

WAF全称叫Web Application Firewall,web应用防火墙

最近公司网页发现有人天天在刷单,ELk真心不错,能多维度的发现这些问题。所以现在考虑给nginx增加个WAF模块,找了个老外的ModSecurity,下面讲下如何安装

1、安装依赖rpm包

yum -y install gcc gcc-c++ ncurses-devel libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel autoconf pcre-devel libtool-libs freetype-devel gd zlib-devel zip unzip wget crontabs iptables file bison cmake patch mlocate flex diffutils automake make readline-devel glibc-devel glibc-static glib2-devel bzip2-devel gettext-devel libcap-devel logrotate ntp libmcrypt-devel GeoIP* gd-devel libxslt-devel libtool

2、下载ModSecurity和Nginx

cd /usr/src
wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity

  开始安装modsecurity

cd /usr/src/modsecurity/
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

  现在开始编译安装tenginx,增加一个modsecurity模块

tar xfz tengine-2.1.0.tar.gz
cd  tengine-2.1.0
./configure   --with-debug   --with-ipv6   --with-http_ssl_module   --add-module=/usr/src/modsecurity/nginx/modsecurity

make && make install

  查看一下安装出来的文件

cd /usr/local/nginx/

ls -l
drwxr-xr-x  2 root root 4096 Mar  10 11:21 conf/
drwxr-xr-x  2 root root 4096 Mar  10 11:21 html/
drwxr-xr-x  2 root root 4096 Mar  10 11:21 logs/
drwxr-xr-x  2 root root 4096 Mar  10 11:21 sbin/

ln -s /usr/local/nginx/sbin/nginx /bin/nginx

     配置ModSecurity

cp /usr/src/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.confcp /usr/src/modsecurity/unicode.mapping /usr/local/nginx/conf/

cd /usr/Local/nginx/conf/vi modsecurity.conf

SecRuleEngine On          #第7行SecRequestBodyLimit 100000000   #第39行

SecAuditLogType Concurrent      #第192行#SecAuditLog /var/log/modsec_audit.log  

# Specify the path for concurrent audit logging.SecAuditLogStorageDir /usr/local/nginx/logs  

#确保nginx服务对logs目录有写的权限

  配置OWASP规则

cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git

cd owasp-modsecurity-crscp -R base_rules/ /usr/Local/nginx/conf/

  编辑modsecuity.conf配置文件

cd /usr/Local/nginx/conf/
vi modsecurity.conf
#DefaultAction
SecDefaultAction "log,deny,phase:1"

#If you want to load single rule /usr/loca/nginx/conf
#Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf

#Load all Rule
Include base_rules/*.conf

#Disable rule by ID from error message (for my wordpress)
SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015

  配置nginx.conf,把modsecuity.conf加进去

  location ~ \.php$ {

          ModSecurityEnabled on;
          ModSecurityConfig modsecurity.conf;

            root           /var/www/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

  重启nginx服务

nginx -s  reload

  查看日志信息,ModSecurity成功启动

2016/03/10 12:30:18 [notice] 3706#0: signal process started
2016/03/10 12:31:46 [notice] 3794#0: ModSecurity for nginx (STABLE)/2.8.0 (http://www.modsecurity.org/) configured.2016/03/10 12:31:46 [notice] 3794#0: ModSecurity: APR compiled version="1.3.9"; loaded version="1.3.9"
2016/03/10 12:31:46 [notice] 3794#0: ModSecurity: PCRE compiled version="7.8 "; loaded version="7.8 2008-09-05"2016/03/10 12:31:46 [notice] 3794#0: ModSecurity: LIBXML compiled version="2.7.6"
2016/03/10 12:31:46 [notice] 3794#0: ModSecurity: StatusEngine call: "2.8.0,ModSecurity Standalone,1.3.9/1.3.9,7.8/7.8 2008-09-05,(null),2.7.6,8707623d80eb7bec6055da659a5e03f88f4e4016"2016/03/10 12:31:46 [notice] 3794#0: ModSecurity: StatusEngine call successfully sent. For more information visit: http://status.modsecurity.org/

如果有报错可以参考下https://www.52os.net/articles/nginx-use-modsecurity-module-as-waf.html这篇文章,讲的蛮详细的。

 

时间: 2024-10-26 06:51:36

nginx添加WAF模块的相关文章

如何给在用的nginx添加新模块?

有一个在用的nginx,以yum方法安装的,怎样在不改动配置的情况下,为它添加模块. 以添加spdy模块为例. 编译新模块 预编译 ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin --conf-path=/etc/nginx/nginx.conf --pid-path=/run/nginx.pid --error-log-path=/var/log/nginx/error.log --with-http_spdy_module --wi

安装nginx并为nginx添加sysguard模块

如果nginx被攻击或者访问量突然变大,nginx会因为负载变高或者内存不够用导致服务器宕机,最终导致站点无法访问.解决方法是利用淘宝开发的模块nginx-http-sysguard,主要用于当负载和内存达到一定的阀值之时,会执行相应的动作,比如直接返回503,504或者其他的.一直等到内存或者负载回到阀值的范围内,站点恢复可用.简单的说,这个模块是让nginx有个缓冲时间. 我使用的操作系统是Ubuntu12.0.4,下面的操作都以该系统为基础. 首先到官网上下载nginx1.12.1.tar

nginx添加sticky模块-cookie保持会话

cookie不同于session,一个存于客户端,一个存于服务端. 环境nginx 1.8.0 centos6.X sticky:1.2.5  wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz cookie负载均衡相比iphash来比其中一个特点比较明显:内网nat用户的均衡.而iphash无法做到. yum install openssl openssl-devel 先停止ngin

nginx添加 nginx_heath模块

原因?为什么会使用nginx_heath 这个模块,主要是如nginx+tomcat部署的时,tomcat挂了之后nginx->upstream 轮询是可以踢掉挂掉的tomcat服务的,如果部署的机器挂了之后nginx轮询是不能踢掉的,如果服务再去请求,就会出现请求超时! 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_modul

nginx添加ssl模块

原已经安装好的nginx,现在需要添加一个未被编译安装的ssl模块: nginx -V 可以查看原来编译时都带了哪些参数 原来的参数:--prefix=/app/nginx 添加的参数: --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module 步骤如下: 1. 使用参数重新配置: ./configure --prefix=/app/nginx -user=nobody -group=nobod

给已经编译安装了的nginx 添加http_ssl_module模块

环境:centos6.7 因为需要https ,要用到http_ssl_module模块,但http_ssl_module并不属于nginx的基本模块所以自己重新编译添加 1.首先看下内核和系统的版本号. [[email protected] ~]# uname -a Linux zabbix.nnkj.com 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [[em

nginx添加新模块及第三方模块

一.编译添加新模块 1.查看以前编译安装nginx的信息    /usr/local/nginx/sbin/nginx -V 2.进入nginx源码目录           cd nginx-1.8.0 3.重新编译代码和模块 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module 4.

nginx 添加nginx-http-concat模块

github地址:https://github.com/alibaba/nginx-http-concat/tree/master 简单的描述一下吧,网上说的安装新的模块需要重新编译nginx,具体的我没有试过,添加nginx模块 ./configure --prefix=/myhome/nginx/nginx --add-module=../nginx-http-concat-master 然后make make install 安装成功了之后,修改nginx.conf 如图: alias配置

给已经在用的nginx添加新模块

已经在用的nginx服务器,需要安装一个新的模块 首先通过-V参数查看当前编译安装的参数: linux_server01:~ # nginx -V nginx version: nginx/1.6.2 built by gcc 4.3.4 [gcc-4_3-branch revision 152973] (SUSE Linux)  TLS SNI support enabled configure arguments: --prefix=/datas/nginx --user=nginx_srv