Iptables

使用 iptables 刪除 autodiscover.xml 不起作用

  • January 16, 2020

我正在嘗試使用 iptables 阻止對我們伺服器的所有 autodiscover.xml 請求。我們的伺服器上不存在自動發現文件,但由於該網站沒有子域,因此請求正在訪問我們的伺服器。這是我到目前為止輸入的內容,但它們不起作用。請參閱以下日誌。請求不斷湧現。

iptables -I INPUT -p tcp --dport 80 -m string --string "POST /autodiscover" --algo bm -j DROP
iptables -I INPUT -p tcp --dport 443 -m string --string "POST /autodiscover" --algo bm -j DROP

這導致在 INPUT 鏈的頂部:

DROP       tcp  --  anywhere             anywhere             tcp dpt:http STRING match  "POST /autodiscover" ALGO name bm TO 65535
DROP       tcp  --  anywhere             anywhere             tcp dpt:https STRING match  "POST /autodiscover" ALGO name bm TO 65535

但是,我仍然在 Apache 日誌中收到請求。

[09/Jan/2020:17:04:31 -0500] "POST /autodiscover/autodiscover.xml HTTP/1.1" 403 3668 "-" "Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.6701; Pro)"
[09/Jan/2020:17:12:59 -0500] "POST /autodiscover/autodiscover.xml HTTP/1.1" 403 3668 "-" "Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.6701; Pro)"

iptables是這里工作的錯誤工具。您正在假設您在 TCP 級別看到的內容與瀏覽器發送的內容相同,但通常情況並非如此。

最大的例子是 HTTPS,還有 HTTP/2… 更一般地說,您還會發現壓縮編碼也會在這裡出現問題。

另一件會讓您在這裡的嘗試受挫並可能破壞其他流量的事情是連接保持活動。

由於您使用的是 Apache httpd,因此您確實應該在 httpd 中執行此操作。這是一個這樣的範例,我使用它來防止將此類請求傳遞到後端(httpd 被用作反向代理),而是將其重定向到其中一個 Exchange 伺服器:

ProxyPass        /autodiscover/autodiscover.xml !
Redirect 302     /autodiscover/autodiscover.xml https://autodiscover.example.org/autodiscoverer.xml

其他選擇是禁止內容。在這裡,我還展示瞭如果您不想禁止內部客戶端(儘管實際上您可能仍然需要支持來自網路外部的使用者),您可以如何組合使用它。

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteCond %{REQUEST_URI} ^/autodiscover
RewriteRule .* - [F]

另一個僅對請求進行 404 次處理的範例(同樣,在反向代理環境中)

#
# Deal with some particularly noisy 404s that we don't want to throw back to the
# backend as they can take a long time to process.
#
ProxyPass        /autodiscover/autodiscover.xml !
RewriteRule      ^/autodiscover/autodiscover.xml$ - [R=404,L]

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