Limit czasu połączenia dla serwera ssh

11

Próbuję skonfigurować openssh-server, ale mam pewne problemy z połączeniem. Zmieniłem port na coś niestandardowego (57757), a następnie ustawiłem router na przekazywanie do tego portu. W mojej sieci LAN mogę ssh na mojej maszynie dobrze używając portu 57757, ale nie mogę tego zrobić w sieci WAN.

Jeśli jestem poza siecią LAN i próbuję uzyskać dostęp do mojego komputera przez niewłaściwy port, natychmiast pojawia się komunikat „odmowa połączenia”. Jednak przy odpowiednim porcie po prostu zawiesza się, a następnie kończy się limit czasu.

Co mogę spróbować debugować problem? Próbowałem traceroute, ale nie powiedział mi nic przydatnego.

EDYCJA: Zdałem sobie sprawę, że moim problemem było to, że mój router nie obsługiwał dostępu do niego przez WAN IP wewnętrznie. Połączyłem się z innym serwerem, wróciłem i działało dobrze.

Ci3
źródło
Czy zmieniłeś coś poza portem, na którym nasłuchuje?
guntbert
@guntbert Nope. Czy to może być problem z pętlą zwrotną?
Ci3
sprzężenie zwrotne? czy próbowałeś tylko z samej maszyny? czy masz w swoim LANie inne urządzenie do testowania?
guntbert
@guntbert Wypróbowałem to na innym komputerze i nie ma żadnych problemów w sieci LAN.
Ci3
Mój pomysł na „ostatnią sudo apt-get purge openssh-serverdeskę ratunku”: następnie zainstaluj go ponownie (abyśmy pozbyli się wszystkiego, co mogło się zdarzyć przy konfiguracji) i ponownie skonfiguruj router, aby przekazywał 22-> 22.
guntbert

Odpowiedzi:

11

Zwykle oznacza to, że przekierowałeś port na niewłaściwy adres IP w sieci LAN.

Twój router NAT odbiera ruch przychodzący na porcie 57757 i wysyła go do określonego adresu IP i portu LAN.

Domyślnie Ubuntu nie filtruje przychodzących prób połączenia z zaporą. Tak więc, chyba że zmieniłeś ustawienia zapory w Ubuntu, próba otwarcia połączenia z dowolnym portem TCP, od 1 do 65535, albo:

  • zaakceptuj połączenie, jeśli port jest otwarty
  • odrzuć próbę połączenia, jeśli port jest zamknięty

Gdyby porty były filtrowane przez zaporę ogniową, dostaniesz to, co widzisz - bez odpowiedzi na próbę połączenia. Ale:

  • chyba że zmieniłeś ustawienia zapory (np. ufw, iptables), żadne porty nie są filtrowane, i
  • w każdym razie możesz podłączyć się do portu 22 w sieci LAN, więc jest on otwarty.

Gdy przekazujesz port do nieistniejącej maszyny z routerem NAT, wysyła on ruch przychodzący z tego portu do nieistniejącej maszyny, co oznacza, że ​​wysyła ją do czarnej dziury ; jest skutecznie upuszczony.

To powoduje dokładnie opisaną sytuację. Najprawdopodobniej możesz to naprawić, upewniając się, że port jest przekierowywany na właściwy adres IP w sieci LAN.

Jeśli okaże się, że to nie był problem ...

... wtedy będziesz musiał rozwiązać niektóre problemy.

  1. Czy port określony dla strony LAN jest prawidłowy? To znaczy, zakładając, że nie zmieniłeś konfiguracji serwera SSH, czy port 57757 po stronie WAN jest ustawiony na przekazywanie do portu 22 na serwerze OpenSSH? (Możesz to sprawdzić dwukrotnie).

  2. Może jest jakiś problem z wybranym portem (57757). Wypróbuj inny i sprawdź, czy to działa lepiej.

    (Jeśli nie, i postępujesz zgodnie z tymi instrukcjami, zmień go z powrotem lub zastąp „57757” poniżej nowym numerem).

  3. Spróbuj zrestartować serwer OpenSSH. Może to pomóc w przypadku problemu z siecią. Jeśli to nie pomoże, spróbuj zrestartować router i modem kablowy / DSL / ISDN.

    Jeśli z jakiegoś powodu nie możesz ponownie uruchomić wszystkich trzech urządzeń, zalecamy zrestartowanie wszystkiego, co możesz. Jeśli nie możesz zrestartować usługi OpenSSH, przynajmniej możesz zrestartować usługę i (bardziej prawdopodobne, że to naprawi) zdejmij interfejs i uruchom go ponownie.

    Aby zrestartować serwer OpenSSH:

    sudo restart ssh
    

    Aby obniżyć interfejs sieciowy, najpierw dowiedz się, na jakim interfejsie się on znajduje:

    ifconfig
    

    Zazwyczaj w przypadku urządzenia z pojedynczą kartą Ethernet i / lub pojedynczą kartą bezprzewodową Ethernet jest eth0i sieć bezprzewodowa jest wlan0.

    Jeśli przewodowe połączenie Ethernet jest tym, co chcesz zdjąć i uruchomić ponownie, uruchom:

    sudo ifdown eth0
    

    Następnie uruchomić:

    sudo ifup eth0
    

    Alternatywnie możesz uruchomić:

    sudo ifconfig eth0 down
    

    Śledzony przez:

    sudo ifconfig eth0 up
    

    Jeśli komputer używa NetworkManager do zarządzania interfejsem, na którym działa serwer OpenSSH, nadal zalecam wypróbowanie powyższych sposobów, ale możesz także spróbować rozłączyć się i ponownie połączyć w NetworkManager.

    W przypadku połączenia Ethernet spróbuj także odłączyć kabel i podłączyć go ponownie. W przypadku połączenia bezprzewodowego spróbuj go wyłączyć przełącznikiem sprzętowym (jeśli taki istnieje) i włącz go ponownie.

    Dzieje się tu coś dziwnego i nic z tego nie trwa bardzo długo - warto zachować ostrożność przed podjęciem bardziej żmudnych kroków rozwiązywania problemów.

  4. Jak próbujesz uzyskać do niego dostęp ze strony WAN? Jeśli używasz do tego maszyny w sieci LAN (tylko połączenie z sieci LAN do adresu WAN routera), jest to obsługiwane tylko w przypadku niektórych routerów. W końcu zadaniem routera jest kierowanie ruchem między stronami WAN i LAN, a nie kierowanie ruchem z jednej strony do siebie. Obsługa łączenia się z przekierowanymi portami w sieci WAN IP z sieci LAN jest w rzeczywistości raczej wyjątkiem niż regułą, chociaż wiele routerów domowych / biurowych ma tę funkcję.

    Więc jeśli nie testujesz portu przekierowującego z hosta po stronie WAN, powinieneś to zrobić. Dostępne są następujące opcje:

    • Połącz się ze strony WAN. Działa to, jeśli masz tam dostęp do komputera, na przykład dostęp SSH do zdalnego komputera w szkole, pracy, domu znajomego lub podobnym.

    • Podłączyć maszynę testową między routerem a co zapewnia jej połączenia z Internetem. Jeśli masz modem kablowy / DSL / ISDN z portem Ethernet i router jest do niego podłączony, możesz podłączyć przełącznik do modemu i podłączyć router do przełącznika. Podłącz komputer do przełącznika. Najpierw sprawdź, czy ta maszyna ma tylko dostęp do Internetu - obecnie wielu dostawców usług internetowych zapewnia dwa lub więcej oddzielnych adresów IP. Jeśli nie , przejdź do strony konfiguracji routera i sprawdź jego adres WAN IP i maskę podsieci WAN , a następnie statycznie przypisz adres IP do urządzenia podłączonego do przełącznika, które znajduje się w tej samej podsieci.

      Ta metoda ma pewne wady. To ból! Teoretycznie możliwe jest, że dostawca usług internetowych nieprawidłowo skonfiguruje swoją sieć, aby maszyna testowa podłączona do przełącznika mogła uzyskać dostęp do Internetu. (Chyba że intencją twojego dostawcy usług internetowych jest połączenie się z więcej niż jednym adresem WAN IP iakurat wybrałeś adres WAN IP dla maszyny testowej, którą przypisał ci twój dostawca usług internetowych, ruch między nim a prawdziwym hostem WAN powinien zostać zablokowany / odrzucony przez dostawcę usług internetowych. Ale niektórzy dostawcy usług internetowych mają dziwne praktyki, więc kto wie?) Jeśli tak się stanie, prawdopodobnie nie spowoduje nikomu poważnych problemów (a nawet gdyby tak było, masz połączenie tylko przez kilka minut). Jednak może to być potencjalnie postrzegane jako próba uzyskania dodatkowego dostępu poza granice subskrypcji, a - co ważniejsze - jeśli inny użytkownik ma ten sam adres IP, może przeszkadzać w ich połączeniu. Dlatego jeśli chcesz wypróbować tę metodę, nie próbuj uzyskiwać dostępu do Internetu z maszyny testowej, zatrzymaj się natychmiast, jeśli okaże się, że maszyna testowa ma dostęp do Internetu i nie próbuj w ogóle, jeśli jest to zabronione lub odradzane przez Twojego dostawcę usług internetowych. (I nie używaj tego, jeśli strona WAN routera jest biurową siecią LAN, bez uprzedniej konsultacji z administratorem sieci. To nie jest dostawca usług internetowych i nie ma założeń, że zasoby są zabezpieczone przed niepożądanym dostępem).

      Istnieje pewna odmiana tej techniki, która czasem jest bardziej odpowiednia. Router prawdopodobnie otrzymuje informacje o połączeniu - adres IP, maskę podsieci, adres IP bramy (routera) w sieci WAN, z której korzysta, gdy nie wie, gdzie coś wysłać, oraz informacje o serwerach DNS - z twojego ISP, przez DHCP, przez modem kablowy / DSL / ISDN. Dlatego musisz podłączyć router do modemu, aby uzyskać niezbędną konfigurację, aby wyniki testów po stronie sieci WAN były znaczące. Ale router zazwyczaj zapamiętuje te informacje, o ile faktycznie jest podłączony do sieci po stronie WAN. Możesz więc podłączyć router, modem i urządzenie testowe, ale potem szybko iprzed zrobieniem czegokolwiek z maszyną testową oprócz upewnienia się, że przełącznik widzi ją jako podłączoną , odłącz modem.

    • Skorzystaj z bezpłatnej usługi w Internecie, aby przetestować swoje porty. Ponieważ włożenie testowej maszyny między interfejs WAN routera a Internetem (powyżej) jest bardzo zaangażowane - i ponieważ pokaże port jako dostępny, nawet jeśli jest niedostępny z powodu zablokowania przez twojego usługodawcę internetowego (co jest również prawdą w przypadku łączenia się z routera WAN IP od strony sieci LAN) - zwykle lepiej jest skorzystać z internetowej usługi skanowania portów.

      Istnieje wiele usług skanowania portów. (Niektórzy mają frazę „sprawdź swoją zaporę ogniową” z myślą, że większość ludzi próbuje zablokować, a nie ułatwić dostęp.) To jest jedna. Jeśli zdecydujesz się go użyć, kliknij Kontynuuj , wpisz 57757 w polu tekstowym i kliknij Użyj określonej niestandardowej sondy portu . Aby serwer mógł działać, chcesz , aby był „otwarty”. „Zamknięty” oznacza, że ​​port jest dostępny, ale serwer nie działa (dlatego próba połączenia została odrzucona). „Stealth” oznacza, że ​​port był niedostępny - to tak, jakby nie było tam żadnej maszyny (lub jakby port był przekazywany tam, gdzie nie ma żadnej maszyny).

  5. OK, więc ustaliłeś, że tak naprawdę nie jest dostępny z Internetu. Potencjalnie możesz go zeskanować (najlepiej ze strony WAN), aby uzyskać szczegółowe informacje, choć często nie daje to przydatnych informacji.

    Jeśli chcesz to zrobić, po stronie WAN możesz uruchomić:

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

    Jeśli port jest wyświetlany jako przefiltrowany, oznacza to, że wysłane tam pakiety prawdopodobnie nigdzie nie idą (lub są blokowane / upuszczane po drodze).

  6. Warto sprawdzić, czy problem wynika z faktu, że port narażony na WAN różni się od portu, na którym serwer nasłuchuje. Przekazywanie portu 55757 w sieci WAN do portu 22 na maszynie LAN powinno sprawić, że wszystko będzie dobrze, ale może gdzieś (serwer, klient) coś zakłada, że ​​numer portu jest taki sam z perspektywy serwera i klienta.

    Prawdopodobnie nie można przekierować portu 22 przez router. Być może twój dostawca usług internetowych blokuje ten port. Ale jeśli możesz to zrobić, zrób to!

    W przeciwnym razie można zrobić serwer OpenSSH faktycznie nasłuchuje na porcie 57757.

    Aby to zrobić, wykonaj kopię zapasową pliku konfiguracyjnego serwera:

    cd /etc/ssh
    sudo cp sshd_config sshd_config.old
    

    Następnie edytuj to:

    gksu gedit sshd_config
    

    Lub użyj edytora tekstowego konsoli, jeśli komputer nie ma GUI:

    sudo nano -w sshd_config
    

    W górnej części pliku pojawia się ten blok tekstu:

    # 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
    

    Po prostu zmień Port 22wiersz u góry, żeby powiedzieć Port 57757.

    • Możesz dodać port zamiast go zmieniać. Polecam jednak testowanie przy najprostszej skutecznej konfiguracji.

      Zobacz man sshd_configwięcej szczegółów na temat konfigurowania serwera OpenSSH.

    Zapisz plik, zamknij edytor tekstu i uruchom ponownie serwer SSH za pomocą:

    sudo restart ssh
    

    Teraz zmień port przekierowania na routerze, aby port 57757 przekierował na port 57757 (nie 22) na serwerze OpenSSH i sprawdź, czy jest dostępny z Internetu.

  7. Jeśli nadal nie działa, sprawdź, czy być może zapora sieciowa Ubuntu faktycznie blokuje ruch pochodzący spoza sieci LAN.

    (Jest to mało prawdopodobne, jeśli sam nie skonfigurowałeś tego w ten sposób, ale jeśli wszystkie ustawienia są prawidłowe i żaden z powyższych kroków nie ujawnił nic na temat problemu, warto to sprawdzić).

    Biegać:

    sudo iptables -L
    

    Domyślnie w Ubuntu dane wyjściowe wyglądają następująco:

    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
    

    Jest to prosta polityka zezwalająca, zasadniczo równoważna z brakiem zapory ogniowej. (Rzeczywiście, jeśli moduł zapory sieciowej netfilter nie zostałby wkompilowany w jądro, system zachowałby się tak samo jak przy powyższych ustawieniach, chociaż iptablespolecenie, które pyta netfiltero ustawienia zapytania , nie działałoby oczywiście.)

    Jeśli Twoja konfiguracja nie wygląda tak, przeczytaj, man iptablesaby dowiedzieć się, co robią i / lub edytuj swoje pytanie (lub, jeśli jesteś inną osobą z podobnym problemem czytającym to, opublikuj nowe pytanie), aby dołączyć im. Pamiętaj, że potencjalnie Twoje iptablesreguły mogą ujawniać poufne informacje o Twojej konfiguracji. Praktycznie rzecz biorąc, zazwyczaj tak nie jest - z możliwym wyjątkiem reguł dotyczących określonych hostów, które są blokowane lub jeśli twoja konfiguracja jest bardzo zła / niepewna - zazwyczaj przydatność tych informacji dla atakującego, szczególnie w przypadku komputera na domowa / biurowa sieć LAN za routerem NAT jest minimalna.

Eliah Kagan
źródło
1

Ponieważ działa z sieci LAN, konfiguracja serwera wydaje się być poprawna. Musisz powiedzieć routerowi, aby przekierował z portu, którego chcesz używać na zewnątrz, do portu 57757 na twoim komputerze .
W traceroutetym przypadku nie przyda się.

guntbert
źródło
Okej, pomyślałem, że strona maszyny jest w porządku. Tak, ustawiłem mój router na przekazywanie 57757 na 22 ... ale mam ten sam problem. sshd_config jest również ustawiony na porcie 22.
Ci3
Powinno to być prawdopodobnie: „ port, którego chcesz używać na zewnątrz (np. 57757 ) do portu 22 na twoim komputerze ”. Jest to publiczny adres portu, dla którego potrzebujesz zaciemnienia.
david6
Niepoprawne