allow address | CIDR | all;
deny address | CIDR | all;
http、server、location、limit_conn_zone 區塊allow alldeny 192.168.1.100;
deny 10.0.0.0/8;
deny 192.168.1.0/24;
deny 2001:db8::/32; # IPv6
allow 192.168.1.0/24; # 內網
allow 203.0.113.50; # 管理員辦公室 IP
deny all; # 其餘拒絕
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;
...
}
nginx -s reload
# 黑名單
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;
# ...
}
}
# 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 之前real_ip_header 與 set_real_ip_from,否則判斷的是 CDN IPngx_http_geo_module 或 ngx_http_ip2location_module,效能優於線性匹配::1 而非 localhostTelnet 實測 SMTP 伺服器:從基礎連線到進階送達回條驗證
Windows Server 2008 / Vista / Win7 運行 Java 應用出現 8 小時時區偏移:JDK 1.5.0_07 Bug 根因與升級修復方案
Apache 啟用 SSL (HTTPS) 完整教程:OpenSSL 產生金鑰對、申請憑證、配置 httpd.conf
Apache mod_proxy_balancer 負載均衡完整配置指南:權重、演算法、健康檢查與監控
網頁掛馬與 SEO 暗鏈檢測全指南:原理、類型、實例與防禦體系