Firewall
如何使用 ModSecurity SecRule 根據其主機名限制特定客戶端?
我試圖限制特定主機(例如 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”會導致一些性能下降,因此這是一種權衡。