Verbindungszeitlimit für SSH-Server

11

Ich versuche, openssh-server einzurichten, habe jedoch einige Verbindungsprobleme. Ich habe den Port auf einen nicht standardmäßigen Port (57757) geändert und dann meinen Router so eingestellt, dass er an diesen Port weiterleitet. In meinem LAN kann ich über Port 57757 problemlos in meinen Computer ssh, im WAN jedoch nicht.

Wenn ich mich außerhalb des LAN befinde und versuche, über einen falschen Port auf meinen Computer zuzugreifen, wird sofort die Meldung "Verbindung abgelehnt" angezeigt. Mit dem richtigen Port hängt es jedoch nur und dann Timeouts.

Was kann ich versuchen, um das Problem zu beheben? Ich habe eine Traceroute ausprobiert, aber sie hat mir nichts Nützliches gesagt.

BEARBEITEN: Ich stellte fest, dass mein Problem darin bestand, dass mein Router den internen Zugriff über WAN IP nicht unterstützte. Ich ging auf einen anderen Server und wieder hinein und es funktionierte gut.

Ci3
quelle
Haben Sie etwas außer dem Port geändert, den es abhört?
Guntbert
@guntbert Nein. Könnte es ein Problem mit Loopback sein?
Ci3
Loopback? Haben Sie es nur von der Maschine aus versucht? Haben Sie ein anderes Gerät in Ihrem LAN, von dem aus Sie testen können?
Guntbert
@guntbert Ich habe es mit einem anderen Computer versucht und es gibt keine Probleme im LAN.
Ci3
Meine Idee von "letzter Ausweg": sudo apt-get purge openssh-serverInstallieren Sie es dann neu (damit wir alles loswerden, was möglicherweise mit der Konfiguration passiert ist) und konfigurieren Sie Ihren Router neu, um 22-> 22 weiterzuleiten.
Guntbert

Antworten:

11

Normalerweise bedeutet dies, dass Sie den Port an die falsche IP-Adresse im LAN weitergeleitet haben.

Ihr NAT-Router empfängt eingehenden Datenverkehr an Port 57757 und sendet ihn an eine bestimmte IP-Adresse und einen bestimmten Port im LAN.

Standardmäßig filtert Ubuntu eingehende Verbindungsversuche mit einer Firewall nicht. Wenn Sie also die Firewall-Einstellungen in Ubuntu nicht geändert haben, wird beim Versuch, eine Verbindung zu einem beliebigen TCP-Port (1 bis 65535) herzustellen, entweder Folgendes ausgeführt:

  • Akzeptieren Sie die Verbindung, wenn der Port geöffnet ist
  • lehnen Sie den Verbindungsversuch ab, wenn der Port geschlossen ist

Wenn Ports von einer Firewall gefiltert wurden, erhalten Sie das, was Sie sehen - keine Antwort auf einen Verbindungsversuch. Aber:

  • es sei denn , Sie Firewall - Einstellungen geändert haben (zB ufw, iptables), werden keine Ports gefiltert, und
  • In jedem Fall können Sie eine Verbindung zu Port 22 im LAN herstellen, damit dieser geöffnet ist.

Wenn Sie einen Port mit einem NAT-Router an einen nicht vorhandenen Computer weiterleiten , sendet er eingehenden Datenverkehr an diesem Port an den nicht vorhandenen Computer, dh, er sendet ihn in ein Schwarzes Loch . es wird effektiv fallen gelassen.

Das verursacht genau die Situation, die Sie beschrieben haben. Sie können dies also höchstwahrscheinlich beheben, indem Sie sicherstellen, dass der Port an die richtige IP-Adresse im LAN weitergeleitet wird.

Wenn sich herausstellt, dass dies nicht das Problem war ...

... dann müssen Sie eine Fehlerbehebung durchführen.

  1. Ist der für die LAN-Seite angegebene Port korrekt? Angenommen, Sie haben die Konfiguration des SSH-Servers nicht geändert. Ist Port 57757 auf der WAN-Seite so eingestellt, dass er an Port 22 auf dem OpenSSH-Server weitergeleitet wird? (Möglicherweise möchten Sie dies noch einmal überprüfen.)

  2. Möglicherweise liegt ein Problem mit dem von Ihnen ausgewählten Port vor (57757). Versuchen Sie es mit einem anderen und sehen Sie, ob das besser funktioniert.

    (Wenn dies nicht der Fall ist und Sie mit diesen Anweisungen fortfahren, ändern Sie sie entweder zurück oder ersetzen Sie "57757" unten durch die neue Nummer.)

  3. Starten Sie den OpenSSH-Server neu. Dies kann hilfreich sein, wenn ein Netzwerkproblem vorliegt. Wenn dies nicht hilft, starten Sie auch den Router und das Kabel- / DSL- / ISDN-Modem neu.

    Wenn Sie aus irgendeinem Grund nicht alle drei Geräte neu starten können, empfehle ich, alles neu zu starten, was Sie können. Wenn Sie den OpenSSH-Dienst nicht neu starten können, können Sie zumindest den Dienst neu starten und (mit größerer Wahrscheinlichkeit das Problem beheben) die Schnittstelle herunterfahren und erneut aufrufen.

    So starten Sie den OpenSSH-Server neu:

    sudo restart ssh
    

    Um die Netzwerkschnittstelle herunterzufahren, müssen Sie zunächst herausfinden, auf welcher Schnittstelle sie sich befindet:

    ifconfig
    

    Bei einem Computer mit einer einzelnen Ethernet-Karte und / oder einer einzelnen drahtlosen Karte ist das Ethernet normalerweise eth0und das drahtlose ist wlan0.

    Wenn Sie die kabelgebundene Ethernet-Verbindung abbauen und neu starten möchten, führen Sie Folgendes aus:

    sudo ifdown eth0
    

    Dann renne:

    sudo ifup eth0
    

    Alternativ können Sie Folgendes ausführen:

    sudo ifconfig eth0 down
    

    Gefolgt von:

    sudo ifconfig eth0 up
    

    Wenn der Computer NetworkManager zum Verwalten der Schnittstelle verwendet, auf der der OpenSSH-Server ausgeführt wird, empfehle ich weiterhin, die oben genannten Methoden auszuprobieren. Sie können jedoch auch versuchen, die Verbindung in NetworkManager zu trennen und erneut herzustellen.

    Versuchen Sie bei einer Ethernet-Verbindung auch, das Kabel abzuziehen und wieder anzuschließen. Bei einer drahtlosen Verbindung versuchen Sie, es mit dem Hardware-Schalter (falls vorhanden) auszuschalten und wieder einzuschalten.

    Hier passiert etwas Seltsames, und nichts davon dauert sehr lange - es lohnt sich, gründlich zu sein, bevor Sie weitere sorgfältige Schritte zur Fehlerbehebung unternehmen.

  4. Wie versuchen Sie, von der WAN-Seite darauf zuzugreifen? Wenn Sie dazu einen Computer im LAN verwenden (nur eine Verbindung vom LAN zur WAN-IP Ihres Routers herstellen), wird dies nur für einige Router unterstützt. Schließlich besteht die Aufgabe eines Routers darin, den Verkehr zwischen der WAN- und der LAN-Seite und nicht den Verkehr von einer Seite zu sich selbst zu leiten. Die Unterstützung für die Verbindung zu weitergeleiteten Ports auf der WAN-IP aus dem LAN heraus ist eher die Ausnahme als die Regel, obwohl viele Heim- / Büro-Router über diese Funktion verfügen.

    Wenn Sie den Port also nicht von einem Host auf der WAN-Seite weiterleiten, sollten Sie dies tun. Ihre Optionen hierfür sind:

    • Verbinden Sie sich von der WAN-Seite. Dies funktioniert, wenn Sie dort Zugriff auf einen Computer haben, z. B. SSH-Zugriff auf einen Remote-Computer in der Schule, bei der Arbeit, im Haus eines Freundes oder ähnlichem.

    • Verbinden Sie den Testcomputer zwischen dem Router und dem Internetanbieter. Wenn Sie ein Kabel- / DSL- / ISDN-Modem mit einem Ethernet-Anschluss haben und Ihr Router daran angeschlossen ist, können Sie einen Switch an das Modem anschließen und den Router an den Switch anschließen. Schließen Sie einen Computer an den Switch an. Überprüfen Sie zunächst, ob dieser Computer nur über einen Internetzugang verfügt. Heutzutage bieten viele ISPs zwei oder mehr separate IP-Adressen an. Wenn dies nicht der Fall ist , rufen Sie die Setup-Seite Ihres Routers auf und überprüfen Sie die WAN-IP- und WAN-Subnetzmaske. Weisen Sie dann dem mit dem Switch verbundenen Computer, der sich im selben Subnetz befindet, statisch eine IP-Adresse zu.

      Diese Methode hat einige Nachteile. Es ist nervig! Außerdem kann ein ISP sein Netzwerk theoretisch falsch konfigurieren, damit der mit dem Switch verbundene Testcomputer auf das Internet zugreifen kann. (Es sei denn, Ihr ISP beabsichtigt, Sie mit mehr als einer WAN-IP und zu verbindenSie haben zufällig eine WAN-IP für den Testcomputer ausgewählt, den Ihr ISP Ihnen zugewiesen hat. Der Datenverkehr zwischen diesem Computer und einem echten WAN-Host sollte vom ISP blockiert / gelöscht werden. Aber einige ISPs haben seltsame Praktiken, also wer weiß?) Wenn dies passiert, wird es wahrscheinlich niemandem ernsthafte Probleme bereiten (und selbst wenn dies der Fall ist, haben Sie es nur für ein paar Minuten angeschlossen). Dies kann jedoch möglicherweise als Versuch angesehen werden, zusätzlichen Zugriff über die Grenzen Ihres Abonnements hinaus zu erhalten, und - was noch wichtiger ist - wenn ein anderer Benutzer dieselbe IP-Adresse hat, kann dies die Verbindung beeinträchtigen. Daher, wenn Sie diese Methode ausprobieren möchtenVersuchen Sie nicht, vom Testgerät aus auf das Internet zuzugreifen. Halten Sie sofort an, wenn Sie feststellen, dass das Testgerät auf das Internet zugreifen kann, und versuchen Sie dies überhaupt nicht, wenn dies von Ihrem Internetdienstanbieter verboten oder empfohlen wird. (Und verwenden Sie dies nicht, wenn die WAN-Seite Ihres Routers ein Office-LAN ist, ohne vorher Ihren Netzwerkadministrator zu konsultieren. Dies ist kein ISP und es wird nicht davon ausgegangen, dass Ressourcen bereitgestellt werden, um unerwünschten Zugriff zu verhindern.)

      Es gibt eine Variation dieser Technik, die manchmal angemessener ist. Ihr Router erhält wahrscheinlich seine Verbindungsinformationen - IP-Adresse, Subnetzmaske, IP-Adresse des Gateways (Routers) im WAN, das er verwendet, wenn er nicht weiß, wohin er etwas senden soll, und Informationen zu DNS-Servern - von Ihrem Router ISP über DHCP über das Kabel- / DSL- / ISDN-Modem. Aus diesem Grund muss der Router an das Modem angeschlossen sein, damit er die erforderliche Konfiguration erhält, damit die Ergebnisse der WAN-seitigen Tests aussagekräftig sind. Der Router speichert diese Informationen jedoch normalerweise, solange sie tatsächlich mit einem Netzwerk auf der WAN-Seite verbunden sind. So können Sie den Router, das Modem und den Testcomputer anschließen, aber dann schnell undTrennen Sie das Modem, bevor Sie mit dem Testgerät etwas anderes tun, als sicherzustellen, dass der Switch es als verbunden ansieht.

    • Verwenden Sie einen kostenlosen Dienst im Internet, um Ihre Ports zu testen. Da das Einfügen eines Testcomputers zwischen der WAN-Schnittstelle Ihres Routers und dem Internet (oben) sehr aufwändig ist - und ein Port als zugänglich angezeigt wird, auch wenn er nicht erreichbar ist, weil er von Ihrem Internetdienstanbieter blockiert wurde (was auch für die Verbindung mit dem Internetdienstanbieter gilt) WAN-IP des Routers von der LAN-Seite) - In der Regel ist es besser, einen webbasierten Port-Scan-Dienst zu verwenden.

      Es gibt viele Port-Scan-Dienste. (Einige verwenden den Ausdruck "Überprüfen Sie Ihre Firewall" mit der Idee, dass die meisten Leute versuchen, den Zugriff zu blockieren, anstatt ihn zu erleichtern .) Dies ist einer. Wenn Sie sich entscheiden , dass man verwenden, klicken Sie auf Gehen , 57757 in das Textfeld ein, und klicken Sie auf Verwenden angegebene benutzerdefinierte Port - Probe . Für die Zwecke des Erhaltens eines Server ausgeführt werden , Sie wollen es als „offen“ . "Geschlossen" bedeutet, dass auf den Port zugegriffen werden kann, der Server jedoch nicht ausgeführt wird (und daher der Verbindungsversuch abgelehnt wurde). "Stealth" bedeutet, dass auf den Port nicht zugegriffen werden konnte - es ist, als ob sich dort kein Computer befindet (oder als ob der Port weitergeleitet würde, wo kein Computer vorhanden ist).

  5. OK, Sie haben also festgestellt, dass das Internet wirklich nicht zugänglich ist. Möglicherweise können Sie es scannen (idealerweise von der WAN-Seite), um Details zu erhalten, obwohl dies häufig keine hilfreichen Informationen liefert.

    Wenn Sie dies tun möchten, können Sie auf der WAN-Seite Folgendes ausführen:

    sudo nmap -sS -sV -p57757 -vv WAN-IP

    Wenn der Port als gefiltert angezeigt wird, bestätigt dies, dass dort gesendete Pakete wahrscheinlich nirgendwo hingehen (oder auf dem Weg blockiert / verworfen werden).

  6. Es lohnt sich zu überprüfen, ob das Problem darauf zurückzuführen ist, dass sich der dem WAN zugängliche Port von dem Port unterscheidet, den der Server tatsächlich überwacht. Wenn Sie Port 55757 im WAN an Port 22 auf dem LAN-Computer weiterleiten, sollte dies einwandfrei funktionieren, aber möglicherweise wird irgendwo (auf dem Server, dem Client) davon ausgegangen, dass die Portnummer aus Sicht des Servers und des Clients identisch ist.

    Vermutlich können Sie Port 22 nicht über den Router weiterleiten. Vielleicht blockiert Ihr ISP diesen Port. Aber wenn du das kannst, mach das!

    Andernfalls können Sie den OpenSSH-Server dazu bringen, Port 57757 tatsächlich abzuhören.

    Sichern Sie dazu die Serverkonfigurationsdatei:

    cd /etc/ssh
    sudo cp sshd_config sshd_config.old
    

    Dann bearbeiten Sie es:

    gksu gedit sshd_config
    

    Oder verwenden Sie einen Konsolentexteditor, wenn der Computer keine grafische Benutzeroberfläche hat:

    sudo nano -w sshd_config
    

    Am oberen Rand der Datei wird dieser Textblock angezeigt:

    # What ports, IPs and protocols we listen for
    Port 22
    # Use these options to restrict which interfaces/protocols sshd will bind to
    #ListenAddress ::
    #ListenAddress 0.0.0.0
    Protocol 2
    # HostKeys for protocol version 2
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    #Privilege Separation is turned on for security
    UsePrivilegeSeparation yes
    

    Ändern Sie einfach die Port 22Zeile oben, um Port 57757stattdessen zu sagen .

    • Sie können einen Port hinzufügen, anstatt ihn zu ändern. Ich empfehle jedoch, mit der einfachsten effektiven Konfiguration zu testen.

      Sehen Sie man sshd_configfür weitere Informationen über den OpenSSH - Server zu konfigurieren.

    Speichern Sie die Datei, beenden Sie den Texteditor und starten Sie den SSH-Server neu mit:

    sudo restart ssh
    

    Ändern Sie nun den Port Forward am Router, sodass Port 57757 an Port 57757 (nicht 22) auf dem OpenSSH-Server weitergeleitet wird, und prüfen Sie, ob über das Internet auf ihn zugegriffen werden kann.

  7. Wenn es immer noch nicht funktioniert, prüfen Sie, ob die Ubuntu-Firewall möglicherweise tatsächlich Datenverkehr blockiert, der von außerhalb des LAN stammt.

    (Dies ist unwahrscheinlich, wenn Sie es nicht selbst auf diese Weise konfiguriert haben. Wenn jedoch alle Einstellungen korrekt sind und keiner der oben genannten Schritte etwas über das Problem aussagt, sollten Sie dies überprüfen.)

    Lauf:

    sudo iptables -L
    

    In Ubuntu sieht die Ausgabe standardmäßig folgendermaßen aus:

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    

    Dies ist eine einfache zulässige Richtlinie, die im Wesentlichen dem Ausführen einer Firewall entspricht. (Wenn das Netfilter-Firewall-Modul nicht in Ihren Kernel kompiliert worden wäre, würde sich Ihr System genauso verhalten wie bei den obigen Einstellungen, obwohl der iptablesBefehl, der die netfilterEinstellungen abfragt , natürlich nicht funktionieren würde.)

    Wenn Ihre Konfiguration nicht so aussieht, lesen Sie, man iptablesum herauszufinden, was sie tun, und / oder bearbeiten Sie Ihre Frage (oder, wenn Sie eine andere Person mit einem ähnlichen Problem sind, lesen Sie eine neue Frage), um sie einzuschließen Sie. Bitte beachten Sie, dass Ihre iptablesRegeln möglicherweise vertrauliche Informationen zu Ihrer Konfiguration enthalten können. In der Praxis ist dies normalerweise nicht der Fall - mit der möglichen Ausnahme von Regeln für bestimmte blockierte Hosts oder wenn Ihre Konfiguration sehr schlecht / unsicher ist - normalerweise die Nützlichkeit dieser Informationen für einen Angreifer, insbesondere für einen eingeschalteten Computer Ein Heim- / Büro-LAN hinter einem NAT-Router ist minimal.

Eliah Kagan
quelle
1

Da es in Ihrem LAN funktioniert, scheint Ihre Einrichtung des Servers korrekt zu sein. Sie müssen Ihren Router anweisen, von dem Port, den Sie außen verwenden möchten, an Port 57757 auf Ihrem Computer weiterzuleiten .
A traceroutenützt in diesem Fall nichts.

guntbert
quelle
Okay, ich dachte, die Maschinenseite wäre okay. Ja, ich habe meinen Router so eingestellt, dass er 57757 an 22 weiterleitet ... aber ich habe das gleiche Problem. sshd_config wird ebenfalls an Port 22 gesetzt.
Ci3
Das sollte wahrscheinlich sein: "Der Port, den Sie außen verwenden möchten (z. B. 57757 ), um Port 22 auf Ihrem Computer zu portieren ." Dies ist die Adresse des öffentlichen Ports, für die Sie eine Verschleierung benötigen.
David6
In diesem Fall nicht korrekt - wenn ich Chris 'Frage verstanden habe
Guntbert