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

Iptables: пересылка SSH-трафика в соответствии с IP-адресом назначения

У меня есть 2 сервера: один, который принимает соединения извне моей локальной сети, а другой (внутри локальной сети), к которому я стремлюсь получить доступ извне через ssh. Есть предварительные условия: я не могу получить доступ к своим службам SSH через порт, отличный от 22; конечно, первый сервер тоже должен быть доступен по SSH.

Я создал сетевой псевдоним для входного сервера:

allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.254
        # DNS directives


allow-hotplug eth0:1
iface eth0:1 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.254
        # DNS directives

Моя стратегия такова: с брандмауэром перенаправляйте все SSH-соединения на второй IP-адрес на сервер внутри локальной сети. Итак, я выполнил эти команды для настройки брандмауэра (172.16.1.1 - IP-адрес сервера внутри локальной сети):

# iptables -A FORWARD -p tcp -d 172.16.1.1 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# iptables -v -t nat -A PREROUTING -i eth0 -d 192.168.1.2 -p tcp --dport 22 -j DNAT --to-destination 172.16.1.1:22

Когда я пытаюсь подключиться через SSH к сетевому псевдониму (192.168.1.2) с машины, у которой есть доступ к моему серверу «межсетевого экрана», это не работает:

# ssh -v root@192.168.1.2
OpenSSH_6.0p1 Debian-4+deb7u2, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 192.168.14.15 [192.168.14.15] port 22.
debug1: connect to address 192.168.14.15 port 22: Connection timed out
ssh: connect to host 192.168.14.15 port 22: Connection timed out

На машине, к которой я пытаюсь подключиться, журнал SSH (/var/log/auth.log) ничего не говорит ...

По вашему мнению, в чем проблема? (надеясь, что я был достаточно ясен ...)

РЕДАКТИРОВАТЬ :

Я зарегистрировал активность iptables (в цепочке FORWARD, для протокола tcp, с уровнем журнала Debug). Во время попытки подключения ssh у меня есть этот вывод (в 6 раз то же самое для одной попытки подключения):

Mar 21 10:15:53 server1 kernel: [241152.008342] [ ### IPTABLES ### ] IN=eth0 OUT=eth0 MAC=0f:a0:12:61:ac:b8:10:55:5e:90:a3:1a:38:01 SRC=192.168.1.3 DST=172.16.1.1 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48895 DF PROTO=TCP SPT=53677 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0

На целевом сервере пакеты, похоже, хорошо принимаются: после настройки ведения журнала на iptables (который принимает все) у меня есть такой вывод:

Mar 21 10:31:58 server2 kernel: [11214102.440239] [ ### IPTABLES ### ] IN=eth0 OUT= MAC=04:d0:5e:54:4a:8c:01:0d:24:1a:9f:d3:08:10 SRC=192.168.1.3 DST=172.16.1.1 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=21999 DF PROTO=TCP SPT=53681 DPT=22 WINDOW=0 RES=0x00 RST URGP=0

РЕДАКТИРОВАТЬ 2:

Согласно советам Лаурентиу Роеску, я добавил эти правила в свою "среднюю" машину:

# iptables -t nat -A POSTROUTING  -o eth0 -s 172.16.1.1 -p tcp -j SNAT --to-source 192.168.1.2
# iptables -A FORWARD -p tcp -s 172.16.1.1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Следующих правил должно быть достаточно

# iptables -t nat -I PREROUTING -p tcp -d 192.168.1.2 --dport 22 -j DNAT --to-destination 172.16.1.1:22
# iptables -t nat -I POSTROUTING -p tcp -d 172.16.1.1 --dport 22 -j SNAT --to-source 192.168.1.1

Убедитесь, что пересылка включена

# cat /proc/sys/net/ipv4/ip_forward
1

Если у вас строгая политика в цепочке FORWARD, вы также должны разрешить пересылку на 172.16.1.1

# iptables -I FORWARD -p tcp -d 172.16.1.1 --dport 22 -j ACCEPT
# iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT