设为首页 收藏本站
查看: 729|回复: 0

[经验分享] Nginx+Naxsi(WAF)+WebNginx技术文档

[复制链接]

尚未签到

发表于 2018-11-13 13:02:23 | 显示全部楼层 |阅读模式
  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@localhostLNMP]#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过程:
  [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。下面会用到。
  定义一个阻断时返回给用户的页面,可参考如下内容:
  
  
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-634620-1-1.html 上篇帖子: apache 伪静态转到nginx 下篇帖子: 源码安装nginx服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表