.png)
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 iptables
firewall. 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 iptables
configuraçã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.com
usa 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 curl
fornecido 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:
- Desative o firewall temporariamente.
- Conecte-se pelo celular.
- Na sessão de shell resultante, execute
echo "$SSH_CONNECTION"
. - O primeiro endereço IP é aquele a partir do qual o servidor “pensa” que você se conecta.
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.