IPTables redireciona 2 vezes

2

Existe uma maneira de fazer o seguinte com IPTables (Debian Squeeze): fazer com que os usuários se conectem a um servidor "host" usando um comando ssh comum e a porta 22 e, depois que a conexão for estabelecida, redirecione-os para outro endereço baseado na corda que eles usaram para se conectar em primeiro lugar.

Por exemplo, se estiver usando um servidor na nuvem que hospede servidores virtuais onde podemos usar endereços "fictícios" (para que o servidor host tenha um endereço público e os servidores convidados tenham seu próprio endereço privado), queremos ter usuários conecte-se ao servidor host usando uma porta externa comum e, em seguida, reencaminhe-os para um servidor virtual usando um endereço separado com base na cadeia de conexão ssh original que eles usam.

Para fazer a conexão inicial, precisamos usar uma porta ssh ... e, em seguida, redirecionar os usuários para seus servidores virtuais específicos depois que a conexão inicial for feita.

Qualquer ajuda apreciada!

    
por senrabdet 22.10.2012 / 14:19

2 respostas

2

Parece que você quer fazer o encaminhamento de porta.

Aqui está uma boa referência site

Editar

Por que, para tornar minha resposta mais relevante

Esta não é uma solução fácil, mas o mais próximo que você conseguirá é usar o encaminhamento de porta e atribuir portas específicas a pessoas específicas e rotear essas portas para máquinas específicas. Se você quisesse gastar o tempo criando sua própria aplicação, você poderia contornar este problema, mas isso levaria muito tempo.

Então, na sua caixa linux controlando o roteamento, adicione isto ao seu IPTABLES:

iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 22 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -i eth1 -j ACCEPT 

iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22

Observação: você não precisa identificar o --source 11.22.33.44 , mas é muito melhor se você fizer isso por motivos de segurança. Se as pessoas estão se conectando a partir de um endereço dinâmico, é melhor que você não o faça.

Então, o que o código IPTABLES que mostrei é, ele recebe solicitações de entrada para a porta 22 e as encaminha para 192.168.1.50:22. Então, se eu ssh [email protected]:22 , então eu seria encaminhado de server.com:22 para o servidor interno 192.168.1.50.22 .

Você teria que usar várias entradas para vários servidores. Então, por exemplo, para as portas 22-25:

# Port 22
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 22 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -i eth1 -j ACCEPT 
# Port 23
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 23 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 23 -i eth1 -j ACCEPT 
# Port 24
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 24 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 24 -i eth1 -j ACCEPT 
# Port 25
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 25 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 25 -i eth1 -j ACCEPT 

iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22
iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22
iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22
iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22

Dito isso, eu também esqueci que você provavelmente poderia fazer algo com perfis bash também. O que isso significa é que, se um usuário específico se conectar via SSH, ele será redirecionado pelo perfil, em vez da porta de conexão. Isso eliminaria a necessidade de fazer uma longa lista de regras IPTABLE e encaminhamento de porta.

Para editar o perfil bash de um usuário

vi /home/user/.bash_profile

Adicione esta linha ao final do arquivo

ssh 192.168.1.50

Assim, qualquer porta que você estiver usando para SSH, todos os usuários poderão usar a mesma porta e serão redirecionados automaticamente de server.com para o servidor interno 192.168.1.50 e não haverá necessidade de configurações IPTABLE ou de novos aplicativos , desde que o usuário exista no servidor de roteamento e no (s) servidor (es) interno (s).

Hmmm ... eu acho que estava enganado. Houve uma resposta fácil. Veio para mim depois de ler a resposta do mindthemonkey.

    
por 23.02.2013 / 08:13
1

O que você está tentando fazer é um pouco difícil de implementar na camada de rede, pois você precisaria de um balanceador de carga ou inspeção de pacotes da camada 7 (nível de aplicativo) para implementar as regras de encaminhamento. Como você está lidando com tráfego criptografado, você não pode simplesmente usar algo do lado de fora da conexão, porque não será capaz de ler a parte criptografada onde a informação que você quer é.

Como a CIA observou, o SSH inclui funcionalidade para encaminhar portas TCP de uma máquina local para a rede remota. Eu não tentei ter um servidor para impor uma porta encaminhada antes, pois o cliente geralmente especifica as regras de encaminhamento de porta. Você poderia pelo menos limitar quais portas um cliente pode usar, mas isso ainda requer conhecimento / configuração do lado do cliente. Essa resposta do SO fornece uma string authorized_keys para configurá-la.

Se você quer ter controle sobre o que acontece com os usuários, você pode fornecer a eles um shell no servidor ssh de entrada, que fornece apenas uma conexão com o servidor virtual por meio de chaves ou até mesmo um menu de servidores

client -> ruser@sshserver:/sbin/user_ssh_shell -> ruser@vserver:/bin/bash

Em seguida, em sshserver , crie um arquivo /bin/user_ssh_shell

#!/bin/sh
ssh -i /path/to/privatekey.rsa [email protected]

E faça com que os usuários descubram

usermod ruser -s /sbin/user_ssh_shell
    
por 23.02.2013 / 09:53