我试图允许ssh访问另一个子网中的计算机防火墙后面的计算机。 防火墙后面的计算机在10.66.1.1/255.255.0.0,而另一台计算机在10.99.1.1/255.0.0.0。
我试图添加下面的规则到iptables,但我仍然无法访问防火墙的计算机。
iptables --append INPUT --match tcp --protocol tcp --src 10.99.1.1 --sport 22 --dst 10.66.1.1 --dport 22 --jump ACCEPT
删除 – 运动--sport 22
源端口是随机的。
见解释: https : //stackoverflow.com/questions/30616527/are-ssh-destination-and-source-ports-identical-symmetric-ports
解答:
删除规则中的源端口,您将拥有一条规则:
iptables -A INPUT -p tcp -s 10.99.1.1 -d 10.66.1.1 -m tcp --dport 22 -j ACCEPT
说明:
首先我们假定没有路由问题,但只有防火墙configuration。
计算机10.99.1.1(客户端)要在10.66.1.1(服务器)上打开一个SSH会话。
服务器必须:
iptables -A INPUT -p tcp -s 10.99.1.1 -m tcp --dport 22 -j ACCEPT
中间防火墙应该有一个iptable规则,如:
iptables -A INPUT -p tcp -s 10.99.1.1 -d 10.66.1.1 -m tcp --dport 22 -j ACCEPT
您提交的错误是指定源端口。 只有服务器上的目标端口是必需的。
客户端不使用22端口作为SSH连接的源端口。 客户端向服务器请求在端口22上的新的ssh会话,但是使用本地随机端口。
你可以用netstat -taupenl|grep ':22'来检查,你应该看看:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 11242 540 / sshd tcp 0 0 ip.server:22 ip.client:35332 ESTABLISHED 0 570915 12917/0
第一行匹配ssh服务器的侦听端口,第二行匹配当前客户端的ssh连接,你可以看到已经使用的端口,22为服务器,35332为客户端。
[Client]:35332 <----> [Server]:22
由于客户端端口根据客户端的可用性而被随机使用,因此您不应指定源端口。
如果子网掩码真的像你在你的文章中描述的那样,尤其是10.99.1.1/255.0.0.0 ,你不能对IPTables做任何事情。
255.0.0.0的子网掩码告诉计算机,每个以10.开头的IP地址与计算机本身在同一个L2广播域中。 这意味着10.99.1.1将尝试直接在同一networking上发送所有去往10.66.1.1数据包,而不尝试任何路由。
同时,由于10.66.1.1具有networking掩码255.255.0.0 ,来自该计算机的数据包将被路由到10.99.1.1 。
您需要先修复您的路由。
你必须定义屏蔽位:
iptables --append INPUT --match tcp --protocol tcp --src 10.99.1.0/8 --dport 22 --jump ACCEPT