Iptables 无法通过第二个接口允许 ssh

Iptables 无法通过第二个接口允许 ssh

我遇到一个问题,因为我无法从我的第二个接口(eth2)使用我当前的防火墙规则建立 SSH 传出连接。

我尝试连接的机器有两个接口,分别名为 eth1 和 eth2。它们的 IP 地址分别为 192.168.0.18(掩码 255.255.255.0)和 10.30.25.1(掩码 255.255.255.248)。

这是我的 iptables 规则集的输出:

# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source          destination
  26  4970 ACCEPT     all  --  lo     *       0.0.0.0/0       0.0.0.0/0
 245 18008 ACCEPT     tcp  --  eth1   *       0.0.0.0/0       0.0.0.0/0     state RELATED,ESTABLISHED
   0     0 ACCEPT     udp  --  eth1   *       0.0.0.0/0       0.0.0.0/0     udp spt:53 dpts:1024:65535
   0     0 ACCEPT     tcp  --  eth1   *       192.168.0.0/24  0.0.0.0/0     tcp spts:1024:65535 dpt:22 state NEW
  82 12248 DROP       all  --  *      *       0.0.0.0/0       0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source          destination
  0     0 ACCEPT     all  --  eth2   eth1    0.0.0.0/0       0.0.0.0/0     state RELATED,ESTABLISHED
  0     0 ACCEPT     all  --  eth1   eth2    0.0.0.0/0       0.0.0.0/0     state NEW,RELATED,ESTABLISHED
  0     0 DROP       all  --  *      *       0.0.0.0/0       0.0.0.0/0

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source          destination
 26  4970 ACCEPT     all  --  *      lo      0.0.0.0/0       0.0.0.0/0
173 20104 ACCEPT     all  --  *      eth1    0.0.0.0/0       0.0.0.0/0     state RELATED,ESTABLISHED
  5   300 ACCEPT     all  --  *      eth2    0.0.0.0/0       0.0.0.0/0     state RELATED,ESTABLISHED
  0     0 ACCEPT     udp  --  *      eth1    0.0.0.0/0       0.0.0.0/0     udp spts:1024:65535 dpt:53
  0     0 ACCEPT     tcp  --  *      eth1    0.0.0.0/0       0.0.0.0/0     tcp dpt:22
  1    60 ACCEPT     tcp  --  *      eth2    0.0.0.0/0       0.0.0.0/0     tcp dpt:22
  7   564 DROP       all  --  *      *       0.0.0.0/0       0.0.0.0/0

使用此规则集,我能够从 192.168.0.18 (eth1) SSH 连接到 192.168.0.0/24 子网上的任何计算机,没有任何问题。但是,当我尝试通过另一个接口 (eth2 10.30.25.1) 连接到 10.30.25.0/29 上的计算机时,它无法建立连接。

然后我尝试刷新规则并执行如下操作:

iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
iptalbes -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables-save

允许一切,它工作正常,这意味着目标机器已启动并接受连接,并且我的路由表应该没有问题。

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.30.25.0      0.0.0.0         255.255.255.248 U     0      0        0 eth2
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth2
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth1

但我显然不想这样做。基本上我的规则集有问题,但我无法弄清楚。我以为在 SSH (22) 的 OUTPUT 策略中使用 ACCEPT 可以解决问题,但失败了。

我在 VMWARE 上运行 CentOS 6.5 x86_64。

答案1

您的问题是您不允许该接口上的半返回数据包。请尝试

iptables -I INPUT 3 -i eth2 -m state --state ESTABLISHED -j ACCEPT

答案2

有问题的规则如下:

 245 18008 ACCEPT     tcp  --  eth1   *       0.0.0.0/0       0.0.0.0/0     state RELATED,ESTABLISHED

您仅允许在 eth1 接口上返回输入流量。删除此限制,您会发现 eth2 上的传出流量开始正常工作。

相关内容