Назад | Перейти на главную страницу

Iptables не может разрешить ssh через второй интерфейс

У меня возникла проблема, поскольку я не могу выполнить исходящие соединения 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