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]