xxxmenger 发表于 2018-11-13 13:02:23

Nginx+Naxsi(WAF)+WebNginx技术文档

  1. 相关介绍
  1.1 Nginx
  Nginx(发音同engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,可以稳定的运行在Linux、Windows等操作系统上。其特点是占用内存少,并发能力强。
  1.2 Naxsi:
  Naxsi是一个开放源代码、高效、低维护规则的Nginx web应用防火墙模块。Naxsi的主要目标是帮助人们加固他们的web应用程序,以抵御SQL注入、跨站脚本、跨域伪造请求、本地和远程文件包含漏洞。详见http://code.google.com/p/naxsi/wiki/TableOfContents?tm=6
  1.3 WebNginx
  WebNginx是一款基于PHP+Mysql开发的系统,利用它可以通过Web界面来管理、配置Nginx服务器。
  web-nginx把每一个虚拟主机看成为一个服务:配置服务|->|配置服务配置|->|提交配置|->|生成配置vserivce文件|->|写入日志|->客户端程序读取日志下载配置|->服务reload。
  详见https://code.google.com/p/web-nginx/
  2. 编写目的:
  利用Nginx+Nasxi+WebNginx搭建一套高效、可靠、方便使用的Web应用防护系统,从而有效的保护后端Web服务器的安全。
  3. 部署架构:
  3.1 将Nginx配置为反向代理;让访问后端Web服务器的流量都经过Nginx
  3.2 让Nasxi(WAF)检测经过Nginx的流量,将***流量根据相关配置进行阻断,从而保护运行在后端Web服务器上的应用程序。
  3.3 利用WebNginx可以通过Web界面来管理、配置Nginx更加的方便。
  具体的部署架构如下:
  图1
  用户正常访问请求处理流程具体如下图所示:
  图2
  ***者恶意请求处理流程具体如下图:
  图3
  4. 环境搭建:
  系统环境:CentOS 5.5
  4.1 Nginx+Naxsi安装
  安装包:
  Nginx 1.3.15:http://nginx.org/download/nginx-1.3.15.tar.gz
  Naxsi 0.50:http://naxsi.googlecode.com/files/naxsi-core-0.50.tgz
  pcre-8.32:http://sourceforge.net/projects/pcre/files/pcre/8.32/pcre-8.32.tar.gz/download
  安装过程:
  4.1.1 安装必要的支持组件
  在安装Nginx之前,需要先安装必要的支持组件,否则Nginx完全正常安装。
  安装pcre过程:
  # wget http://sourceforge.net/projects/pcre/files/pcre/8.32/pcre-8.32.tar.gz/download
  #tar -zxvf pcre-8.32.tar.gz
  #cd pcre-8.32
  ]#./configure
  #make && make install
  安装zlib库组件过程:
  # yum -y install zlib-devel
  4.1.2 Nginx和Naxsi安装过程
  # wget http://nginx.org/download/nginx-1.3.15.tar.gz
  # wget http://naxsi.googlecode.com/files/naxsi-core-0.50.tgz
  # tar -zxvf nginx-1.3.15.tar.gz
  # tar -zxvf naxsi-core-0.50.tgz
  # cd nginx-1.3.15
  # ./configure --add-module=../naxsi-core-0.50/naxsi_src
  #make && make install
  4.1.3 启动Nginx,并测试
  /usr/local/nginx/sbin/nginx      #启动Nginx
  /usr/local/nginx/sbin/nginx -t   #测试配置文件是否正常
  Killall -9 nginx                  #杀死nginx进程
  kill -HUP `cat /usr/local/www/nginx/logs/nginx.pid`   #以平滑方式重启Nginx
  图4
  如果在启动Nginx时,出现如下错误:
  图5
  按照下面的方法即可解决。
  32位系统 # ln -s /usr/local/lib/libpcre.so.1 /lib
  64位系统 # ln -s /usr/local/lib/libpcre.so.1 /lib64
  4.2 WebNginx安装
  由于WebNginx采用PHP+Mysql开发,所以在安装WebNginx之前需要先安装好PHP5+Mysql5及其他相应的支持环境。
  获取安装包:
  Web-nginx v1.0 :
  svn checkout http://web-nginx.googlecode.com/svn/trunk/ web-nginx-read-only
  安装过程:
  4.2.1 安装Mysql及相应组件
  由于Mysql需要使用cmake编译,所以需要先安装cmake环境。具体过程如下:
  安装Cmake:
  Cmake-2.8.10.2:http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
  #wgethttp://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
  #tar -zxvf cmake-2.8.10.2.tar.gz
  #cd cmake-2.8.10.2
  #./configure && make && make install
  安装Mysql过程:
  #wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.30.tar.gz/from/http://cdn.mysql.com/
  #tar -zxvf mysql-5.5.30.tar.gz
  创建Mysql安装目录和数据库存放目录
  #mkdir -p /usr/local/mysql
  #mkdir -p /usr/local/mysql/data
  创建Mysql用户及用户组
  #gourpadd mysql
  #useradd -g mysql mysql
  #cd mysql-5.5.30
  编译和安装过程:
  #
  cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DDEFAULT_CHARSET=utf8 \
  -DDEFAULT_COLLATION=utf8_general_ci \
  -DEXTRA_CHARSETS=all \
  -DENABLED_LOCAL_INFILE=1
  如果出现如下错误:
  图6
  按下面的方法解决:
  #yum -y install ncurses-devel
  #rm -f CMakeCache.txt
  再次编译,如果没有问题的话,执行安装操作
  #make && make install
  设置Mysql配置文件
  #cp support-files/my-medium.cnf /etc/my.cnf
  将Mysql添加到系统服务启动项
  #cp support-files/mysql.server /etc/init.d/mysqld
  授权操作
  #chmod 755 /etc/init.d/mysqld
  初使化数据库:
  #sh ./scripts/mysql_install_db --user=mysql
  --basedir=/usr/local/mysql/ --database=/usr/local/mysql/data/ &
  设置数据库目录权限
  #chown -R mysql:mysql /usr/local/mysql/
  #chown -R mysql:mysql /usr/local/mysql/data/
  设置环境变量
  #vi /root/.bash_profile
  在PATH=$PATH:$HOME/bin后添加参数为:
  PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
  #source /root/.bash_profile
  修改Mysql默认密码:
  #/usr/local/mysql/bin/mysqladmin -u root password "test"
  启动数据库命令:
  #service mysqld start
  到此为此,Mysql数据库安装、配置完成。
  4.2.2 安装PHP
  获取安装包:
  #
  wget http://cn2.php.net/get/php-5.3.24.tar.gz/from/this/mirror
  安装必要的支持组件:
  #yum -y install gcc gcc++ libtool-libs autoconf freetype freetype-devel gd libjpeg libjpeg-devel libmcrypt libmcrypt-devel libpnglibpng-devel libxml2 libxml2-devel ncurses ncurses-devel zlib zlib-devel zip unzip curl curl-devel
  安装PHP过程:
  #tar -zxvf php-5.3.24.tar.gz
  #cd php-5.3.24
  #./configure \
  --with-mysql=/usr/local/mysql/--with-mysqli=/usr/local/mysql/bin/mysql_config--with-jpeg-dir --with-png-dir --with-zlib --enable-mbregex --with-freetype-dir \
  --enable-xml --with-curl --enable-fpm --with-curlwrappers \
  --with-gd --with-mbstring --with-xmlrpc --enable-zip
  #make && make install
  #cp php.ini-production /etc/php.ini
  #
  cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
  #/usr/local/sbin/php-fpm
  设置php-fpm开机自启动:
  #echo "/usr/local/sbin/php-fpm" >>/etc/rc.local
  整合Nginx+PHP,使其支持PHP解析。
  修改nginx.conf配置文件,可参考以下方法修改:
  图7
  4.2.3 WebNginx安装
  将WebNginx程序复制一份至Web目录
  创建数据库:
  mysql> create database nginx_conf;
  执行nginx_conf_mysql.sql中的sql语句,创建相应的数据库表。
  mysql> source /usr/local/nginx/www/web-nginx/nginx_conf_msyql.sql
  安装pear db
  # pear install db
  配置数据库连接文件(config.php)
  访问WebNginx界面:
  图8
  说明:通过实际测试,发现WebNginx并不好用。所以在下面的配置中将不使用它。
  5. 实例演示:
  5.1 背景介绍
  有一台Web服务器,在其上运行有两个网站。现在需要将用上面搭建的Web应用防护系统为Web服务器上运行的网站提供防护,加强其安全性。下面是Web服务器的详细情况:
  IP:192.168.30.128
  Web端口:8080
  网站1:http://192.168.30.128:8080/cxphp/index.php
  网站2:http://192.168.30.128:8080/cxcms/index.php
  5.2 系统架构:
  图9
  5.3 详细配置
  这个具体配置分为两个过程:一、修改Nginx.conf配置文件,配置与Naxsi(WAF)相关选项;二、将Nginx配置为反向代理,为后端Web服务器提供防护。
  5.3.1 配置Naxsi相关
  首先,将Naxsi的核心配置规则库拷贝至Nginx文件所在目录一份,
  图10
  接着修改Nginx.conf配置文件,在其中加入如下一行配置,如其包含Naxsi的核心规则库文件:
  图11
  然后定义一个虚拟主机的安全规则,可参考下面的内容:
  LearningMode; #Enables learning mode
  SecRulesEnabled;
  #SecRulesDisabled;
  DeniedUrl "/RequestDenied";
  include "/tmp/naxsi_rules.tmp";
  ## check rules
  CheckRule "$SQL >= 8" BLOCK;
  CheckRule "$RFI >= 8" BLOCK;
  CheckRule "$TRAVERSAL >= 4" BLOCK;
  CheckRule "$EVADE >= 4" BLOCK;
  CheckRule "$XSS >= 8" BLOCK;
  将上面的内容保存在一个文件中。如test.rules。下面会用到。
  定义一个阻断时返回给用户的页面,可参考如下内容:
  
  
  Error 403 Request Denied
  
  
  Error 403 Request Denied
  For some reasons, your request has been denied.
  
  
  5.3.2 配置反向代理
  新建一个虚拟主机的配置文件,具体配置如下图所示:
  图12
  最后,再次修改Nginx.conf,使其包含刚定义的虚拟主机配置文件即可。
  图13
  重启Nginx服务后配置开始生效。
  5.4 防护效果:
  5.4.1 未使用Web应用防护系统时,不具备***防护能力。
  图14

页: [1]
查看完整版本: Nginx+Naxsi(WAF)+WebNginx技术文档