Linux

iptables 不允許來自開放埠的網路流量

  • May 1, 2017

我更改了 INPUT 鏈的策略,添加了以下命令。

iptables -P INPUT DROP

在我插入下一個規則以允許來自網路埠 80 和 443 的輸入數據包後,但埠仍然關閉(例如,我不能使用 Web 瀏覽器)。

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

輸出iptables -L

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

如何允許來自 HTTP 和 HTTPS 埠的網路流量?

您需要允許埠 80 和 443 上的傳入請求,這已使用兩個接受規則完成。

您還需要允許ESTABLISHED流量,但這可以在您的中跳過,因為您將OUTPUT策略設置為ACCEPT.

您的規則似乎足以僅允許傳入請求。您將無法啟動與其他電腦的連接。這是因為您拒絕所有INPUT流量(包括ESTABLISHED連接)。要解決此問題,您可以添加如下規則:

iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT

為了幫助調試您的問題,您可以嘗試幾件事:

  1. 用於tcpdump擷取流量以確認其丟棄位置。
  2. INPUT將策略更改為ACCEPT臨時以確認它是否與您的防火牆規則有關。
  3. 使用iptables -L -n -v顯示每個規則的命中可以幫助您確認您的規則是否匹配某些流量(當您嘗試訪問允許的埠時)。這僅在非繁忙伺服器上有用。
  4. 使用LOGiptables 中的 target 在您的接受規則之前記錄數據包,以確認數據包源/目標 IP 和埠符合您的期望。

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