Debian

debian - iptables 不適用於允許一個特定埠

  • August 21, 2018

我有三個虛擬機:A、B 和 C,它們都在 debian 上執行。我已經設置 C 來路由 A 和 B 之間的流量。C 也有兩個介面:enp0s3enp0s8,不確定在這種情況下它是否重要。路由工作正常。

但是現在我想在路由器上設置 iptables 來阻止所有傳入的請求,除了那些發送到 8080 埠的請求。

這是我所做的:

iptables -P FORWARD DROP
iptables -A FORWARD -p tcp --dport 8080 -j ACCEPT

但是,如果我嘗試使用 A 從 A 連接到 B 上的任何埠(包括 8080)nc {host} {port},我的輸入不會從 A 轉換為 B。

我也嘗試過,反之亦然:

iptables -P FORWARD ACCEPT
iptables -A FORWARD -p tcp ! --dport 8080 -j DROP

但它也不起作用。

當我檢查輸出時,iptables -L -v有一些數據包被FORWARD鏈中接受。

iptables -A FORWARD -p tcp --dport 8080 -j ACCEPT

此規則將允許轉發到埠 8080 的所有數據包但是來自埠 8080 的數據包(對 SYN 數據包的響應)不會被轉發,除非發出請求的埠也是埠 8080。正如在一條評論中提到的,這很可能不是這種情況!

你需要第二條規則:

iptables -A FORWARD -p tcp --sport 8080 -j ACCEPT

此規則允許所有來自埠 8080 的數據包轉發

作為建議,如果您在設置中需要更高的安全性,我會將機器的 IP 地址添加到規則中,因為有了這兩條規則,只要他的源埠是 8080,某人就可以與不同的埠通信。

所以我的最終規則是:

iptables -A FORWARD -p tcp --sport 8080 -s IPOFMACHINEA -j ACCEPT
iptables -A FORWARD -p tcp --dport 8080 -d IPOFMACHINEA -j ACCEPT

iptables -A FORWARD -p tcp --sport 8080 -s IPOFMACHINEB -j ACCEPT
iptables -A FORWARD -p tcp --dport 8080 -d IPOFMACHINEB -j ACCEPT

由於您沒有提供 ips,因此您將不得不替換它們。

引用自:https://unix.stackexchange.com/questions/428087