我遇到一个问题,因为我无法从我的第二个接口(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 上的传出流量开始正常工作。