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ą #.
#PermitRootLogin no
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.
Port 22
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 #.
#PasswordAuthentication no
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:
sshd: ALL
i /etc/hosts.allow
dodać następujące:
sshd: 192.168.1.*
gdzie adres IP odpowiada adresowi Twojej sieci lokalnej. *
jest symbolem wieloznacznym, więc wszystkie adresy IP zaczynające się od 192.168.1.
będą akceptowane. Jeśli to nie zadziała, Twoja dystrybucja może użyć ssh
zamiast sshd
. W takim przypadku powinieneś spróbować ssh: 192.168.1.*
i ssh: 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:
sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
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:
AllowUsers john tom mary
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:
DenyUsers john tom mary
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.
Protocol 2,1
usuń 1, więc linia będzie
Protocol 2
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.
PermitEmptyPasswords no
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.
w zależności od używanej dystrybucji Linuksa.