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:&&" "msg:mysql keyword (&&)" "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:<"</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:>"</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:&#"</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:&#"</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編譯安裝時,預設的配置是<prefix>/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 && 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 >= 8"</code> <code>BLOCK;</code>
<code>CheckRule </code><code>"$RFI >= 8"</code> <code>BLOCK;</code>
<code>CheckRule </code><code>"$TRAVERSAL >= 8"</code> <code>BLOCK;</code>
<code>CheckRule </code><code>"$EVADE >= 8"</code> <code>BLOCK;</code>
<code>CheckRule </code><code>"$XSS >= 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>
第十步:測試攔截規則是否啟用
上述的規則僅過濾“<”、“>”和SQL的一些關鍵字(select|union|update|delete|insert|table|from|ascii|hex|unhex|drop|waitfor)。
<a></a>
版權聲明:原創作品,如需轉載,請與作者聯系。否則将追究法律責任
本文轉自 夢朝思夕 51CTO部落格,原文連結:http://blog.51cto.com/qiangmzsx/1380566