iptables 配置以允许从另一个子网访问

iptables 配置以允许从另一个子网访问

我正在尝试允许另一个子网中的计算机通过 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

答案1

答案2

解决方案 :

删除规则中的源端口,您将得到如下规则:

iptables -A INPUT -p tcp -s 10.99.1.1 -d 10.66.1.1 -m tcp --dport 22 -j ACCEPT

解释:

首先,我们假设没有路由问题,只有防火墙配置。

计算机 10.99.1.1(客户端)想要在 10.66.1.1(服务器)上打开 SSH 会话。

服务器必须:

  • 拥有一个可操作且配置好的 ssh 服务器
  • 让防火墙打开 SSH 端口(默认为 22):

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:* 侦听 0 11242 540/sshd
tcp 0 0 ip.服务器:22 ip.客户端:35332 已建立 0 570915 12917/0

第一行匹配ssh服务器的监听端口,第二行匹配当前与客户端的ssh连接,你可以看到使用的端口,服务器的端口是22,客户端的端口是35332。

[Client]:35332 <----> [Server]:22

由于客户端端口是根据客户端的可用性随机使用的,因此您不应指定源端口。

答案3

如果子网掩码确实像您在帖子中描述的那样,尤其是10.99.1.1/255.0.0.0,那么您无法使用 IPTables 对此做任何事情。

的子网掩码255.0.0.0告诉计算机,以 开头的每个 IP 地址都10.与计算机本身位于同一个 L2 广播域中。这意味着10.99.1.1将尝试将所有发往 的数据包10.66.1.1直接发送到同一个网络,而不尝试任何路由。

同时,由于10.66.1.1具有网络掩码255.255.0.0,来自该计算机的数据包将被路由到10.99.1.1

您需要先修复您的路线。

答案4

您必须定义掩码位:

iptables --append INPUT --match tcp --protocol tcp --src 10.99.1.0/8 --dport 22 --jump ACCEPT

相关内容