Encaminhar o SSH para outro host

3

Eu tenho um servidor Ubuntu que é visível da internet, vamos chamá-lo de "jumper". E este servidor tem esse nome na verdade porque eu preciso que sempre que um usuário SSH este servidor, ele salte (ou encaminhe ou redirecione) a conexão SSH para outro servidor (o que não é visível da internet) para que o SSH seja realmente para o servidor invisível . Também preciso fazer isso exatamente com o iptables.


O que eu tentei (no jumper)

iptables -t nat -A PREROUTING -d ${jumper_ip} -p tcp --dport 22 -j DNAT --to-destination ${invisibleserver_ip}
iptables -t nat -A POSTROUTING -s ${invisibleserver_ip} -p tcp --sport 22 -j SNAT --to-source ${jumper_ip}
iptables -A FORWARD -p tcp ${invisibleserver_ip} --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Sim, o encaminhamento de IP está ativado no Kernel.

O problema

Quando eu faço SSH, o host jumper não acontece nada. "Conection timed out" sai. Alguma idéia?
Obrigado a todos por suas respostas.

    
por sant016 29.04.2016 / 16:32

1 resposta

1

Sua primeira regra iptables é correta e suficiente para realizar o trabalho. Eu consideraria especificar explicitamente uma interface de entrada como:

iptables -t nat -A PREROUTING -i ${wan_if} -d ${jumper_ip} -p tcp --dport 22 -j DNAT --to-destination ${invisibleserver_ip}

Mas isso não é necessário. Sua regra POSTROUTING é um pouco falha. Eu não acho que isso vai quebrar nada. Mas é melhor removê-lo. É aplicável quando o cliente está rodando na porta 22, o que não é o caso do SSH.

A regra FORWARD é totalmente redundante, a menos que você tenha feito outras alterações, sobre as quais não nos contou. A política padrão é ACCEPT . Uma única regra com ACCEPT e uma política padrão de ACCEPT resultará na aceitação de todos os pacotes, independentemente de o pacote corresponder aos critérios. Assim, você pode simplesmente remover essa regra e confiar na política ACCEPT padrão.

Nada disso explica o que está causando o problema. As razões para isso são duas. Você não explicou o problema que está vendo e não mencionou todos os detalhes relevantes da sua configuração para identificar a verdadeira razão.

No entanto, posso sugerir algumas hipóteses:

  • Você não habilitou o encaminhamento de pacotes.
  • Seu roteamento é configurado de forma que apenas os pacotes em uma direção passem pelo seu servidor de salto.
  • Os pacotes estão sendo descartados por outras regras, que você omitiu da sua pergunta.

Primeiro, verifique se o encaminhamento está ativado, digitando:

cat /proc/sys/net/ipv4/ip_forward

Se estiver desativado, você pode ativá-lo digitando:

echo 1 >/proc/sys/net/ipv4/ip_forward

E se isso resolver o problema, você poderá torná-lo permanente atualizando /etc/sysctl.conf .

Se o seu roteamento estiver configurado de forma que os pacotes de retorno não sejam roteados através do seu host de salto, você poderá adicionar uma regra SNAT à sua corrente POSTROUTING que precisa aplicar aos mesmos pacotes SYN que foram manipulados pelo seu DNAT rule.

Se você quiser saber sobre possíveis desvantagens de usar DNAT para isso e algumas alternativas. Eu tenho respondido uma pergunta semelhante no passado.

Se o problema for causado por regras adicionais do iptables, que você não mencionou na sua pergunta, será necessário remover ou corrigir essas regras. Obviamente, não posso fornecer mais detalhes sobre isso sem conhecer o conteúdo e o propósito dessas regras - se houver.

    
por 29.04.2016 / 16:55