Linux
iptables 和 ssh
我正在執行 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 規則的時候,考慮一下順序:先插入那些你想允許的東西,然後拒絕其餘的。