天天看點

Nginx內建Naxsi子產品

Naxsi子產品的內建,是基于Nginx已經部署了或已經存在系統中。

第一步:下載下傳naxsi

<code>[qiang@localhost home]$ wget  http:</code><code>//naxsi</code><code>.googlecode.com</code><code>/files/naxsi-core-0</code><code>.51-1.tgz</code>

注:如果不能上網可以事先下載下傳,再上傳到伺服器中。

第二步:解壓naxsi

<code>[qiang@localhost home]$ </code><code>tar</code> <code>-zxvf naxsi-core-0.51-1.tgz</code>

第三步:切換到naxsi-core-0.51-1目錄,并複制其配置檔案到nginx.conf同目錄下

<code>[qiang@localhost naxsi_config]$ </code><code>cp</code> <code>naxsi_core.rules </code><code>/etc/nginx/naxsi_core</code><code>.rules</code>

修改naxsi_core.rules的配置如下:

<code>##################################</code>

<code>## INTERNAL RULES IDS:1-999     ##</code>

<code>#@MainRule "msg:weird request, unable to parse" id:1;</code>

<code>#@MainRule "msg:request too big, stored on disk and not parsed" id:2;</code>

<code>#@MainRule "msg:invalid hex encoding, null bytes" id:10;</code>

<code>#@MainRule "msg:unknown content-type" id:11;</code>

<code>#@MainRule "msg:invalid formatted url" id:12;</code>

<code>#@MainRule "msg:invalid POST format" id:13;</code>

<code>#@MainRule "msg:invalid POST boundary" id:14;</code>

<code>## SQL Injections IDs:1000-1099 ##</code>

<code>MainRule </code><code>"rx:select|union|update|delete|insert|table|from|ascii|hex|unhex|drop"</code> <code>"msg:sql keywords"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:8"</code> <code>id</code><code>:1000;</code>

<code>MainRule </code><code>"str:\""</code> <code>"msg:double quote"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:8,$XSS:8"</code> <code>id</code><code>:1001;</code>

<code>MainRule </code><code>"str:0x"</code> <code>"msg:0x, possible hex encoding"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:2"</code> <code>id</code><code>:1002;</code>

<code>## Hardcore rules</code>

<code>MainRule </code><code>"str:/*"</code> <code>"msg:mysql comment (/*)"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:8"</code> <code>id</code><code>:1003;</code>

<code>MainRule </code><code>"str:*/"</code> <code>"msg:mysql comment (*/)"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:8"</code> <code>id</code><code>:1004;</code>

<code>MainRule </code><code>"str:|"</code> <code>"msg:mysql keyword (|)"</code>  <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:8"</code> <code>id</code><code>:1005;</code>

<code>##MainRule "str:&amp;&amp;" "msg:mysql keyword (&amp;&amp;)" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1006;</code>

<code>## end of hardcore rules</code>

<code>MainRule </code><code>"str:--"</code> <code>"msg:mysql comment (--)"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:4"</code> <code>id</code><code>:1007;</code>

<code>MainRule </code><code>"str:;"</code> <code>"msg:; in stuff"</code> <code>"mz:BODY|URL|ARGS"</code> <code>"s:$SQL:4,$XSS:8"</code> <code>id</code><code>:1008;</code>

<code>MainRule </code><code>"str:="</code> <code>"msg:equal in var, probable sql/xss"</code> <code>"mz:ARGS|BODY"</code> <code>"s:$SQL:2"</code> <code>id</code><code>:1009;</code>

<code>##MainRule "str:(" "msg:parenthesis, probable sql/xss" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1010;</code>

<code>##MainRule "str:)" "msg:parenthesis, probable sql/xss" "mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1011;</code>

<code>MainRule </code><code>"str:'"</code> <code>"msg:simple quote"</code> <code>"mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:4,$XSS:8"</code> <code>id</code><code>:1013;</code>

<code>MainRule </code><code>"str:,"</code> <code>"msg:, in stuff"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:4"</code> <code>id</code><code>:1015;</code>

<code>MainRule </code><code>"str:#"</code> <code>"msg:mysql comment (#)"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$SQL:4"</code> <code>id</code><code>:1016;</code>

<code>###############################</code>

<code>## OBVIOUS RFI IDs:1100-1199 ##</code>

<code>MainRule </code><code>"str:http://"</code> <code>"msg:http:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1100;</code>

<code>MainRule </code><code>"str:https://"</code> <code>"msg:https:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1101;</code>

<code>MainRule </code><code>"str:ftp://"</code> <code>"msg:ftp:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1102;</code>

<code>MainRule </code><code>"str:php://"</code> <code>"msg:php:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1103;</code>

<code>MainRule </code><code>"str:sftp://"</code> <code>"msg:sftp:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1104;</code>

<code>MainRule </code><code>"str:zlib://"</code> <code>"msg:zlib:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1105;</code>

<code>MainRule </code><code>"str:data://"</code> <code>"msg:data:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1106;</code>

<code>MainRule </code><code>"str:glob://"</code> <code>"msg:glob:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1107;</code>

<code>MainRule </code><code>"str:phar://"</code> <code>"msg:phar:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1108;</code>

<code>MainRule </code><code>"str:file://"</code> <code>"msg:file:// scheme"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$RFI:8"</code> <code>id</code><code>:1109;</code>

<code>#######################################</code>

<code>## Directory traversal IDs:1200-1299 ##</code>

<code>#######################################                                       </code>

<code>MainRule </code><code>"str:.."</code> <code>"msg:double dot"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$TRAVERSAL:4"</code> <code>id</code><code>:1200;</code>

<code>MainRule </code><code>"str:/etc/passwd"</code> <code>"msg:obvious probe"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$TRAVERSAL:4"</code> <code>id</code><code>:1202;</code>

<code>MainRule </code><code>"str:c:\\"</code> <code>"msg:obvious windows path"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$TRAVERSAL:4"</code> <code>id</code><code>:1203;</code>

<code>MainRule </code><code>"str:cmd.exe"</code> <code>"msg:obvious probe"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$TRAVERSAL:4"</code> <code>id</code><code>:1204;</code>

<code>MainRule </code><code>"str:\\"</code> <code>"msg:backslash"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$TRAVERSAL:4"</code> <code>id</code><code>:1205;</code>

<code>MainRule </code><code>"str:/"</code> <code>"msg:slash in args"</code> <code>"mz:ARGS|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$TRAVERSAL:2"</code> <code>id</code><code>:1206;</code>

<code>########################################</code>

<code>## Cross Site Scripting IDs:1300-1399 ##</code>

<code>MainRule </code><code>"str:&lt;"</code> <code>"msg:html open tag"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:8"</code> <code>id</code><code>:1302;</code>

<code>MainRule </code><code>"str:&gt;"</code> <code>"msg:html close tag"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:8"</code> <code>id</code><code>:1303;</code>

<code>MainRule </code><code>"str:["</code> <code>"msg:[, possible js"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:4"</code> <code>id</code><code>:1310;</code>

<code>MainRule </code><code>"str:]"</code> <code>"msg:], possible js"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:4"</code> <code>id</code><code>:1311;</code>

<code>MainRule </code><code>"str:~"</code> <code>"msg:~ character"</code> <code>"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:4"</code> <code>id</code><code>:1312;</code>

<code>MainRule </code><code>"str:`"</code>  <code>"msg:grave accent !"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:8"</code> <code>id</code><code>:1314;</code>

<code>MainRule </code><code>"rx:%[2|3]."</code>  <code>"msg:double encoding !"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:8"</code> <code>id</code><code>:1315;</code>

<code>MainRule </code><code>"rx:%3[c|e]."</code>  <code>"msg:double encoding !"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:8"</code> <code>id</code><code>:1316;</code>

<code>MainRule </code><code>"rx:\\\u003[c|e]"</code>  <code>"msg:tag encoding !"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$XSS:8"</code> <code>id</code><code>:1317;</code>

<code>MainRule </code><code>"str:&amp;#"</code> <code>"msg: utf7/8 encoding"</code> <code>"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"</code> <code>"s:$EVADE:4"</code> <code>id</code><code>:1318;</code>

<code>####################################</code>

<code>## Evading tricks IDs: 1400-1500 ##</code>

<code>MainRule </code><code>"str:&amp;#"</code> <code>"msg: utf7/8 encoding"</code> <code>"mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie"</code> <code>"s:$EVADE:4"</code> <code>id</code><code>:1400;</code>

<code>MainRule </code><code>"str:%U"</code> <code>"msg: M$ encoding"</code> <code>"mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie"</code> <code>"s:$EVADE:4"</code> <code>id</code><code>:1401;</code>

<code>MainRule negative </code><code>"rx:multipart/form-data|application/x-www-form-urlencoded"</code> <code>"msg:Content is neither mulipart/x-www-form.."</code> <code>"mz:$HEADERS_VAR:Content-type"</code> <code>"s:$EVADE:4"</code> <code>id</code><code>:1402;</code>

<code>#############################</code>

<code>## File uploads: 1500-1600 ##</code>

<code>MainRule </code><code>"rx:.ph|.asp|.ht"</code> <code>"msg:asp/php file upload!"</code> <code>"mz:FILE_EXT"</code> <code>"s:$UPLOAD:8"</code> <code>id</code><code>:1500;</code>

<code>MainRule </code><code>"rx:.jsp"</code> <code>"msg:asp/php file upload!"</code> <code>"mz:FILE_EXT"</code> <code>"s:$UPLOAD:8"</code> <code>id</code><code>:1501;</code>

<code>MainRule </code><code>"rx:.html"</code> <code>"msg:asp/php file upload!"</code> <code>"mz:FILE_EXT"</code> <code>"s:$UPLOAD:8"</code> <code>id</code><code>:1502;</code>

<code>MainRule </code><code>"rx:.php"</code> <code>"msg:asp/php file upload!"</code> <code>"mz:FILE_EXT"</code> <code>"s:$UPLOAD:8"</code> <code>id</code><code>:1503;</code>

注:(1)nginx.conf所有的目錄是在nginx編譯安裝時,預設的配置是&lt;prefix&gt;/conf/nginx.conf。

(2)鑒于原有的naxsi_core.rules檔案中規則不足,最好是采用本文檔中的配置規則。

第四步:編譯安裝Nginx

<code>[qiang@localhost nginx-1.5.7]</code><code>#./configure --prefix=/usr</code>

<code>--sbin-path=</code><code>/usr/sbin/nginx</code>

<code>--conf-path=</code><code>/etc/nginx/nginx</code><code>.conf</code>

<code>--add-module=</code><code>/home/naxsi-core-0</code><code>.51-1</code><code>/naxsi_src</code>

<code>--error-log-path=</code><code>/var/log/nginx/error</code><code>.log</code>

<code>--pid-path=</code><code>/var/run/nginx/nginx</code><code>.pid</code>

<code>--user=root</code>

<code>--group=root</code>

<code>--with-http_ssl_module</code>

<code>--with-http_flv_module</code>

<code>--with-http_gzip_static_module</code>

<code>--http-log-path=</code><code>/var/log/nginx/access</code><code>.log</code>

<code>--http-client-body-temp-path=</code><code>/var/tmp/nginx/client</code>

<code>--http-proxy-temp-path=</code><code>/var/tmp/nginx/proxy</code>

<code>--http-fastcgi-temp-path=</code><code>/var/tmp/nginx/fcgi</code>

<code>--with-http_stub_status_module</code>

<code>[root@localhost nginx-1.5.7]</code><code># make &amp;&amp; make install</code>

注:上述的參數可以根據實際情況選擇,但是标紅的需要有。

第五步:驗證nginx是否安裝成功

<code>[qiang@localhost nginx-1.5.7]</code><code># nginx</code>

<code>nginx: [warn] low address bits of 192.168.1.65</code><code>/26</code> <code>are meaningless </code><code>in</code> <code>/etc/nginx/nginx</code><code>.conf:78</code>

<code>[qiang@localhost nginx-1.5.7]</code><code># ps -ef |grep nginx</code>

<code>root      3086     1  0 10:53 ?        00:00:00 nginx: master process nginx</code>

<code>root      3087  3086  1 10:53 ?        00:00:00 nginx: worker process</code>

<code>root      3088  3086  1 10:53 ?        00:00:00 nginx: worker process</code>

<code>root      3089  3086  1 10:53 ?        00:00:00 nginx: worker process</code>

<code>root      3090  3086  1 10:53 ?        00:00:00 nginx: worker process</code>

<code>root      3093  3073  4 10:53 pts</code><code>/1</code>    <code>00:00:00 </code><code>grep</code> <code>nginx</code>

第六步:配置過濾條件

切換目錄到與nginx.conf同目錄下,建立nbs.rules檔案。

<code>[qiang@localhost nginx]</code><code># vim nbs.rules</code>

<code>##LearningMode;</code>

<code>#Enables learning mode--stop</code>

<code>SecRulesEnabled;</code>

<code>##Disables learning</code>

<code>##SecRulesDisabled;</code>

<code>DeniedUrl </code><code>"/RequestDenied"</code><code>;</code>

<code>## check rules</code>

<code>CheckRule </code><code>"$SQL &gt;= 8"</code> <code>BLOCK;</code>

<code>CheckRule </code><code>"$RFI &gt;= 8"</code> <code>BLOCK;</code>

<code>CheckRule </code><code>"$TRAVERSAL &gt;= 8"</code> <code>BLOCK;</code>

<code>CheckRule </code><code>"$EVADE &gt;= 8"</code> <code>BLOCK;</code>

<code>CheckRule </code><code>"$XSS &gt;= 8"</code> <code>BLOCK;</code>

<code>############################################################</code>

<code>##      STOP   ALL   RULES(如果不需要可以關閉全部過濾規則)  ##</code>

<code>#BasicRule wl:0;</code>

<code>BasicRule wl:1,2,10,11,12,13,14;</code>

<code>BasicRule wl:1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016;</code>

<code>BasicRule wl:1100,1101,1102,1103,1104,1105,1106,1107,1108,1109;</code>

<code>BasicRule wl:1200,1202,1203,1204,1205,1206;</code>

<code>BasicRule wl:1310,1311,1312,1313,1314,1315,1318;</code>

<code>BasicRule wl:1400,1401,1402;</code>

<code>BasicRule wl:1500,1501,1502,1503;</code>

注:該nbs.rules檔案的規則需要根據不同的業務應用制定。

第七步:配置nginx.conf

<code>http {</code>

<code>    </code><code>include       naxsi_core.rules;</code>

<code>    </code><code>include       mime.types;</code>

<code>    </code><code>default_type  application</code><code>/octet-stream</code><code>;</code>

<code>    </code><code>.......</code>

<code>    </code><code>server {</code>

<code>        </code><code>listen       80;</code>

<code>        </code><code>server_name  localhost centoshost.com;</code>

<code>        </code><code>charset utf-8;</code>

<code>        </code><code>.......</code>

<code>        </code><code>location </code><code>/wavsep/</code> <code>{</code>

<code>            </code><code>.......</code>

<code>            </code><code>include nbs.rules;</code>

<code>        </code><code>}</code>

<code>        </code><code>location </code><code>/RequestDenied</code> <code>{</code>

<code>            </code><code>error_page  404  </code><code>/404</code><code>.html;</code>

第九步:重新開機nginx

<code>[qiang@localhost nginx]</code><code># nginx -t -c /etc/nginx/nginx.conf</code>

<code>nginx: the configuration </code><code>file</code> <code>/etc/nginx/nginx</code><code>.conf syntax is ok</code>

<code>nginx: configuration </code><code>file</code> <code>/etc/nginx/nginx</code><code>.conf </code><code>test</code> <code>is successful</code>

<code>[qiang@localhost nginx]</code><code># nginx -s reload</code>

第十步:測試攔截規則是否啟用

上述的規則僅過濾“&lt;”、“&gt;”和SQL的一些關鍵字(select|union|update|delete|insert|table|from|ascii|hex|unhex|drop|waitfor)。

<a></a>

版權聲明:原創作品,如需轉載,請與作者聯系。否則将追究法律責任

本文轉自 夢朝思夕 51CTO部落格,原文連結:http://blog.51cto.com/qiangmzsx/1380566