Zdalny dostęp do komputera z systemem Linux za zaporą ogniową

11

Zamierzam wdrożyć maszynę z systemem Linux jako rodzaj terminalu publicznego w zdalnej lokalizacji. Chciałbym mieć do niego dostęp zdalny przez SSH w celu konserwacji, ale nie chcę, aby port był otwarty na zdalnej zaporze ogniowej w rzadkich przypadkach, gdy potrzebuję uzyskać dostęp do tego komputera. Myślałem o prostym skrypcie, aby utworzyć odwrotny tunel SSH do maszyny na zewnątrz, ale wolałbym, aby użytkownik nie musiał nic robić, gdy potrzebuję uzyskać do niego dostęp. Jakieś pomysły?

Aktualizacja: Postanowiłem pójść z moim oryginalnym planem skryptu, aby utworzyć tunel odwrotnego ssh. Podczas gdy inne sugerowane rozwiązania, takie jak pukanie portów, byłyby bardziej zgodne z tym, co naprawdę chcę zrobić, w tym przypadku nie mam dostępu do konfiguracji routera oprócz prowadzenia użytkownika przez konfigurację. dreszcz

baudtack
źródło
Nie musisz konfigurować routera. Linux ma zaporę ogniową iptables, która wystarcza do zabezpieczenia zapory. A tworzenie tunelu ssh do serwera zawsze naraża go na atak, który powoduje atak hosta, z którym jest połączony.
Kazimieras Aliulis
1
Musiałbym jednak otworzyć port na routerze, aby przekazać wszystko, czego potrzebowałem, do pudełka z linuksem. Tunel SSH nie zawsze jest włączony. Zostanie uruchomiony przez użytkownika, który kończy się, gdy potrzebuję dostępu do maszyny.
baudtack

Odpowiedzi:

5

Ma to mniej wspólnego z martwieniem się o otwarcie portu, a bardziej o tym, że nie chce się przeprowadzać użytkownika przez proces otwierania portu. Niestety nie mam żadnego dostępu do tego routera.

Jeśli zmiana routera jest całkowicie wykluczona, być może trzeba spojrzeć na rozwiązanie P2P lub VPN, takie jak Hamachi . Jeśli skonfigurujesz system tak, aby automatycznie nawiązywał połączenie VPN podczas uruchamiania, powinieneś być w stanie połączyć się w dowolnym momencie. Hamachi przeprowadza dla ciebie wszystkie negocjacje dotyczące zapory ogniowej. Jedyną wadą jest to, że musisz polegać na tym, że serwery Hamachi są sprawne i funkcjonalne, kiedy potrzebujesz się połączyć.

Jeśli masz serwer, który jest zawsze włączony , możesz ustawić autossh, aby zdalny system zawsze pozostawiał tunel otwarty i podłączony do twojego serwera. Jedyną wadą jest to, że zdalny system jest zagrożony - atakujący otrzyma klucze, które zostały użyte do ustanowienia sesji ssh. Bardzo ważne jest, aby system, który akceptuje połączenie ssh, był naprawdę zablokowany.


Poniżej moja oryginalna odpowiedź, założyłem, że aktualizacja routera jest opcją.

Jednym z rozwiązań, które możesz chcieć sprawdzić, jeśli zapora sieciowa je obsługuje, jest pukanie portów . W przypadku niektórych zapór ogniowych powinno być możliwe wysłanie specjalnego zestawu pakietów, które zapora ogniowa zauważy, a następnie tymczasowo otworzy dziurę przez zaporę ogniową.

Istnieje wiele wdrożeń, niektóre lepsze niż inne. Niektórzy używają silnej kryptografii, aby prawie niemożliwe było, aby osoba bez odpowiednich kluczy nie wysłała prawidłowego pukania.

Zoredache
źródło
To brzmi jak świetny pomysł! Niestety firewall, o którym mowa, to po prostu zwykły Linksys klasy konsumenckiej lub podobny odpowiednik.
baudtack
1
Jeśli możesz zainstalować dd-wrt, możesz użyć knockd ( dd-wrt.com/wiki/index.php/Knockd )
Zoredache
@Zoredache Prawda, ale to jest w zdalnej lokalizacji. Nie mam dostępu do tego routera i wzdrygnę się na myśl o tym, by spróbować przeprowadzić użytkownika przez instalację dd-wrt.
baudtack
Zgadzam się, że jest to prawdopodobnie właściwy sposób na skonfigurowanie tego, pod warunkiem, że mam fizyczny dostęp do routera, aby zainstalować dd-wrt.
baudtack
Hamachi, od momentu przejęcia przez LogMeIn, wykazał się ogromną uwagą dla użytkowników Linuksa. Uważam ten produkt za niewiarygodny, gdy maszyny Linux są częścią mojej sieci Hamachi.
bmb
6

Nie martwiłbym się tym, że port 22 byłby dostępny dla Internetu, ale podjąłem pewne kroki, aby go zabezpieczyć.

Po pierwsze, wyłącz interaktywne uwierzytelnianie za pomocą klawiatury i przejdź do klawiszy ssh.

Po drugie, zainstaluj coś takiego jak fail2ban na zdalnym serwerze, aby zablokować adresy IP, które wielokrotnie sondują twój komputer. Ponieważ masz skonfigurowane klucze ssh, autoryzowani użytkownicy nie powinni zgłaszać awarii uwierzytelnienia.

Ewentualnie, jeśli możesz, skorzystaj z porady WerkkreWs i skonfiguruj zaporę przed maszyną, aby zakończyć połączenie VPN, a następnie zezwól tylko demonowi ssh na zdalnym serwerze, aby akceptował połączenia przychodzące przez tę VPN.

Alternatywnie, jeśli zapora sieciowa nie może przerwać połączenia VPN, prawdopodobnie możesz przesłać pakiety GRE lub IPSEC do komputera z systemem Linux i tam je zakończyć.

Dave Cheney
źródło
Ma to mniej wspólnego z martwieniem się o otwarcie portu, a bardziej o tym, że nie chce się przeprowadzać użytkownika przez proces otwierania portu. Niestety nie mam żadnego dostępu do tego routera.
baudtack
Rozumiem i współczuję z twoim bólem.
Dave Cheney
2
Pierwszym krokiem w tym rozwiązaniu byłoby skonfigurowanie sshd do działania na niestandardowym porcie. Istnieje wiele botów pukających do portu 22. Wybierz port, który nie pojawia się w / etc / services, a „nmap HOST” go nie znajduje.
hayalci
4

Wygląda na to, że szukasz knockd

Możesz zainstalować to na samym serwerze linux, za pomocą iptables, tak aby przypominało zaporę drugiego poziomu. Nawet jeśli port 22 jest otwarty na zaporze frontendowej, nie byłby otwarty na serwerze, więc skany portów nie widziały żadnych otwartych portów. Następnie, gdy wyślesz „sekretne pukanie”, nagle masz otwartą ścieżkę do portu 22.

Czy to ma sens?

Brent
źródło
O ile się nie mylę, musiałbym również przekierować wszystkie porty pukania, prawda? Czy nie byłoby to oczywiste, gdy ktoś przeskanował router? Nie znaliby kolejności, ale upuszczenie możliwych kombinacji do 6, jeśli pamiętam, jak poprawnie wykonywać permutacje, daje im ogromną przewagę. A może myślę o tym źle?
baudtack
Podczas gdy porty używane do pukania musiałyby zostać przekazane dalej, host działający knockd nie musi w żaden sposób odpowiadać źródłu pukania.
Zoredache
poprawne - porty otwarte na pierwszej zaporze ogniowej nie będą otwarte na drugiej, więc dla skanera wszystkie wydają się zamknięte. Nie ma sposobu na odróżnienie portów pukania od braku pukania.
Brent
3

Podsumowując wszystkie odpowiedzi:

użyj ssh, ale uczyń go bardziej niejasnym i bezpiecznym.

Dla ochrony:

  • Upewnij się, że logowanie do roota nie jest dozwolone (PermitRootLogin no).
  • Ogranicz użytkowników, którzy mogą się logować za pomocą opcji konfiguracji AllowUsers lub AllowGroups.
  • Upewnij się, że używa tylko 2 wersji protokołu ssh (protokół 2).
  • Wskazane jest używanie tylko kluczy uwierzytelniających, ale hasło jest wygodniejsze, gdy może zaistnieć potrzeba połączenia z serwerem z wakacji, gdzie nie masz dostępu do kluczy uwierzytelniających.

W przypadku niejasności:

  • Zmień port ssh na losowo wysoki port, który zapamiętałeś, na przykład 20486. Pozbyłby się to większości automatycznych bruteforcerów, ale nie ukryłby go przed skanowaniem wszystkich portów na serwerze.
  • Ukryj możliwość podłączenia do portu. Jednym ze sposobów jest pukanie portów wspomniane w innych odpowiedziach, ale potrzebujesz specjalnego oprogramowania, które nie jest dostępne wszędzie. Inną prostą opcją jest użycie zapory ogniowej iptables z najnowszym modułem do stworzenia reguły, która pozwoliłaby połączyć się dopiero za drugim lub trzecim razem. Więc wiesz, że musisz spróbować kilka razy, aby połączyć się pomyślnie, ale proste skanowanie całego portu nie ujawniłoby portu ssh. Zasady byłyby podobne do tych:


iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW -m recent --set
iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW  -m recent --rcheck --seconds 60 --hitcount 2 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 20486 -j DROP

Kazimieras Aliulis
źródło
+1 fajne podsumowanie i ciekawy pomysł na sztuczkę wielokrotnych prób.
David Z
2

Zaplanowane zadanie skryptu dla tunelu odwrotnego ssh lub otwórz port zapory.

Jeśli martwisz się o to, że SSH jest otwarty na świat, możesz zaplanować zadanie podczas okresu konserwacji za pomocą skryptów iptables i mieć wtedy dostępny tylko port.

szkarłat
źródło
1
Zgoda. Jeśli nie masz dostępu do VPN, jedynym prawdziwym rozwiązaniem jest po prostu otwarcie portu. Jeśli się tym denerwujesz, zawsze możesz użyć niestandardowego portu.
WerkkreW
2

Sprawdź pukanie portów, aby otworzyć tunel SSH.

Ponadto uruchom denyhosts, aby zablokować ludzi po zbyt wielu złych żądaniach.

Oba pakiety są dostępne w standardowych repozytoriach Ubuntu, Fedora i RHEL.

Tim Howland
źródło
1

Śmiało i otwórz port, po prostu ustaw go poza normalnym zasięgiem. Zrobiłbym z tego losowy port ponad 1024. W ten sposób hakerzy prawdopodobnie nawet go nie szukają.

Brad Gilbert
źródło
0

Nie ma powodu, aby nie dziurać zapory w zaporze, jeśli potrzebujesz dostępu do urządzenia zdalnie, jednak rzadko.

Jeśli jednak nadal nie chcesz (lub nie możesz) otworzyć portu, prosty skrypt powłoki może monitorować zasoby internetowe dostępne do kontrolowania i nasłuchiwać polecenia uruchomienia tunelu zwrotnego. Konta e-mail, kanały IRC i strony internetowe od razu przychodzą na myśl jako urządzenia uruchamiające.

Oczywiście jest to o wiele bardziej kruche i mniej bezpieczne niż samo otwarcie portu. Ale jestem pewien, że masz swoje powody.

Brian
źródło