Firewall

如何使用 ModSecurity SecRule 根據其主機名限制特定客戶端?

  • May 10, 2021

我試圖限制特定主機(例如 AWS)訪問我的網路伺服器。我嘗試了這些的不同變體,但它不起作用。

# Block AWS
SecRule REQUEST_HEADERS:Host ".*\.amazonaws\.com.*" \
"msg:'AWS blocked',id:10007,log,t:lowercase,drop,phase:1"

我試過:

SecRule REQUEST_HEADERS:Host ".*\.amazonaws\.com.*"
SecRule REQUEST_HEADERS:Host "@rx ^.*\.amazonaws\.com.*$"
SecRule REQUEST_HEADERS:Host "@contains amazonaws.com"

以上都不起作用,所以我得出的結論是我的標頭查詢語法有問題。這是我嘗試匹配排除的主機字元串的範例:主機:ec2-12-34-56-78.compute-1.amazonaws.com

因此,根據我收集的資訊,正如@FarhadSakhaei 指出的那樣, REQUEST_HEADERS:Host 指的是請求的主機,而不是遠端主機。這很奇怪,因為 REQUEST_HEADERS:User-Agent 確實返回了客戶端的使用者代理。

相反,可以使用 SecRule REMOTE_HOST 並將 Apache 指令 HostnameLookups 設置為“On”。

例如

SecRule REMOTE_HOST "bad\.host\.com$" "msg:'Bad host blocked',id:99999,log,drop,phase:1"

如果 HostnameLookups 為“Off”,REMOTE_HOST 將返回請求客戶端的 IP 地址。顯然,將 HostnameLookups 設置為“On”會導致一些性能下降,因此這是一種權衡。

引用自:https://serverfault.com/questions/1061680