Ubuntu

iptables 輸入、輸出、轉發

  • January 18, 2022

好的,我昨天開始研究網路,只是設置了我的 ubuntu 伺服器,所以我是一個完整的菜鳥。

我想問一下 iptables 中的輸入/輸出/轉發鍊是什麼?假設我想打開埠 22 進行 ssh 訪問,我需要使用所有這 3 個埠嗎?或者只是其中兩個?

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT

謝謝!

INPUT:來自網路並進入的伺服器的數據包。

OUTPUT:來自您的伺服器並進入網路的數據包。

轉發:由您的伺服器轉發的數據包,如果/當它充當不同網路之間的路由器時。

為了允許 SSH 訪問的伺服器,您必須接受 INPUT 鏈中的流量。

正如正確解釋的那樣:

INPUT:傳入數據包,即以主機為目的IP的數據包

OUTPUT :傳出數據包,即以主機為源IP的數據包

FORWARD : 源 ip 和目標 ip 都不是主機 IP 的數據包

附帶說明一下,談論主機的 IP 是對語言的濫用。實際上,IP 屬於網路介面,而不是主機。事實上,許多主機都有多個網路介面(例如 wifi 無線電、乙太網埠),每個都有自己的 IP。

然而,錯誤地指出,要允許 ssh,您只需要添加一個允許傳入 ssh 數據包的規則。這是不正確的,因為您可以很容易地看到自己:您將允許 ssh 數據包,但您的防火牆將丟棄(或拒絕 - 取決於您的預設設置)您為響應該 ssh 連接而發回的任何內容。

訣竅是允許傳入 ssh 連接和通信,並允許傳出 ssh 通信(但不是連接,如果您不希望主機進行傳出 ssh 連接)。

實際上,您可以在 iptables 中這樣設置:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

(預設行為是丟棄或拒絕)

請注意,在許多客戶端上,您實際上需要相反的設置:允許newestablished在 OUTPUT 上(允許您自己連接到外部世界),並且established只允許在 INPUT 上(以保護自己免受不必要的連接嘗試)。

PS:我在這裡玩死靈法師,但Google重定向到這個(部分)不正確的接受答案,所以我認為值得糾正它。

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