SSH tunnel & Rsync através de dois proxy / firewalls

3

Screnario:

[internal_server_1]AA------AB[firewall_1]AC----+
          10.2.0.3-^        ^-10.2.0.2         |
                                            internet
          10.3.0.3-v        v-10.3.0.2         |
[internal_server_2]BA------BB[firewall_2]BC----+

Portas AC, BC tem endereços de internet válidos. Todos os sistemas executam o linux e têm acesso root a todos.

Precisa de segurança rsync internal_server_1: / algum / caminho em internal_server_2: / outro / caminho

A minha ideia é tornar o túnel seguro ssh entre dois firewalls, por ex. de firewall_1

firewall1# ssh -N -p 22 -c 3des user2@firewall_2.example.com -L xxx/10.3.0.3/xxxx

e depois rodará o rsync do internal_server_1 da mesma forma:

intenal1# rsync -az /some/path [email protected]:/another/path

Eu não sei

  • como fazer um túnel ssh correto para o rsync (quais portas precisam de túnel)
  • e para onde farei o rsync? (endereço comp remoto em caso de túnel ssh)

Alguma ideia ou apontador para um recurso útil da Internet para este caso?

thanx.

    
por cajwine 14.04.2012 / 10:35

4 respostas

1

Eu estou supondo que a porta SSH no firewall_2 ("BC" no seu diagrama) é acessível a partir do exterior. Os computadores na rede 1 (10.2.0. *) Podem acessar a Internet diretamente (ou seja, via NAT) ou apenas por proxy via firewall_1? Desde que você não especifique, eu assumirei não.

Provavelmente, a coisa mais simples a fazer é encapsular o rsync por SSH encapsulado por SSH (claramente, "mais simples" é relativo). Primeiro, construa o túnel externo executando isso no firewall_1:

firewall_1# ssh -N -p 22 -c 3des user2@firewall_2.example.com -L 10.2.0.2:5432:10.3.0.3:22

Observe que isso executa o terminal local (firewall_1) do encapsulamento ligado ao seu IP interno (10.2.0.2), em uma porta arbitrária (usei 5432).

Em seguida, do server_1, execute o rsync e use sua opção -e para executá-lo no SSH:

server_1# rsync -e "ssh -N -p5432 -c 3des" -a /local/path [email protected]:/remote/path

Este SSHes na porta 5432 no endereço IP 10.2.0.2, que o túnel externo encaminha para a porta 10.3.0.3 (server_2) 22 (SSH padrão).

BTW, se coordenar a configuração em vários computadores (ou seja, criar um túnel a partir do firewall_1 e usá-lo a partir do servidor_1) for difícil, avise-me; com um pouco mais de complexidade, é possível disparar tudo do server_1 com um único comando. Embora você deva ser capaz de configurar o túnel externo uma vez, e então simplesmente deixar isso ...

    
por 14.04.2012 / 18:06
2

O SSH tem uma opção chamada ProxyCommand que permite que você passe todo o tráfego SSH para um comando que pode ser executado em um host diferente. Provavelmente você pode encadear várias dessas coisas juntas para conseguir o que deseja fazer.

Se você puder se conectar diretamente do internal_server_1 ao firewall_2, poderá usar algo assim (por exemplo, como valor para -e se estiver usando o rsync):

ssh -o ProxyCommand="ssh -W %h:%p firewall_2" internal_server_2
    
por 14.04.2012 / 18:18
0

O rsync usa o SSH (porta 22) por padrão. Portanto, você precisa fazer o encaminhamento de porta em seus firewalls para poder rsync do servidor interno 1 para o servidor interno 2.

Isso pode ser feito usando iptables no firewall1 e no firewall2 da seguinte forma:

No firewall1

iptables -A POSTROUTING -s 10.2.0.3 -p tcp --dport 5022 -j SNAT --to-source AC.IP.addr.ess

No firewall2

iptables -A PREROUTING -s AC.IP.addr.ess -p tcp --dport 5022 -j DNAT --to-destination 10.3.0.3:22

Usando essas regras, você pode acessar o servidor interno2 do servidor interno1 usando a porta 5022 como:

internal_server1$ ssh -p 5022 [email protected]
    
por 14.04.2012 / 10:58
0

um comando completo testado é assim:

rsync -av --delete -e "ssh -o ProxyCommand='ssh -l username -W %h:%p jumphost-ip'" ./source_path/ username@internal-ip:/dest_path/
    
por 04.08.2014 / 13:41