Linux
iptables 不允許來自開放埠的網路流量
我更改了 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
為了幫助調試您的問題,您可以嘗試幾件事:
- 用於
tcpdump
擷取流量以確認其丟棄位置。INPUT
將策略更改為ACCEPT
臨時以確認它是否與您的防火牆規則有關。- 使用
iptables -L -n -v
顯示每個規則的命中可以幫助您確認您的規則是否匹配某些流量(當您嘗試訪問允許的埠時)。這僅在非繁忙伺服器上有用。- 使用
LOG
iptables 中的 target 在您的接受規則之前記錄數據包,以確認數據包源/目標 IP 和埠符合您的期望。