nginx反向代理+naxsi防火墙

安装包:

   nginx:tengine-1.4.0.tar.gz

   # wget http://tengine.taobao.org/download/tengine-1.4.0.tar.gz

   naxsi:naxsi-0.48.tgz

   # svn checkout http://naxsi.googlecode.com/svn/tags/0.48 naxsi-0.48

   Python-2.7.5.tgz

   zope.interface-3.8.0.tar.gz

   Twisted-11.0.0.tar

   MySQL-python-1.2.3.tar.gz

   setuptools-0.6c11.tar.gz

编译安装nginx

   ./configure --with-pcre=/home/soft/test/pcre-8.30

               --with-openssl=/home/soft/test/openssl-1.0.0

               --prefix=/home/app/nginx

               --add-module=/home/soft/test/ngx_cache_purge-1.5

               --with-http_concat_module

               --add-module=/home/soft/test/naxsi-0.48/naxsi_src/

naxsi配置文件说明:

   naxsi的规则配置文件

   规则集部分配置文件:包含naxsi要检测攻击特征的规则,基本规则的格式如下:

   [@beike_41_134 workspace]# vi /etc/nginx/naxsi_core.rules 【naxsi的规则配置文件路径】

   MainRule "str:|" "msg:mysql keyword (|)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"

   "s:$SQL:8" id:1005;

   规则说明:

   MainRule:主配置规则,规则有三类(加BasicRule-本地配置规则,CheckRule-结果裁定规则),合并形成最终规则。

   str:| : 规则要检测的字符“|”

   msg:mysql keyword (|) : 规则的标签信息。

   mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie : 规则要检查的协议字段,Body还是Url等。

   s:$SQL:8 : 如果匹配上该条规则则设置变量SQL的值为8,当该变量超过引擎配置中设置的阈值时naxsi就采取劢作。

   id:1005 : 规则的id号,根据该id号可以识别日志中产生的信息是由哪一条规则触发的。

   备注:规则文件可通过http://security.sohu-inc.com/conf_rule/naxsi/获取。


   naxsi的引擎配置文件

   引擎配置文件:包含naxsi引擎工作方式的控制,自学习模式、引擎开关、阈值、劢作等参数设置。

   [@beike_41_134 workspace]# vi /etc/nginx/nbs.rules 【naxsi的引擎配置文件路径】

   1 #learningMode;

   2 SecRulesEnabled;

   3 #SecRulesDisabled;

   4 DeniedUrl "/RequestDenied";

   5 #include "/tmp/naxsi_rules.tmp";

   6

   7 ## check rules

   8 CheckRule "$SQL >= 8" BLOCK;

   9 CheckRule "$RFI >= 8" BLOCK;

   10 CheckRule "$TRAVERSAL >= 4" BLOCK;

   11 CheckRule "$EVADE >= 4" BLOCK;

   12 CheckRule "$XSS >= 8" BLOCK;

   备注:

   第1行:开吭自学习模式。目前为关闭状态,需要相关内置的配置脚本参不手劢执行才能完成;

   第2行:开吭该模块的检测功能;

   第3行:关闭该模块的检测功能;

   第4行:拒绝请求时的应答内容位置-/RequestDenied目录下的默认文件;

   第5行:设置自学习生成的规则文件;

   第8-12行:相关内置变量的阈值设置,即达到该阈值即阻断请求(BLOCK)。naxsi根据核心规则    集检测数据包,发现匹配上规则就增加相关特征变量的值,达到阈值即认为是攻击,最后采取劢     作。修改红色字体部分的规则-使能的设置即可吭劢或者关闭该模块。

nginx 配置文件

http {

include /etc/nginx/naxsi_core.rules;    

##naxsi_core.rules文件在naxsi-0.48/naxsi_config/naxsi_core.rules

……

server {

listen 80;

server_name localhost;

access_log /tmp/nginx_access.log;

error_log /tmp/nginx_error.log;

location / {

include /etc/nginx/nbs.rules;

#nbs.rules 文件是naxsi-0.48/naxsi_config/default_location_config.example

root html;

index index.html index.htm;

}

location /RequestDenied {

proxy_pass http://127.0.0.1:8082;

}

}

启动nginx

/usr/local/nginx/sbin/nginx

naxsi[[http://code.google.com/p/naxsi/wiki/LearningMode0_46][学习模式(0.46版)]]

naxsi制定一批规则(见naxsi_core.rules),对于网络攻击进行过滤。这样的规则有时会无差别的过滤一些正常的页面,因此需要制定白名单,对其放行。naxsi学习模式就是用来收集白名单。naxsi一般的定制流程为:

1. 安装nginx+naxsi

2. 配置学习模式

3. 运行nginx、nx_intercept.py、nx_extract.py三个程序

4. 下载网站镜像

5. 收集白名单

6. 修改配置,取消学习模式

7. 杀死nx_intercept.py、nx_extract.py,重启nginx


** 各文件说明

| 文件名            | 说明                                                      |

|-------------------+-----------------------------------------------------------|

| nx_intercept.py   | 监听端口8080,获取naxsi产生的异常信息,并将其保存到数据库 |

| nx_extract.py     | 监听端口8081,从数据库读取异常信息,以web形式显示         |

| nx_parser.py      | 业务处理,主要是数据分析以及读写数据库                    |

| MySQLConnector.py | 数据库句柄                                                |

| naxsi-ui.conf     | 配置文件        

** 安装python类库

Twisted-11.0.0.tar

MySQL-python-1.2.3.tar.gz

安装过程中会提示安装其他包,需要什么安装什么

*** nbs.rules

: root@ubuntu:~# touch /tmp/naxsi_rules.tmp

: root@ubuntu:~# cat /usr/local/nginx/conf/nbs.rules

: LearningMode;

: SecRulesEnabled;

: #SecRulesDisabled;

: DeniedUrl "/RequestDenied";

:

: include "/tmp/naxsi_rules.tmp";

: BasicRule wl:1315 "mz:$HEADERS_VAR:cookie";

:

: ## check rules

: CheckRule "$SQL >= 8" BLOCK;

: CheckRule "$RFI >= 8" BLOCK;

: CheckRule "$TRAVERSAL >= 4" BLOCK;

: CheckRule "$EVADE >= 4" BLOCK;

: CheckRule "$XSS >= 8" BLOCK;

安装mysql

yum install mysql -y

创建mysql库

mysql -uroot -p123456 -e 'create database naxsi_sig;

** 运行python脚本,收集白名单

启用nx_intercept.py和nx_extract.py两进程,请注意mysql登录用户名和密码要:

: root@ubuntu:~/software# cd naxsi-0.46-1/contrib/naxsi-ui

: root@ubuntu:~/software/naxsi-0.46-1/contrib/naxsi-ui# cat naxsi-ui.conf

[sql]

dbtype = mysql

username=root

password=

hostname=127.0.0.1

dbname=naxsi_sig


[nx_extract]

port = 8083

rules_path=/usr/local/nginx/conf/core.rules

username = naxsi_web

password =


[nx_intercept]

port = 8082

# python nx_intercept.py -c naxsi-ui.conf

# python nx_extract.py naxsi-ui.conf

** 页面403

自己编译的nginx可能会出现这个问题,主要原因是nginx对网站目录没有权限。解决方法:一,给文件夹加访问权限;二,修改nginx.conf。第一行改成user  root root


** _mysql_exceptions.OperationalError: (1049, "Unknown database 'naxsi_sig'")

一般因为数据库没创建才有这个问题:

: root@ubuntu:~/software# mysql -uroot -p123456 -e 'create database naxsi_sig;'


<type 'exceptions.IOError'>: [Errno 5] Input/output error

[root@WEB_YQ_64 naxsi-ui]# cat naxsi-ui.conf

[sql]

dbtype = mysql

username=root

password=

hostname=127.0.0.1

dbname=naxsi_sig


[nx_extract]

port = 8083

rules_path=/usr/local/nginx/conf/naxsi_core.rules

username = naxsi_web

password =


[nx_intercept]

port = 8082

path_data=/tmp/naxsi-ui-data/   添加此行解决问题


** _mysql_exceptions.ProgrammingError: (1146, "Table 'naxsi_sig.exception' doesn't exist")

一般是因为数据库里没有数据,线查看nginx的server配置是不是这样的,再确定是不是启动了nx_intercept.py

:     location /RequestDenied {

:         proxy_pass http://127.0.0.1:8080;

: #        proxy_pass http://192.168.198.171:8080;

: #        return 405;

:     }


通过访问页面获取到白名单规则,加入到nginx  location中

你可能感兴趣的:(nginx反响代理naxsi)