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