Como obter o endereço IP remoto através de um túnel de encaminhamento de porta remota ssh?

1

Estou executando um servidor de teste por trás do NAT. Encaminhamos a porta remota 2222 de outro servidor IP público ( example.com ) para a porta 22 do servidor por trás do NAT ( localhost ) da seguinte forma.

autossh -f -N -i /root/.ssh/id_rsa -R 2222:localhost:22 [email protected]

Agora, o servidor ssh local por trás do NAT obtém apenas ::1 como endereço IP de todos os clientes, independentemente do endereço IP real do cliente.

A saída de w em localhost é assim.

 22:27:37 up  8:03,  2 users,  load average: 0.03, 0.03, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user tty7     :0               14:24    8:03m  1.27s  0.33s /usr/bin/lxsession -s LXDE-pi -e LXDE
user pts/0    ::1              22:27    1.00s  0.34s  0.03s w

/var/log/auth.log in localhost tem entrada como esta

Feb 28 22:27:32 localhost sshd[5201]: Accepted password for user from ::1 port 55168 ssh2

Agora, quero executar fail2ban ou csf firewall para bloquear endereços IP de spam. Então, eu quero o endereço IP real do cliente. Como posso fazer isso? Alguma regra de regravação iptables NAT é útil?

    
por Abhik Bose 02.03.2018 / 20:38

1 resposta

0

As mensagens do protocolo SSH para abrir uma sessão de encaminhamento do TCP incluem o endereço IP e a porta do cliente que conectado à porta encaminhada. O utilitário OpenSSH ssh apenas registra as informações e não faz mais nada com elas:

$ ssh -v -R 2048:localhost:22 localhost
...
debug1: client_request_forwarded_tcpip: listen localhost port 2048, originator ::1 port 49341
                                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^

Para fazer algo útil com as informações, você precisa seguir um destes procedimentos:

  • Execute ssh no modo de depuração e capture e analise a saída de depuração relevante.
  • Modifique o utilitário ssh para registrar as informações ou fazer o que for necessário com as informações.
  • Use um cliente ssh diferente ou escreva o seu próprio. Existem bibliotecas SSH para a maioria das linguagens de programação modernas.
por 02.03.2018 / 21:22