.png)
Ich habe einen SSH-Server, mit dem ich mich von meinem Android aus verbinden möchte.
Ich habe SSH-Schlüssel erstellt und alles funktioniert einwandfrei. Mein Mobiltelefon stellt über SSH eine Verbindung zu meinem Server her. Kein Problem.
Das Problem beginnt, wenn ich meine Firewall aktiviere iptables
. An diesem Punkt lehnt meine Firewall Verbindungen von meinem Android ab.
Auf meinem Android verwende ich Termux. In Termux kann ich meine öffentliche IP-Adresse finden mit
curl -4 icanhazip.com
Es heißt, meine öffentliche IP für mein Android ist x.x.121.3
. Ich habe die Adresse hier verschleiert, aber in der tatsächlichen iptables
Konfiguration ist sie genau. Dies ist die Konfiguration:
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
Was mache ich falsch? Wie kann ich SSH-Verbindungen von meinem Mobiltelefon aus zulassen?
Antwort1
curl -4 icanhazip.com
verwendet HTTP und Port 80, um Daten abzurufen. Sie können dies überprüfen, indem Sie ausführen curl -v -4 icanhazip.com
.
Möglicherweise manipuliert Ihr ISP den Datenverkehr, sodass jede Verbindung, die Sie zu Port 80 herstellen, von einer anderen IP-Adresse ins Internet gelangt als Ihre übrige Kommunikation (einschließlich SSH zu Port 22).
Beispielsweise können sie HTTP von vielen ihrer Clients über einen einzigen Proxyserver leiten, um den Cache zu nutzen und den Datentransfer über die Verbindung jenseits des Proxys zu reduzieren. Der Proxy ist nahezu transparent: Er erfordert keine Konfiguration auf Ihrer Seite und Sie „fühlen“ sich, als ob es keinen Proxy gäbe; aber er führt HTTP-Anfragen im Namen vieler Clients aus und verwendet dabei seine eigene IP-Adresse. Tatsächlich erscheinen alle Clients für HTTP-Server so, als kämen sie von dieser einzigen IP-Adresse.
Was auch immer passiert, wahrscheinlich ist die Adresse, curl
die Sie erhalten haben, nicht die Quelladresse, die Ihre SSH-Verbindungen verwenden. Die Adresse, die Sie in der Firewall zugelassen haben, ist nicht die richtige.
Zum Glück können Sie die Firewall deaktivieren und eine erfolgreiche Verbindung herstellen. Nutzen Sie diese Tatsache, um die richtige IP-Adresse zu ermitteln:
- Deaktivieren Sie die Firewall vorübergehend.
- Verbindung vom Mobiltelefon aus herstellen.
- Führen Sie in der resultierenden Shell-Sitzung aus
echo "$SSH_CONNECTION"
. - Der Server „denkt“, dass Sie von der ersten IP-Adresse aus eine Verbindung herstellen.
Wenn
echo …
nichts gedruckt wird, überprüfen Sie die Protokolle auf dem Server auf die tatsächliche IP des Clients. In meinem Debian sind einige nützliche Befehle:sudo tail /var/log/auth.log journalctl _SYSTEMD_UNIT=ssh.service | tail
Oder verwenden Sie ein Tool (
lsof
,ss
, …), um die hergestellten Verbindungen und die zugehörigen Adressen anzuzeigen. Die von Ihnen verwendete SSH-Verbindung sollte dort angezeigt werden. Ich werde hier nicht näher darauf eingehen, wie man die Liste eingrenzt und diese einzelne Verbindung tatsächlich findet.
Nachdem Sie die richtige Adresse gefunden haben, konfigurieren Sie die Firewall neu, um von ihr ausgehenden SSH-Verkehr zuzulassen.