iptables - 僅允許在不同連接埠上具有已建立狀態的 IP 位址連接到連接埠

iptables - 僅允許在不同連接埠上具有已建立狀態的 IP 位址連接到連接埠

我想允許連接埠 x 上的連線用於在連接埠 y 上具有「已建立」狀態的 IP 位址。

僅使用 iptables 就可以做到這一點嗎?

答案1

也許你可以使用端口敲門?建立 TCP 連接時打開端口,可能是這樣: http://en.wikipedia.org/wiki/Port_knocking

答案2

答案是「有點」。您需要安裝ipset軟體包並確保您的核心受ipset支援。

您首先必須建立一個帶有超時的“IP 集”:

ipset create MySet hash:ip timeout 60

然後新增一條規則,為每個已建立的封包重設逾時

iptables -A INPUT -p tcp --dport $port1 -m state --state ESTABLISHED -j SET --add-set MySet src

最後,新增一組規則,僅當來源已被記錄時才允許存取第二個端口,並刪除其他規則

iptables -A INPUT -p tcp --dport $port2 -j Port2_Test
iptables -A Port2_Test -m state --state ESTABLISHED -j ACCEPT
iptables -A Port2_Test -m state --state NEW -m set --match-set MySet src -j ACCEPT
iptables -A Port2_Test -p tcp -j REJECT

編輯

我剛剛意識到也可以使用recent匹配擴展。你這樣做:

-A INPUT -p tcp --dport $portY -m state --state ESTABLISHED -m recent --name YThenX --set -j ACCEPT

...    

-A INPUT -p tcp --dport $portX -j Port2_Test

...

-A Port2_Test -m state --state ESTABLISHED -j ACCEPT
-A Port2_Test -m state --state NEW -m recent --name YThenX --rcheck --seconds $timeout --reap $timeout -j ACCEPT
-A Port2_Test -p tcp -j REJECT

相關內容