Iptables: encaminhamento do tráfego SSH de acordo com o IP de destino

1

Eu tenho 2 servidores: um que recebe conexões de fora da minha LAN e outro (dentro da LAN) que eu pretendo acessar de fora via ssh. Existem pré-requisitos: não consigo acessar meus serviços de SSH com outra porta que não seja 22; é claro, o primeiro servidor também precisa ser acessível com o SSH.

Eu criei um alias de rede para o servidor de entrada:

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

Minha estratégia é: com o firewall, encaminhe todas as conexões SSH para o segundo endereço IP para o servidor dentro da LAN. Então, eu executei esses comandos para configurar o firewall (172.16.1.1 é o endereço IP do servidor dentro da LAN):

# 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

Quando tento conectar via SSH ao alias da rede (192.168.1.2), de uma máquina que tem acesso ao meu servidor "firewall", não funciona:

# ssh -v [email protected]
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

Na máquina que eu tento conectar, o log do SSH (/var/log/auth.log) não diz nada ...

Na sua opinião, qual é o problema? (Espero que eu tenha sido claro o suficiente ...)

EDITAR:

Eu registrei a atividade iptables (na cadeia FORWARD, para o protocolo tcp, com o nível de log Debug). Durante a conexão ssh tente, eu tenho essa saída (6 vezes o mesmo para uma tentativa de conexão):

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

No servidor de destino, os pacotes parecem ser bem recebidos: depois de ter configurado o registro no iptables também (o que aceita todos), eu tenho essa saída:

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

EDIT 2:

De acordo com os conselhos de Laurentiu Roescu, adicionei essas regras à minha máquina "central":

# 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
    
por Pierre-Yves Le Dévéhat 21.03.2016 / 09:37

1 resposta

0

As seguintes regras devem ser suficientes

# 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

Verifique se o encaminhamento foi ativado

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

Se você tem uma política rígida na cadeia FORWARD, você também deve permitir o encaminhamento para o 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
    
por 21.03.2016 / 12:22