O firewall no servidor SSH está recusando a conexão do meu cliente (funciona bem sem o firewall ativado)

O firewall no servidor SSH está recusando a conexão do meu cliente (funciona bem sem o firewall ativado)

Tenho um servidor SSH ao qual gostaria de me conectar no meu Android.

Criei chaves SSH e tudo está funcionando bem. Meu celular se conecta ao meu servidor via SSH. Não há problema aí.

O problema começa quando eu habilito meu iptablesfirewall. Neste ponto, meu firewall está recusando conexões provenientes do meu Android.

No meu Android estou usando o Termux. Quando estou no Termux, posso encontrar meu endereço IP público com

curl -4 icanhazip.com

Diz que meu IP público para meu Android é x.x.121.3. Ofusquei o endereço aqui, mas na iptablesconfiguração real é exato. Esta é a configuração:

Chain INPUT (policy DROP 7530 packets, 338K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    3   180 ACCEPT     tcp  --  *      *       x.x.161.85           0.0.0.0/0            tcp dpt:22 state NEW
    1    60 ACCEPT     tcp  --  *      *       x.x.134.54           0.0.0.0/0            tcp dpt:22 state NEW
    0     0 ACCEPT     tcp  --  *      *       x.x.121.3            0.0.0.0/0            tcp dpt:22 state NEW
    0     0 ACCEPT     tcp  --  *      *       x.x.136.182          0.0.0.0/0            tcp dpt:22 state NEW
  857 4470K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
   12   986 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  650 81372 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0

O que estou fazendo de errado? Como permitir conexões SSH provenientes do meu celular?

Responder1

curl -4 icanhazip.comusa HTTP e porta 80 para recuperar dados. Você pode verificar isso executando curl -v -4 icanhazip.com.

Pode ser que o seu ISP manipule o tráfego, portanto, qualquer conexão que você fizer à porta 80 entre na Internet a partir de um endereço IP diferente da sua outra comunicação (incluindo SSH para a porta 22).

Por exemplo, eles podem rotear HTTP de muitos de seus clientes através de um único servidor proxy, para aproveitar o cache e reduzir a transferência de dados através do link além do proxy. O proxy é quase transparente: não requer configuração de sua parte e você "sente" como se não houvesse proxy; mas executa solicitações HTTP em nome de muitos clientes, usando seu endereço IP separado. Na verdade, todos os clientes aparecem para os servidores HTTP como provenientes deste único endereço IP.

Aconteça o que acontecer, provavelmente o endereço curlfornecido não é o endereço de origem usado pelas conexões SSH. O endereço que você permitiu no firewall não é o correto.

É uma sorte que você possa desativar o firewall e conectar-se com sucesso. Use este fato para descobrir o endereço IP correto:

  1. Desative o firewall temporariamente.
  2. Conecte-se pelo celular.
  3. Na sessão de shell resultante, execute echo "$SSH_CONNECTION".
  4. O primeiro endereço IP é aquele a partir do qual o servidor “pensa” que você se conecta.
  5. Se echo …não imprimir nada, verifique os logs no servidor para obter o IP real do cliente. No meu Debian, alguns comandos úteis são:

    sudo tail /var/log/auth.log
    journalctl _SYSTEMD_UNIT=ssh.service | tail
    

    Ou use alguma ferramenta ( lsof, ss,…) para ver as conexões estabelecidas e os endereços associados; a conexão SSH que você está usando deve estar lá. Não vou entrar em detalhes aqui sobre como restringir a lista e realmente encontrar essa conexão única.

Depois de descobrir o endereço correto, reconfigure o firewall para permitir o tráfego SSH proveniente dele.

informação relacionada