滲透測試基礎知識---nginx安全配置

雨筍教育發表於2022-04-07

nginx安全配置

  • 隱藏版本號
`http {   server_tokens off;}`
  • 開啟HTTPS
server {    
  listen 443;  
  server_name xxx.com;  
  ssl on;  
  ssl_certificate /etc/nginx/certs/xxx.com.pem;    
  ssl_certificate_key /etc/nginx/certs/xx.com.key;  
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
}
  • ssl on:開啟https
  • ssl_certificate:配置nginx ssl證書的路徑
  • ssl_certificate_key:配置nginx ssl證書key的路徑
  • ssl_protocols:指定客戶端建立連線時使用的ssl協議版本,如果不需要相容TSLv1,直接去掉即可
  • ssl_ciphers:指定客戶端連線時所使用的加密演算法,你可以在這裡配置更高安全的演算法

  • 黑白名單配置

  • 白名單配置
`location /admin/ {   allow 192.168.1.0/24;   deny all;}`

上邊表示只允許192.168.1.0/24網段的主機訪問,拒絕其他所有。

  • 黑名單配置
`location /uploads/ {   deny 192.168.1.0/24;   allow all;}`
`set $allow false;if ($http_x_forwarded_for = "211.144.204.2") { set $allow true; }if ($http_x_forwarded_for ~ "108.2.66.[89]") { set $allow true; }if ($allow = false) { return 404; }`
  • 賬號認證
server {  
  location / {  
      auth_basic "please input user&passwd";  
      auth_basic_user_file key/auth.key;  
  }
}

  • 限制請求方法

  • server 塊配置
if ($request_method !~ ^(GET|POST)$ ) {  
  return 405;
}
  • 或者
location / {
limit_except GET HEAD POST { deny all; }
}
  • 拒絕User-Agent
if ($http_user_agent ~* LWP::Simple|BBBike|wget|curl) {    
  return 444;
}
  • 圖片防盜鏈
location /images/ {  
  valid_referers none blocked xx.com;  
      if ($invalid_referer) {  
      return 403;  
  }
}

valid_referers:驗證referer,其中none允許referer為空,blocked允許不帶協議的請求,除了以上兩類外僅允許referer為 或xx.com時訪問images下的圖片資源,否則返回403
也可以給不符合referer規則的請求重定向到一個預設的圖片

location /images/ {  
  valid_referers blocked xx.com  
  if ($invalid_referer) {  
  rewrite ^/images/.*.(gif|jpg|jpeg|png)$ /static/qrcode.jpg last;
  }
}
  • 控制併發連線數
http {
  limit_conn_zone $binary_remote_addr zone=ops:10m;

  server {
      listen 80;
      server_name xx.com;
         
      root /home/project/webapp;
      index index.html;
      location / {
          limit_conn ops 10;
      }
      access_log /var/log/nginx/nginx_access.log main;
  }
}

limit_conn_zone :設定儲存各個鍵(例如$binary_remote_addr)狀態的共享記憶體空間的引數,zone=空間名字:大小大小的計算與變數有關
例如:
$binary_remote_addr變數的大小對於記錄IPV4地址是 固定的4 bytes ,而記錄IPV6地址時 固定的16 bytes ,儲存狀態在32位平臺中佔用32或者64 bytes,在64位平臺中佔用64 bytes。1m的共享記憶體空間可以儲存大約3.2萬個32位的狀態,1.6萬個64位的狀態 limit_conn 指定一塊已經設定的共享記憶體空間 (例如name為ops的空間),以及每個給定鍵值的最大連線數
上邊的例子表示同一IP同一時間只允許10個連線

  • 緩衝區溢位攻擊
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

  • Header頭設定

透過以下設定可有效 防止XSS攻擊

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
  • 禁止訪問 htaccess
location ~/\.ht {
    deny all;
}
  • 禁止訪問多個目錄
location ~ ^/(picture|move)/ {
    deny all;
    break;
}
  • 禁止訪問 /data 開頭的檔案
location ~ ^/data {
    deny all;
}
  • 禁止訪問單個目錄
location /imxhy/images/ {
    deny all;
}


*本文章僅供技術交流分享,請勿做未授權違法攻擊,雨筍教育不負任何責任。具體請參考《網路安全法》。

下篇更新nginx目錄結構和配置檔案詳解


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006652/viewspace-2886036/,如需轉載,請註明出處,否則將追究法律責任。

相關文章