nginx安全加固

技術小阿哥發表於2017-11-28

nginx模組 

http_substitutions_filter_module

modsecurity

Tengine支援了動態載入模組

增加modsecurity模組  

modsecurity傾向於過濾和阻止web危險

http://waringid.blog.51cto.com/65148/1629905

關閉伺服器標記  http{server_tokens off} 隱藏nginx版本

自定義快取

server

{

client_body_buffer_size  16K;

client_header_buffer_size  1k;

client_max_body_size  1m;

large_client_header_buffers  4  8k;

}

設定timeout設低來防禦DOS攻擊

http

{

client_body_timeout   10;

       client_header_timeout  30;

       keepalive_timeout     30  30;

       send_timeout          10;

}

限制訪問的方法

server

{

if($request_method !~ ^(GET|HEAD|POST)$) {        

                     return404;

              }

}

實際中應該使用444

日誌切割

kill-USR1 $(cat /var/run/nginx/nginx.pid)

模組 ngx_http_access_module 允許限制某些IP地址的客戶端訪問

location/ {

    deny  192.168.1.1;

    allow 192.168.1.0/24;

    allow 10.1.1.0/16;

    allow 2001:0db8::/32;

    deny  all;

}


在原來的編譯引數的首行加入–add-module=/root/install/naxsi-core-0.51-1/naxsi_src

nbs.rules檔案


增加IP限制功能

模組ngx_http_limit_conn_module和來ngx_http_limit_req_module


http {

limit_req_zone$binary_remote_addr zone=one:10m rate=10r/s;

limit_conn_zone$binary_remote_addr zone=two:10m;

     }

server{

limit_req zone=one burst=5;

limit_conn two 15;

}


增加WAF模組

增加fail2ban防止非法IP

ngx_http_stub_status_module  模組


Nginx模組GeoIP匹配處理IP所在國家、城市

if ( $geoip_country_code !~  ^(CN|US)$ ) {

        return 403;

}


自定義nginx版本號

http://purplegrape.blog.51cto.com/1330104/1291871


封殺各種user-agent

if ($http_user_agent ~* “java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan” ) {

    return 403;

}

if ($http_user_agent ~* “” ) {

    return 403;

}


封殺特定的url

location ~* .(bak|save|sh|sql|mdb|svn|git|old)$ {

rewrite ^/(.*)$  $host  permanent;

}


location /(admin|phpadmin|status)  { deny all; }


封殺特定的http方法和行為

if ($request_method !~ ^(GET|POST|HEAD)$ ) {

    return 405;

}

 

if ($http_range ~ “d{9,}”) {

    return 444;

}


強制網站使用域名訪問,可以逃過IP掃描

if ( $host !~* `abc.com` ) {

    return 403;

}


url 引數過濾敏感字

if ($query_string ~* “union.*select.*(“) { 

    rewrite ^/(.*)$  $host  permanent;

 

if ($query_string ~* “concat.*(“) { 

    rewrite ^/(.*)$  $host  permanent;

}


強制要求referer

if ($http_referer = “” ) {

    return 403;


老外的配置

set $add 1;

           location /index.php {

                   limit_except GET POST {

                        deny all;

               }

               set $ban “”;

               if ($http_referer = “” ) {set $ban $ban$add;}

               if ($request_method = POST ) {set $ban $ban$add;}

               if ($query_string = “action=login” ){set $ban $ban$add;}

               if ($ban = 111 ) {

                   access_log /var/log/[133]nginx/ban IP;

                   return 404;

               }

               proxy_pass http://127.0.0.1:8000; #here is a patch

           }


目錄只讀

mount –bind /data /var/www/html

mount -o remount,ro –bind /data /var/www/html

極大程度上可以防止提權篡改

本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/1710068,如需轉載請自行聯絡原作者


相關文章