Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Nginx 禁止特定 IP/IP 段存取:allow/deny 指令完整用法

編輯:關於伺服器

核心指令

allow  address | CIDR | all;
deny   address | CIDR | all;
  • 適用於 http、server、location、limit_conn_zone 區塊
  • 規則**順序執行**,匹配即停止
  • 預設隱含 allow all

基本語法範例

封鎖單一 IP

deny 192.168.1.100;

封鎖 IP 段 (CIDR)

deny 10.0.0.0/8;
deny 192.168.1.0/24;
deny 2001:db8::/32;  # IPv6

白名單模式:僅允許特定 IP,其餘全擋

allow 192.168.1.0/24;  # 內網
allow 203.0.113.50;    # 管理員辦公室 IP
deny all;              # 其餘拒絕

黑名單模式:預設允許,封鎖惡意 IP

deny 198.51.100.0/24;  # 已知攻擊段
deny 203.0.113.100;    # 單一惡意 IP
allow all;             # 其餘允許 (可省略)

進階:模組化管理 (推薦生產環境)

建立獨立黑名單檔案

# /etc/nginx/conf.d/blockips.conf
deny 95.105.25.181;
deny 192.168.1.0/24;
deny 10.0.0.0/8;
# 可由腳本自動更新 (如 fail2ban、威脅情報餵送)

主配置引入

# nginx.conf http 區塊
include /etc/nginx/conf.d/blockips.conf;

# 或特定站點
server {
    include /etc/nginx/conf.d/blockips.conf;
    ...
}

熱重載生效 (無需重啟 Worker)

nginx -s reload

完整 blocksip.conf 格式範例

# 黑名單
deny 192.168.1.100;
deny 10.0.0.0/8;

# 白名單 (優先級較高,放前面)
allow 192.168.1.0/24;
allow 172.16.0.0/12;

# 特殊:允許所有 (重置)
allow all;

# 特殊:拒絕所有 (最高優先級)
deny all;

實戰場景:管理後台僅內網存取

server {
    location ^~ /admin/ {
        allow 10.0.0.0/8;
        allow 192.168.0.0/16;
        allow 172.16.0.0/12;
        deny all;
        
        # PHP 處理 (巢狀 location 需重新定義)
        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            include fastcgi_params;
        }
    }
    
    location ^~ /phpmyadmin/ {
        allow 192.168.1.0/24;
        deny all;
        # ...
    }
}

GeoIP 地理位置封鎖 (進階)

# http 區塊
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $block_country {
    default 0;
    CN 1;   # 封鎖中國大陸
    KP 1;   # 朝鮮
    IR 1;   # 伊朗
}

server {
    if ($block_country) {
        return 403;
    }
}

驗證與除錯

# 測試配置
nginx -t

# 模擬不同 IP (需 realip_module)
curl -H "X-Forwarded-For: 192.168.1.100" https://example.com/admin/
curl -H "X-Forwarded-For: 203.0.113.50" https://example.com/admin/

# 查看拒絕日誌
grep ' 403 ' /var/log/nginx/access.log | grep -E '192\.168\.1\.100|203\.0\.113\.50'

避坑提醒

  • allow/deny **順序決定一切**,白名單必須寫在 deny all 之前
  • CDN/Proxy 後端需正確設定 real_ip_header 與 set_real_ip_from,否則判斷的是 CDN IP
  • 大量 IP (萬條以上) 建議用 ngx_http_geo_module 或 ngx_http_ip2location_module,效能優於線性匹配
  • IPv6 位址需完整寫法,::1 而非 localhost
Copyright © Windows教程網 All Rights Reserved