iptables 和 ssh

iptables 和 ssh

我正在运行 Arch Linux,并且有一个正在运行的 SSH 守护进程,可以在我位于 LAN 之外时访问我的计算机。我可以连接,但 iptables 一直阻止 SSH Daemon,所以只有关闭防火墙才能连接。我在端口 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

答案1

您必须重新排序 iptables 规则。

您无法连接到 sshd,因为规则是逐行检查的。并且您已经告诉 iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset= 拒绝所有 tcp 流量。即使您后来告诉他接受端口 5000 的连接也没关系 - 您已经拒绝了这些连接。

因此,当您编写 iptables 规则时,请考虑顺序:首先插入您想要允许的内容,然后拒绝其余内容。

相关内容