需求:禁止特定 IP (如惡意爬蟲、攻擊來源、內部測試機) 存取網站。Apache 環境下,.htaccess 提供無需重啟服務、即時生效的目錄級存取控制能力。本文示範單一 IP、IP 段、域名、全域拒絕/允許的常用規則模板。
<Directory /path/to/webroot>
# 或直接寫在該目錄下的 .htaccess 檔案中
Order Allow,Deny
Deny from 210.10.56.32 # 單一 IPv4
Deny from 219.5.45. # IP 段 (CIDR 寫法較佳:219.5.45.0/24)
Deny from 2001:db8::/32 # IPv6 段
Deny from .evil-domain.com # 以域名尾碼匹配 (需 DNS 反解,效能較差)
Allow from all # 其餘全部允許
</Directory>
| 需求 | 配置範例 |
|---|---|
| 僅允許公司內網存取 (白名單模式) | Order Deny,Allow |
| 封鎖已知惡意 IP 清單 (黑名單模式) | Order Allow,Deny |
| 封鎖整個國家/地區 IP (需搭配 GeoIP 模組) | GeoIPEnable On |
| 僅允許特定 User-Agent (如監控探針) | SetEnvIf User-Agent "Zabbix" allow_ua |
Order Allow,Deny 表示「先評估 Allow,再評估 Deny,最後匹配者生效」;Order Deny,Allow 反之。白名單用後者,黑名單用前者。192.168.1.0/24 比 192.168.1. 更明確、支援 IPv6、避免歧義。AllowOverride All 或 AllowOverride Limit,且 AccessFileName .htaccess。<Directory> 或 <Location>,並啟用 AllowOverride None。Deny from .domain.com 會觸發雙向 DNS 查詢 (正向+反向),極大增加延遲且易被偽造,**生產環境強烈不建議使用**。X-Forwarded-For 標頭,需配合 mod_remoteip (2.4) 或 mod_rpaf (2.2) 重寫 %a 變數,否則封鎖的是代理 IP。<Directory /path/to/webroot>
Require all granted
Require not ip 210.10.56.32
Require not ip 219.5.45.0/24
Require not ip 2001:db8::/32
# 組合邏輯更直觀,支援複雜表達式
</Directory>
access_log 確認被拒請求來源 IPcurl -I https://site/ 驗證回應碼.htaccess 是輕量級存取控制的利器,但「配得快、改得快、查得慢」是其雙刃劍。關鍵業務請將規則下沉至主配置,並建立 IP 封鎖/放行變更流程 (記錄、審核、部署、驗證),避免誤封業務流量或誤放攻擊流量。