Chciałbym mieć możliwość połączenia SSH z komputerem biurowym Ubuntu 10.04 z zewnątrz. Zastanawiam się więc nad uruchomieniem demona SSH na PC. Jakie są problemy z bezpieczeństwem, możliwe usterki, określone ustawienia konfiguracji itp. Powinienem być świadomy?
W przypadku, gdy ma to znaczenie: jest to wyłącznie na mój własny użytek, nie sądzę, że będą inni ludzie; jest to komputer Ubuntu 10.04 w środowisku głównie Windows 7 / Vista / XP.
Odpowiedzi:
Największym problemem byłyby osoby logujące się jako administrator komputera przez SSH. Można to zrobić brutalną siłą, jeśli masz łatwe do odgadnięcia hasło.
Istnieje kilka środków bezpieczeństwa, które możesz podjąć, poniżej niektóre z tych, które zawsze podejmuję podczas konfigurowania serwera SSH i niektóre dodatkowe.
Użyj silnego hasła, składającego się z co najmniej (powiedzmy) 10 wielkich i małych liter, cyfr i innych znaków.
Więzić użytkowników do ich katalogu domowego. Więzieni użytkownicy nie będą mogli uzyskać dostępu / edytować plików znajdujących się poza ich katalogiem domowym. Dlatego użytkownik nie będzie mógł uzyskać dostępu / edytować kluczowych plików systemowych. Wiele samouczków można znaleźć w Internecie, jak uwięzić użytkownika. Większość z nich korzysta z JailKit . Przykład takiego samouczka można znaleźć tutaj . Alternatywnie możesz również użyć natywnej
ChrootDirectory
dyrektywy serwera OpenSSH . Przykład samouczka na ten temat można znaleźć tutaj .Zainstaluj Fail2Ban . Fail2Ban to program, który sprawdza dzienniki uwierzytelniania pod kątem nieprawidłowych wpisów. Po osiągnięciu określonego limitu dodaje blok zapory dla tego określonego adresu IP na określony czas. Istnieje również kilka samouczków online dotyczących konfigurowania Fail2Ban z SSH, przykładem może być ten . Strona główna Fail2Ban zawiera również kilka fajnych i kompletnych HOWTO.
Wyłącz logowanie roota przez SSH. Jest to użytkownik, który ma dostęp do prawie każdego pliku w systemie, dlatego zaleca się wyłączenie logowania do powłoki. W najnowszych wersjach Ubuntu użytkownik root jest automatycznie wyłączany, ale i tak nie przeszkadza mu dostęp do SSH. Odbywa się to poprzez edycję pliku
/etc/ssh/sshd_config
. ✝ Poszukaj następującej linii i upewnij się, że nie ma przed nią #.Użyj niestandardowego portu (np. Nie 22) Odbywa się to poprzez przekierowanie portów w routerze (np. 16121 -> 22 zamiast 22 -> 22) lub poprzez wymuszenie przez demona SSH nasłuchu na innym porcie. To sprawi, że twoja usługa SSH będzie trudniejsza do wykrycia dla złośliwych użytkowników. Odbywa się to poprzez edycję pliku
/etc/ssh/sshd_config
. ✝ Poszukaj następującej linii i zmień 22 na dowolny żądany port. Nie zapomnij później przekazać poprawnego portu w routerze.Nie używaj haseł do logowania. Oprócz haseł SSH umożliwia także logowanie przy użyciu kluczy prywatnych. Oznacza to, że klucz jest przechowywany na komputerze, na którym uzyskujesz dostęp do SSH maszyny SSH. Podczas próby połączenia klient SSH używa klucza do zalogowania się na serwerze zamiast uwierzytelniania za pomocą hasła. Klucze uwierzytelniające są znacznie silniejsze kryptograficznie niż hasła i dlatego nie są tak łatwe do złamania. Istnieje również kilka samouczków online dotyczących konfigurowania uwierzytelniania opartego na kluczach za pomocą SSH, przykładem może być ten . (Jeśli korzystasz z SSH w systemie Windows za pomocą PuTTY, sprawdź ten link, aby uzyskać instrukcje dotyczące PuTTY.) Po skonfigurowaniu uwierzytelniania opartego na kluczach możesz wyłączyć uwierzytelnianie za pomocą hasła, edytując plik
/etc/ssh/sshd_config
. ✝ Poszukaj następującego wiersza i upewnij się, że nie ma przed nim #.Opcjonalnie, jak wspomniał @ Linker3000 w swoim komentarzu, możesz skonfigurować tunel VPN do komputera, do którego chcesz uzyskać dostęp przez SSH, a następnie uniemożliwić dostęp do sieci nielokalnej na serwerze SSH. W ten sposób żadne urządzenie zewnętrzne bez połączenia VPN nie będzie mogło uzyskać dostępu do serwera SSH. Można to zrobić, odmawiając WSZYSTKIM hostom, a następnie pozwalając na logowanie się tylko do adresów IP sieci lokalnej. Odbywa się to poprzez edycję
/etc/hosts.deny
i dodanie:i
/etc/hosts.allow
dodać następujące:gdzie adres IP odpowiada adresowi Twojej sieci lokalnej.
*
jest symbolem wieloznacznym, więc wszystkie adresy IP zaczynające się od192.168.1.
będą akceptowane. Jeśli to nie zadziała, Twoja dystrybucja może użyćssh
zamiastsshd
. W takim przypadku powinieneś spróbowaćssh: 192.168.1.*
issh: ALL
zamiast tego.Możesz zezwolić tylko na określone hosty, zrób to samo z
/etc/hosts.allow
i/etc/hosts.deny
zgodnie z opisem w 6, ale/etc/hosts.allow
dodaj następujący wiersz i każdy host, aby umożliwić rozdzielenie spacjami:Zezwalaj tylko określonym użytkownikom na dostęp do twojego serwera SSH. Odbywa się to poprzez edycję pliku
/etc/ssh/sshd_config
. ✝ Poszukaj następującej linii i upewnij się, że nie ma przed nią #. Jeśli nie istnieje, utwórz go. Na przykład, jeśli chcesz zezwolić tylko na Johna, Toma i Mary, dodaj / edytuj ten wiersz:Możesz także odmówić określonym użytkownikom, na przykład, jeśli chcesz odmówić dostępu do Johna, Toma i Mary, dodaj / edytuj ten wiersz:
Zezwól tylko protokołowi SSH2 na połączenia przychodzące. Istnieją dwie wersje protokołu SSH. SSH1 podlega problemom z bezpieczeństwem, dlatego zaleca się korzystanie z SSH 2. Można to wymusić poprzez edycję pliku
/etc/ssh/sshd_config
. ✝ Poszukaj następującej linii i upewnij się, że nie ma przed nią #. Jeśli nie istnieje, utwórz go.usuń 1, więc linia będzie
Nie zezwalaj użytkownikom na logowanie się bez ustawionego hasła. Można to wymusić poprzez edycję pliku
/etc/ssh/sshd_config
. ✝ Poszukaj następującej linii i upewnij się, że nie ma przed nią #. Jeśli nie istnieje, utwórz go.I chociaż jest to proste i być może nie trzeba dodawać, ale okazało się kluczowe w wielu przypadkach, aktualizuj oprogramowanie. Regularnie aktualizuj zainstalowane pakiety / oprogramowanie.
✝ = po edycji pliku konfiguracyjnego SSH nie zapomnij zrestartować demona, aby zastosować zmiany. Uruchom ponownie demona, wykonując:
lub
w zależności od używanej dystrybucji Linuksa.
źródło
sudo service ssh restart
na Ubuntu.sudo restart ssh
.Kilka wskazówek:
źródło
Głównym ryzykiem jest zapomnienie, że prowadzisz serwer ssh i wprowadzenie słabego hasła do konta. Istnieją osoby atakujące, które systematycznie próbują pospolitych nazw kont (takich jak
webmaster
ibob
) i słabych haseł. Można wyeliminować to ryzyko poprzez zakazanie logowania hasło (umieścićPasswordAuthentication no
wsshd_config
, i albo też umieścićUsePAM No
lub wyłączenie uwierzytelniania hasła w ustawieniach PAM dla ssh). Środkiem pośrednim jest ograniczenie logowania ssh do białej listy użytkowników zAllowUsers
lubAllowGroups
wsshd_config
.Pamiętaj, że zezwolenie na logowanie się hasłem samo w sobie nie stanowi problemu bezpieczeństwa. Problemem są słabe hasła i niepoprawne hasła, a umożliwienie uwierzytelnienia hasła na serwerze ssh jest możliwe. Aby zabezpieczyć się przed szpiegowaniem haseł, nigdy nie wpisuj swojego hasła na maszynie, której nie w pełni ufasz (ale jeśli ufasz maszynie, równie dobrze możesz zainstalować na niej klucz prywatny, a następnie nie potrzebujesz uwierzytelniania hasłem).
Minimalne wymaganie do używania klienta ssh na maszynie polega na tym, że ufasz, że nie nastąpi aktywne przejęcie komunikacji ssh (atak man-in-the-middle jest możliwy, jeśli jest uruchomiony na maszynie klienta - myślisz wpisujesz komendy w nieskazitelnym kliencie ssh, ale klient w rzeczywistości wiernie przesyła twoje dane uwierzytelniające, ale także wprowadza konia trojańskiego do komunikacji). Jest to słabszy wymóg niż ufanie, że nie będzie snooper hasła (zwykle wykonywany za pomocą keyloggera, ale są też inne mniej zautomatyzowane metody, takie jak surfowanie na ramionach). Jeśli masz minimalne zaufanie, ale nadal boisz się szpiegów, możesz użyć haseł jednorazowych (OpenSSH obsługuje je poprzez obsługę PAM).
Oczywiście, jak każdy inny program, który wchodzi w interakcję z maszynami poza twoją kontrolą (nie tylko serwery sieciowe, ale także klienci), musisz nadążać za aktualizacjami bezpieczeństwa.
źródło
Przyszło mi do głowy trzy rzeczy:
Jeśli otworzysz domyślny port 22, to wkrótce zostanie on wykryty, a twój komputer zostanie wbity w ataki siłowe. Sugeruję skonfigurowanie sshd, aby nasłuchiwał innego portu lub przeprowadzał mapowanie portów na zaporze. Chociaż nie jest to magiczna kula, na pewno zaoszczędzi ci co najmniej tyle samo cykli procesora.
Port 12345
Jawnie wyłącz uwierzytelnianie za pomocą hasła i używaj tylko kluczy. Każdy klucz będzie lepszy niż najbardziej złożone hasło, które możesz zapamiętać.
Hasło Numer uwierzytelnienia
Chociaż Ubuntu ma domyślnie wyłączonego użytkownika root, jawnie wyłącz logowanie roota
PermitRootLogin no
źródło