Linux
我應該如何使用 iptables 正確阻止傳出的 http 流量
我正在嘗試使用 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 連接。
您已經註意到,在鏈的第
NEW
1 行中添加允許的狀態OUTPUT
允許 DNS 解析 - 但它也允許其他所有內容,包括出站 HTTP;INPUT
然後,鏈的規則 1 允許所有返回半數據包進入。相反,恢復到上面的規則集並明確允許 DNSiptables -I OUTPUT 2 -p udp --dport 53 -j ACCEPT
這應該允許主機的 DNS 解析工作,但繼續阻止通過 HTTP 連接到它們的嘗試。請注意,
404
您尋求的是第 4 層(協議層)錯誤,您無法使用iptables
. 相反,出站 HTTP 連接只會超時,而 HTTPS 連接應該會成功。