IPTables Reroute o SSH baseado na corda da conexão?

1

Estamos usando um servidor de nuvem (Debian Squeeze) em que as portas públicas em uma rota IP pública trafegam para servidores internos. Nós estamos procurando uma maneira de usar IPTables e ssh onde baseado em alguma parte da string de conexão ssh (ou algo ao longo destas linhas) o iptables irá redirecionar a conexão ssh para o servidor interno "direito". Isso nos permitiria usar uma porta pública comum e, em seguida, redirecionar as conexões ssh para servidores individuais.

Assim, por exemplo, esperamos fazer algo como o seguinte:

  • o usuário emite conexão ssh (criptografia de chave pública) como ssh -X -v -p xxx usuá[email protected] mas talvez adicione algo na string para o iptables usar
  • O iptables usa alguma parte dessa string ou alguns meios para redirecionar a conexão para um servidor interno usando algo como

    iptables -t nat -A PREROUTING ! -s xxx.xxx.xxx.0/24 -m tcp -p tcp --dport $EXTPORT -j DNAT --to-destination $HOST:$INTPORT
    

    .... onde $HOST é o ip interno de um servidor, $EXTPORT é a porta voltada para o público comum e $INTPORT é a porta do servidor interno.

Parece que o aspecto "string" do iptables não faz o que queremos.

No momento, podemos rotear com base na sintaxe da tabela IP que usamos, mas contamos com uma porta pública separada para cada servidor e esperamos usar uma porta pública comum e redirecionar para servidores internos específicos com base em alguns parte da cadeia de conexão ssh ou algum outro meio.

Alguma sugestão? Obrigado!

    
por senrabdet 03.11.2012 / 14:52

1 resposta

2

Isso não é possível. A comunicação entre você e o servidor ssh é totalmente criptografada, o iptables não tem como olhar dentro do pacote e, portanto, só pode corresponder com base no IP / port no lado do envio e do recebimento.

Eu configuraria portas diferentes na máquina acessível ao público e as encaminharia via iptables para as máquinas em segundo plano e faria algo parecido com isso na configuração do seu cliente ssh (~ / .ssh / config):

Host machineA
        HostName your-public-machine
        Port 12341

Host machineB
        HostName your-public-machine
        Port 12342

Host machineC
        HostName your-public-machine
        Port 12343

Com essa configuração, você pode executar apenas ssh machineA , ssh machineB ou ssh machineC e acessar a máquina correta.

    
por 03.11.2012 / 17:33