Linux

iptables 和 ssh

  • August 28, 2015

我正在執行 Arch Linux,並且當我在區域網路之外時,我有一個正在執行的 SSH 守護程序來訪問我的機器。我可以進行連接,但 iptables 一直阻止 SSH 守護程序,所以只有關閉防火牆才能連接。我在埠 5000 上執行 SSH。

我的 iptables 規則

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -j ACCEPT 
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -j REJECT --reject-with tcp-reset 
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable 
-A INPUT -j REJECT --reject-with icmp-proto-unreachable 

# SSH
-A INPUT -p tcp --dport 22 -j REJECT --reject-with icmp-host-unreachable
-A INPUT -p tcp --dport 5000 -j ACCEPT

# VNC
-A INPUT -p tcp --dport 5001 -j REJECT --reject-with icmp-host-unreachable
-A INPUT -p tcp -i lo -s 127.0.0.1/32 -d 127.0.0.1/32 --dport 5001 -j ACCEPT

# HTTP/HTTPS
-A INPUT -p tcp --dport 80 -j REJECT --reject-with icmp-host-unreachable
-A INPUT -p tcp --dport 8080 -j REJECT --reject-with icmp-host-unreachable
-A INPUT -p tcp --dport 443 -j REJECT --reject-with icmp-host-unreachable

-A INPUT -p tcp -i lo -s 127.0.0.1/32 -d 127.0.0.1/32 --dport 80 -j ACCEPT

您必須重新排序 iptables 規則。

您無法連接到您的 sshd,因為規則是逐行檢查的。而且您已經告訴 iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset= 拒絕所有 tcp 流量。即使你後來告訴他接受到埠 5000 的連接也沒關係 - 你已經拒絕了這些連接。

所以當你寫 iptables 規則的時候,考慮一下順序:先插入那些你想允許的東西,然後拒絕其餘的。

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