iptables 輸入、輸出、轉發
好的,我昨天開始研究網路,只是設置了我的 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
(預設行為是丟棄或拒絕)
請注意,在許多客戶端上,您實際上需要相反的設置:允許
new
和established
在 OUTPUT 上(允許您自己連接到外部世界),並且established
只允許在 INPUT 上(以保護自己免受不必要的連接嘗試)。PS:我在這裡玩死靈法師,但Google重定向到這個(部分)不正確的接受答案,所以我認為值得糾正它。