Linux

我應該如何使用 iptables 正確阻止傳出的 http 流量

  • July 9, 2014

我正在嘗試使用 iptables,並且我正在嘗試允許所有傳出的 HTTPS 請求,但要阻止 HTTP。

我有下面的程式碼;

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     udp  --  anywhere             anywhere             udp dpt:ssh
ACCEPT     udp  --  anywhere             anywhere             udp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
DROP       tcp  --  anywhere             anywhere            
DROP       udp  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     udp  --  anywhere             anywhere             udp dpt:https
ACCEPT     udp  --  anywhere             anywhere             udp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
DROP       tcp  --  anywhere             anywhere            
DROP       udp  --  anywhere             anywhere            

.

顯然,這幾乎阻止了我嘗試瀏覽的每個網頁,無論是http://example.com>還是<https://example.com

我沒有得到什麼?非常感謝您的幫助!

我認為就HTTP 和 HTTPS 而言,這些規則沒有任何問題。問題是您還阻止了 DNS 解析,因此沒有客戶端可以解析主機以嘗試與其建立 HTTPS 連接。

您已經註意到,在鏈的第NEW1 行中添加允許的狀態OUTPUT允許 DNS 解析 - 但它也允許其他所有內容,包括出站 HTTP;INPUT然後,鏈的規則 1 允許所有返回半數據包進入。相反,恢復到上面的規則集並明確允許 DNS

iptables -I OUTPUT 2 -p udp --dport 53 -j ACCEPT

這應該允許主機的 DNS 解析工作,但繼續阻止通過 HTTP 連接到它們的嘗試。請注意,404您尋求的是第 4 層(協議層)錯誤,您無法使用iptables. 相反,出站 HTTP 連接只會超時,而 HTTPS 連接應該會成功。

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