SSH do komputerów domowych

21

W domu mam wiele maszyn, do których chciałbym uzyskać dostęp ze szkoły za pomocą SSH i VNC. W tym celu podałem im statyczne adresy IP:

  • 192.168.1.50: Windows
  • 192.168.1.51: Ubuntu
  • 192.168.1.52: Raspberry Pi / Raspbian

Wiem, że SSH używa portu 22, więc mogę przekierować ten port do 192.168.1.51:22 na moim routerze, ale w ten sposób nie będę mógł SSH do mojego Raspberry Pi. Czy jest jakiś sposób na skonfigurowanie tego, aby mieć dostęp do obu komputerów?

acourchesne
źródło
10
Możesz użyć różnych portów ssh. Nie wiem, jak trudno jest na Windowsie , ale na Linuksie naprawdę łatwo jest zmienić go na nietypowy port . W ten sposób możesz przekierować port 22, aby wygrać maszynę (bez zmian), a drugi port (niestandardowy) do RaspberryPi.
bistoco
2
@ Melebius, jest stary, ale wciąż dobry, kluczową częścią jest dla mnie: „Podstawowy argument, który próbowałem wysunąć: nie rób bezpieczeństwa przez zaciemnienie.”, Chodzi o potrzebę i łatwe rozwiązanie . To powiedziawszy, być może nie musi zmieniać portów ubuntu lub pi, wystarczy przekierować różne porty routera do każdego 22 portu maszyny.
bistoco
1
@bistoco Zgadzam się. Jednak PO ma wkrótce ujawnić dostęp SSH do świata zewnętrznego i w takim przypadku zawsze należy wziąć pod uwagę bezpieczeństwo. Również ustawienie różnych portów na komputerach nie rozwiązuje problemu OP, ponieważ musi włączyć różne porty (= przekierowanie portów) na swoim routerze.
Melebius
6
@Melebius Poza tematem, ale nigdy nie używam 22, tylko dlatego, że automatyczne boty nie będą pukać na mój serwer 24/7. Nie powstrzyma prawdziwego napastnika (lub dobrze napisanego skryptu), ale zmniejsza liczbę moich wpisów w dzienniku.
Kaz Wolfe,
4
Możesz po prostu połączyć się z jednym z nich (tym, który jest publicznie dostępny), a następnie połączyć się z tego, używając adresu lokalnego do innych.
tkausl

Odpowiedzi:

32

Jeśli masz IPv6, nie potrzebujesz nawet przekierowania portów! Po prostu zdobądź swój stały adres IPv6 (na podstawie twojego adresu MAC, więc gwarantuje to, że pozostanie taki sam, chyba że twój dostawca usług internetowych nie wie, jak działa IPv6) i użyj go do tunelowania. Ponieważ twój adres IPv6 jest publiczny i pozwala światu aby uzyskać do ciebie dostęp bez konieczności przechodzenia przez lokalny NAT, nie musisz zawracać sobie głowy włączaniem przekierowania portów w dowolnym miejscu. „Po prostu zadziała”.

Należy jednak pamiętać, że IPv6 nadal nie jest tak naprawdę obsługiwany na całym świecie, a zarówno domowe połączenie internetowe, jak i zdalne połączenie internetowe muszą mieć w pełni działający protokół IPv6, aby to zrobić.

Jednak jeśli jesteś podobny do większości ludzi i masz tylko IPv4, nadal istnieje sposób! Niektóre routery umożliwiają przekazywanie określonych portów źródłowych do określonych portów docelowych, na przykład:

wprowadź opis zdjęcia tutaj

W tym przykładzie, port 22jest przekazywana bezpośrednio do mojego komputera sheepdog, a port 292jest przekazywany do portu 22na coyote.

Wreszcie, jeśli router nie ma tej funkcji, możesz po prostu zmienić port, ponieważ SSH nie ogranicza się tylko do działania na porcie 22. Możesz ustawić dowolną wartość (która nie jest używana).

W /etc/ssh/sshd_config(potrzebujesz roota do edycji, więc sudo nano /etc/ssh/sshd_config), u góry pliku znajduje się wiersz:

# What ports, IPs and protocols we listen for
Port 22

Zmień to na cokolwiek chcesz:

# What ports, IPs and protocols we listen for
Port 2992

Uruchom ponownie serwer SSH za pomocą sudo service ssh restarti przekieruj port na routerze.


Jednak w tym przypadku użycia rozważę, czy tunele SSH są właściwe. Być może powinieneś skonfigurować dedykowany serwer VPN w sieci domowej? Umożliwi to dostęp do całej sieci domowej z dowolnego miejsca, pod warunkiem posiadania odpowiednich poświadczeń bezpieczeństwa wymaganych przez VPN. Dodatkowo VPN jest nieco mniej obciążony; zazwyczaj wystarczy przekierować tylko jeden port dla jednego komputera.

Kaz Wolfe
źródło
2
Możesz użyć brokera tunelowego IPv6, aby uzyskać adresy IPv6, jeśli twój dostawca usług internetowych nie obsługuje IPv6.
André Borie,
1
Przez „tę funkcję” masz na myśli przekierowanie portu do innego portu?
Liu Siyuan,
@LiuSiyuan Yep. Wiem, że to dziwne, ale widziałem routery, które nie mogą sobie z tym poradzić. Mój stary router dostarczony przez dostawcę usług internetowych nie mógł nawet spróbować.
Kaz Wolfe,
Nie całkiem dostałem tę część IPv6. Czy założymy, że wszyscy dostawcy usług internetowych dostarczający adresy IPv6 dają (spójny) inny dla każdego urządzenia w sieci?
jjmontes
1
@jjmontes Jeśli twój dostawca usług internetowych jest kompetentny, dostaniesz pełny / 64 (lub może mniej, ale wciąż wystarczający, aby przypisać jeden do każdej maszyny)
Kaz Wolfe
19

Prostym sposobem rozwiązania tego problemu jest zmapowanie różnych portów routera na port 22 komputerów. Na przykład możesz skonfigurować następujące ustawienia routera (zakładając, że router ma adres IP 1.2.3.4)

1. 1.2.3.4:22   --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)

Następnie, gdy używasz ssh, określ port, którego chcesz użyć, wpisując

$ ssh <username>@<router ip> -p <your port>

Teraz powinieneś być w stanie połączyć się ze wszystkimi swoimi maszynami.

Liu Siyuan
źródło
11

Jeśli wiesz, że jeden z komputerów jest zawsze włączony, możesz również użyć go jako serwera proxy ssh.

powiedzmy, że masz skonfigurowaną nazwę domeny dla zewnętrznego adresu IP (tj. myhome.dyndns.com lub cokolwiek innego), to co zrobisz, to połącz się na jednym komputerze (powiedzmy, że malina jest zawsze aktywna, a port jest przesyłany z routera do it), twoje połączenia ssh będą:

szkoła -> (router, tutaj przezroczysty) -> malinowy -> ubuntu lub windows

teraz w swoim ~ / .ssh / config w szkole dodaj linie:

Host ubuntu 192.168.1.51
    Hostname ubuntu (change to match your setup)
    User myraspberryuser  (change it ;-) )
    IdentityFile ~/.ssh/id_rsa   (The path to your private key, on the school computer, better on an usb key if public computer)
    ForwardAgent yes
    RequestTTY yes
    ProxyCommand ssh -W %h:%p %[email protected]

Aby się następnie połączyć:

ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)

Od teraz, jeśli wpiszesz ssh ubuntu, komputer najpierw połączy się z maliną, a następnie rozpocznie sesję ssh z komputerem ubuntu.

Polecam ci, bez względu na port, który wybierzesz przekazywać dalej, aby wyłączyć hasło w /etc/sshd.conf, aby umożliwić logowanie tylko za pomocą klucza ssh. W ten sposób, jeśli ustawisz klucz na malinie i na Ubuntu, z parametrem „ForwardAgent”, będziesz musiał tylko odblokować klucz, a następnie żadne hasło nie będzie wymagane do połączenia. W ten sposób, nawet jeśli boty próbują zalogować się na twoim ssh, nigdy nie będą mogły się zalogować, ponieważ nie zezwalasz na logowanie za pomocą hasła.

Bonus, działa również z scp, scp foo ubuntu: / tmp / foo użyje tej samej konfiguracji bez dalszych parametrów. Bonus 2, ta konfiguracja nie wymaga żadnych zmian w domu, jeśli jutro ty i inny komputer, po prostu skopiuj / wklej kod w konfiguracji ssh, zmień hosta i ip, to wszystko, nie trzeba otwierać nowego portu na routerze

potens
źródło
Czy jest jakaś wada używania maszyny jako półproduktu dla SSH? Powiedzmy, że używam mojego Raspberry Pi do łączenia się z innymi komputerami w sieci, czy jego wydajność wpłynie na to zadanie?
acourchesne
1
Tak, malina może ograniczyć przepustowość, ponieważ musi służyć jako serwer i klient. Jeśli masz wystarczającą pewność siebie, możesz osiągnąć ten sam wynik dzięki tunelom ssh. W ten sposób malina działa tylko jako serwer, ale szkolny komputer musi obsługiwać dwóch klientów.
potens
4

Robię to - pozostawiam rpi włączony i cały czas podłączam się bezpośrednio do routera (ponieważ jest najtańszy do uruchomienia) i po prostu ssh do niego, a następnie odbijam się od innych - to nigdy nie wymaga dużej uwagi.

Możliwe jest również VNC / RDP GUI przez potok SSH, trochę zabawnie lub przekierowanie portu, który pozwala przeglądać serwer na komputerze stacjonarnym, zachowując przy tym prywatność.

Powodem, dla którego dodałem tę odpowiedź, jest podanie kilku sugestii.

1) Użyj innego portu niż 22. Możesz zostawić 22 na PI, ale zmień port przychodzący na routerze na ponad 10 000 ... W przeciwnym razie dostaniesz dziesiątki do setek ataków dziennie - i kiedy to zrobisz wiadomo, że prowadzi host SSH, gdy tylko zostanie znaleziony exploit, jesteś właścicielem.

2) Użyj certyfikatów zamiast nazwy użytkownika / hasła - całkowicie wyłącz logowanie nazwy użytkownika / hasła.

3) Jeśli twój adres IP może się zmienić, skorzystaj z usługi typu dyndns, aby uzyskać sobie nazwę hosta DNS (używam noip, jest bezpłatny i obsługują klienta Linuksa w celu aktualizacji twojego adresu IP - myślę, że możesz po prostu apt-get na pi teraz). Jest jeszcze kilka innych firm, które oferują to za darmo.

4) Aktualizuj swoje pi (lub cokolwiek, do czego ssh) na bieżąco (sudo apt-get update). Wierzę, że ssh jest już dość dobrze sprawdzony, ale wierzyłem też, że https ...

Bill K.
źródło
3

Wątpiłem, czy lepiej by to pasowało jako komentarz niż odpowiedź, ale i tak opublikuję tutaj.

Kilka rzeczy, o których powinieneś pomyśleć przed zrobieniem tego:

  1. Otworzysz swoje systemy w Internecie, więc lepiej upewnij się, że są dobrze załatane, a konfiguracja bezpieczeństwa jest zahartowana (np. Nie zezwalaj na logowanie roota i używaj kluczy zamiast haseł).
  2. Twój publiczny adres IP (patrz whatismyip.com) może ulec zmianie, w zależności od usługodawcy internetowego może się zmieniać codziennie lub prawie nigdy. Oznacza to, że musisz znaleźć sposób na określenie swojego publicznego adresu IP. Możesz codziennie odwiedzać whatismyip.com z sieci domowej, stworzyć aplikację lub użyć dynamicznego DNS (DynDNS) do mapowania zmieniającego się publicznego adresu IP na statyczną nazwę domeny.
  3. Jeśli chcesz używać protokołu IPv6, aby ominąć wszystkie problemy związane z protokołem IPv4 i translacją NAT, będziesz potrzebować urządzeń, routera, usługodawcy internetowego, aby ... również rozmawiać o protokole IPv6. Istnieje kilka usług, które mogą ci pomóc, gdy twój dostawca usług internetowych nie obsługuje IPv6, ale twoje urządzenia i router i tak będą musiały z nim rozmawiać.
  4. Im więcej portów i urządzeń otworzysz w Internecie, tym większy będzie twój obszar ataku. Sugerowałbym użycie jump-box w twojej sieci i zezwalanie SSH na dostęp do tego urządzenia tylko z Internetu. Jump-box byłby w zasadzie jednym bardzo zahartowanym systemem, który przesyłasz przez router do Internetu. Po podłączeniu do tego urządzenia będziesz w stanie połączyć się przez SSH z siecią wewnętrzną. Jump-box może być w zasadzie kolejnym Raspberry Pi. Sugerowałbym użycie dedykowanego urządzenia, aby móc je jak najbardziej zahartować (między innymi poprzez uruchomienie jak najmniejszej liczby usług).
  5. (4a) Zamiast mieć skrzynkę SSH, w której możesz zainstalować SSH, możesz także skonfigurować serwer VPN, który umożliwia przeglądanie sieci domowej z urządzenia w szkole (jeśli dozwolone są wychodzące połączenia VPN).
BlueCacti
źródło