您的位置:首页 > 运维架构 > Nginx

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

2014-11-21 13:48 387 查看
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过程:
[root@localhost LNMP]# wget http://sourceforge.net/projects/pcre/files/pcre/8.32/pcre-8.32.tar.gz/download
[root@localhost LNMP]#tar -zxvf pcre-8.32.tar.gz
[root@localhost nginx-1.3.15]#cd pcre-8.32
[root@localhost pcre-8.32]]#./configure
[root@localhost pcre-8.32]#make && make install
安装zlib库组件过程:
[root@localhost LNMP]# yum -y install zlib-devel
4.1.2 Nginx和Naxsi安装过程
[root@localhost LNMP]# wget http://nginx.org/download/nginx-1.3.15.tar.gz
[root@localhost LNMP]# wget http://naxsi.googlecode.com/files/naxsi-core-0.50.tgz
[root@localhost LNMP]# tar -zxvf nginx-1.3.15.tar.gz
[root@localhost LNMP]# tar -zxvf naxsi-core-0.50.tgz
[root@localhost LNMP]# cd nginx-1.3.15
[root@localhost nginx-1.3.15]# ./configure --add-module=../naxsi-core-0.50/naxsi_src
[root@localhost nginx-1.3.15]#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位系统 [root@localhost lib]# ln -s /usr/local/lib/libpcre.so.1 /lib
64位系统 [root@localhost lib]# 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
[root@localhost LNMP]#wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz [root@localhost LNMP]#tar -zxvf cmake-2.8.10.2.tar.gz
[root@localhost LNMP]#cd cmake-2.8.10.2
[root@localhost cmake-2.8.10.2]#./configure && make && make install
安装Mysql过程:
[root@localhost LNMP]#wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.30.tar.gz/from/http://cdn.mysql.com/ [root@localhost LNMP]#tar -zxvf mysql-5.5.30.tar.gz
创建Mysql安装目录和数据库存放目录
[root@localhost LNMP]#mkdir -p /usr/local/mysql
[root@localhost LNMP]#mkdir -p /usr/local/mysql/data
创建Mysql用户及用户组
[root@localhost LNMP]#gourpadd mysql
[root@localhost LNMP]#useradd -g mysql mysql
[root@localhost LNMP]#cd mysql-5.5.30
编译和安装过程:
[root@localhost 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
按下面的方法解决:
[root@localhost mysql-5.5.30]#yum -y install ncurses-devel
[root@localhost mysql-5.5.30]#rm -f CMakeCache.txt
再次编译,如果没有问题的话,执行安装操作
[root@localhost mysql-5.5.30]#make && make install
设置Mysql配置文件
[root@localhost mysql-5.5.30]#cp support-files/my-medium.cnf /etc/my.cnf
将Mysql添加到系统服务启动项
[root@localhost mysql-5.5.30]#cp support-files/mysql.server /etc/init.d/mysqld
授权操作
[root@localhost mysql-5.5.30]#chmod 755 /etc/init.d/mysqld
初使化数据库:
[root@localhost mysql-5.5.30]#sh ./scripts/mysql_install_db --user=mysql
--basedir=/usr/local/mysql/ --database=/usr/local/mysql/data/ &
设置数据库目录权限
[root@localhost LNMP]#chown -R mysql:mysql /usr/local/mysql/
[root@localhost LNMP]#chown -R mysql:mysql /usr/local/mysql/data/
设置环境变量
[root@localhost LNMP]#vi /root/.bash_profile
在PATH=$PATH:$HOME/bin后添加参数为:
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
[root@localhost LNMP]#source /root/.bash_profile
修改Mysql默认密码:
[root@localhost LNMP]#/usr/local/mysql/bin/mysqladmin -u root password "test"
启动数据库命令:
[root@localhost LNMP]#service mysqld start
到此为此,Mysql数据库安装、配置完成。
4.2.2 安装PHP
获取安装包:
[root@localhost LNMP]#
wget http://cn2.php.net/get/php-5.3.24.tar.gz/from/this/mirror
安装必要的支持组件:
[root@localhost
LNMP]#yum -y install gcc gcc++ libtool-libs autoconf freetype
freetype-devel gd libjpeg libjpeg-devel libmcrypt libmcrypt-devel libpng
libpng-devel libxml2 libxml2-devel ncurses ncurses-devel zlib
zlib-devel zip unzip curl curl-devel
安装PHP过程:
[root@localhost LNMP]#tar -zxvf php-5.3.24.tar.gz
[root@localhost LNMP]#cd php-5.3.24
[root@localhost 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
[root@localhost php-5.3.24]#make && make install
[root@localhost php-5.3.24]#cp php.ini-production /etc/php.ini
[root@localhost php-5.3.24]#
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
[root@localhost php-5.3.24]#/usr/local/sbin/php-fpm
设置php-fpm开机自启动:
[root@localhost php-5.3.24]#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
[root@localhost nginx]# 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。下面会用到。
定义一个阻断时返回给用户的页面,可参考如下内容:
<html>
<head>
<title>Error 403 Request Denied</title>
</head>
<body>
<h2>Error 403 Request Denied</h2>
For some reasons, your request has been denied.
</body>
</html>
5.3.2 配置反向代理
新建一个虚拟主机的配置文件,具体配置如下图所示:
图12
最后,再次修改Nginx.conf,使其包含刚定义的虚拟主机配置文件即可。
图13
重启Nginx服务后配置开始生效。
5.4 防护效果:
5.4.1 未使用Web应用防护系统时,不具备攻击防护能力。
图14
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息