У меня возникла проблема, поскольку я не могу выполнить исходящие соединения SSH с моими текущими правилами брандмауэра из моего второго интерфейса (eth2).
Машина, с которой я пытаюсь подключиться, имеет два интерфейса с именами 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
Но я явно не хочу этого делать. В основном в моем наборе правил есть проблема, но я не могу ее понять. Я думал, что наличие ACCEPT в политике OUTPUT для SSH (22) поможет, но это не удалось.
Я использую CentOS 6.5 x86_64 на VMWARE.
Вот проблемное правило:
245 18008 ACCEPT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Вы разрешаете только обратный входной трафик на интерфейсе eth1. Снимите это ограничение, и вы обнаружите, что ваш исходящий трафик на eth2 начинает работать.
Ваша проблема в том, что вы не разрешаете возвращать половину пакетов на этом интерфейсе. Пытаться
iptables -I INPUT 3 -i eth2 -m state --state ESTABLISHED -j ACCEPT