Zabezpieczanie połączeń SSH pomaga chronić system Linux i dane. Administratorzy systemów i użytkownicy domowi również muszą zabezpieczyć komputery podłączone do Internetu. Oto 10 prostych sposobów, które pomogą Ci zabezpieczyć serwer SSH .
Kilka podstawowych informacji o bezpieczeństwie SSH
SSH oznacza Secure Shell. Protokół SSH lub narzędzie programowe umożliwia administratorom systemu i użytkownikom nawiązywanie bezpiecznych połączeń z komputerami zdalnymi przy użyciu tego protokołu.
Protokół SSH to szyfrowany protokół zaprojektowany w celu zapewnienia bezpiecznego połączenia w niezabezpieczonej sieci, takiej jak Internet. SSH w Linuksie jest zbudowany na przenośnej wersji projektu OpenSSH. Jest realizowany w klasycznym modelu klient-serwer z serwerem SSH przyjmującym połączenia od klientów SSH. Klient służy do łączenia się z serwerem i udostępniania sesji użytkownikom zdalnym. Serwer akceptuje połączenie i inicjuje sesję.
W swojej domyślnej konfiguracji serwer SSH będzie „nasłuchiwał” połączeń przychodzących na porcie 22 protokołu kontroli transmisji (TCP). Ponieważ jest to standardowy i popularny port, staje się celem zagrożeń aktorów i złośliwych botów.
Złośliwi aktorzy uruchamiają boty, które skanują zakresy adresów IP w poszukiwaniu otwartych portów. Następnie sprawdza te porty pod kątem luk, które można wykorzystać. Myślenie: jestem bezpieczny, jest wiele większych i lepszych celów ode mnie, na które złoczyńcy mogą sobie pozwolić, jest całkowicie błędne. Boty te nie wybierają swoich celów na podstawie żadnych kryteriów, po prostu szukają sposobu na przedostanie się do systemu.
Będziesz ofiarą, jeśli nie zabezpieczysz swojego systemu.
Tarcie bezpieczeństwa
Punktem krytycznym dla bezpieczeństwa jest każda sytuacja, w której główne zadanie zostaje uniemożliwione lub opóźnione ze względu na wymogi bezpieczeństwa.
Problemy z bezpieczeństwem powodują dyskomfort (na każdym poziomie) dla użytkowników i innych osób podczas wdrażania środków bezpieczeństwa. Osoby nowe w systemach komputerowych mogą martwić się, czy rzeczywiście będą musiały wprowadzać hasło za każdym razem, gdy logują się do komputera mainframe. Dla nich jest to również forma tarć o bezpieczeństwo.
Wprowadzenie środków bezpieczeństwa często będzie wiązać się z pewnymi formami tarć u niektórych osób. Właściciele firm muszą zapłacić za te działania. Użytkownicy komputerów mogą być zmuszeni do zmiany nawyków lub zapamiętania innych informacji uwierzytelniających i dodania kroków zapewniających pomyślne połączenie. Administratorzy systemu będą mieli dodatkową pracę do wykonania, aby wdrożyć i utrzymać nowe środki bezpieczeństwa.
Dokręcanie i blokowanie systemu operacyjnego typu Linux lub Unix może być szybkie. Przedstawione tutaj środki bezpieczeństwa to zestaw łatwych do wykonania kroków, które poprawią bezpieczeństwo komputera bez konieczności stosowania aplikacji innych firm i głębokiej interwencji zapory ogniowej .
Użyj protokołu SSH w wersji 2
W 2006 roku protokół SSH został zaktualizowany z wersji 1 do wersji 2. Jest to znacząca aktualizacja. Wprowadzono wiele zmian i ulepszeń, zwłaszcza w zakresie szyfrowania i zabezpieczeń, a wersja 2 nie jest wstecznie kompatybilna z wersją 1. Aby uniemożliwić połączenia z klientami w wersji 1, możesz określić komputery, aby akceptowały tylko połączenia z wersji 2.
Aby to zrobić, edytuj plik /etc/ssh/sshd_config za pomocą następującego polecenia:
sudo gedit /etc/ssh/sshd_config

Dodaj następujący wiersz:
Protocol 2
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Zapisz plik, a następnie uruchom ponownie proces demona SSH za pomocą następującego polecenia:
sudo systemctl restart sshd
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Przetestuj nową konfigurację w działaniu, przełączając się na inną maszynę i próbując połączyć się przez SSH z maszyną testową. Użyjemy opcji -1 (protokół 1), aby wymusić na poleceniu ssh użycie protokołu w wersji 1.
ssh -1 dave@howtogeek.local
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Żądanie połączenia zostało odrzucone. Upewnij się, że nadal możesz połączyć się z protokołem 2. Do testu użyjemy -2 (protokół 2).
ssh -2 dave@howtogeek.local
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Fakt, że serwer SSH pyta o hasło, jest pozytywnym znakiem, że połączenie zostało nawiązane i wchodzisz w interakcję z serwerem. Współcześni klienci SSH domyślnie korzystają z protokołu 2. Nie musimy określać protokołu 2, pod warunkiem, że klient jest aktualny.
ssh dave@howtogeek.local
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Połączenie zostało zaakceptowane.
Unikaj bramki 22
Port 22 jest standardowym portem dla połączeń SSH. Jeśli używany jest inny port, dodaje to trochę funkcji Security Through Obscurity (STO) do twojego systemu. Bezpieczeństwo poprzez niejednoznaczność nigdy nie powinno być uważane za prawdziwy środek bezpieczeństwa. W rzeczywistości niektóre mądrzejsze boty atakujące sondują wszystkie otwarte porty i decydują, jaką usługę wykonują, zamiast polegać na prostej liście wyszukiwania portów i zakładać, że normalnie świadczą one usługę. Jednak użycie niestandardowego portu może pomóc w ograniczeniu złego ruchu na porcie 22.
Aby skonfigurować niestandardowy port, edytuj plik konfiguracyjny SSH jak powyżej.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Usuń # na początku wiersza Port i zastąp 22 wybranym numerem. Zapisz plik konfiguracyjny i zrestartuj demona SSH.
Na innym komputerze użyjemy polecenia ssh, aby połączyć się z serwerem. Domyślne polecenie ssh używa portu 22:
ssh dave@howtogeek.local
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Połączenie odrzucone. Spróbuj ponownie i określ port 470, używając opcji –p (port):
ssh -p 479 dave@howtogeek.local
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Połączenie potwierdzone.
Podłącz filtr za pomocą opakowań TCP
Opakowania TCP to łatwe do zrozumienia listy kontroli dostępu. Umożliwia odrzucanie i zezwalanie na połączenia w oparciu o charakterystykę żądania połączenia, taką jak adres IP lub nazwa hosta. Opakowania TCP powinny być używane z prawidłowo skonfigurowaną zaporą ogniową, a nie zamiast niej.
Opakowania TCP są preinstalowane na komputerach z systemem Ubuntu 18.04 LTS . Musi być zainstalowany na Manjaro 18.10 i Fedorze 30.
Aby zainstalować w Fedorze, użyj następującego polecenia:
sudo yum install tcp_wrappers
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Aby zainstalować na Manjaro, użyj tego polecenia:
sudo pacman -Syu tcp-wrappers
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Dołączone są dwa pliki, jeden zawiera listę dozwolonych, a drugi zawiera listę zabronionych. Edytuj listę odrzuconych za pomocą następującego polecenia:
sudo gedit /etc/hosts.deny
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Powyższe polecenie otworzy edytor gedit z plikiem, który nie chce się załadować.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Musisz dodać linię:
ALL : ALL
I zapisz plik. Linia ta zablokuje wszelki nieautoryzowany dostęp. Teraz musimy przyznać uprawnienia do połączeń, które chcesz zaakceptować. W tym celu należy edytować plik uprawnień:
sudo gedit /etc/hosts.allow
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Powyższe polecenie otworzy edytor gedit z plikiem do pobrania.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Dodaliśmy nazwę demona SSH, SSHD oraz adres IP komputera, który umożliwia nawiązanie połączenia. Zapisz plik i sprawdź, czy obowiązują ograniczenia i uprawnienia.
Najpierw spróbujesz połączyć się z komputera, którego nie ma w pliku hosts.allow:
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Połączenie odrzucone. Spróbujemy połączyć się z komputera o adresie IP 192.168.4.23:
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Połączenie zaakceptowane.
Poniższy przykład pozwala na połączenie tylko jednego komputera. Opakowania TCP są dość elastyczne, obsługują nazwy hostów, symbole wieloznaczne i maski podsieci, aby akceptować połączenia z zakresów adresów IP.
Odrzucaj prośby o połączenie bez hasła
Chociaż nie jest to dobre, administratorzy systemu Linux mogą tworzyć konta użytkowników bez haseł. Oznacza to, że do zdalnych połączeń z tego konta nie jest wymagane hasło. Połączenia te zostaną zaakceptowane, ale nie zostaną uwierzytelnione.
Domyślne ustawienie protokołu SSH akceptuje żądania połączeń bez hasła. Możemy to łatwo zmienić i upewnić się, że wszystkie te połączenia są uwierzytelnione.
Musisz edytować plik konfiguracyjny SSH.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Przewiń plik w dół, aż zobaczysz wiersz #PermitEmptyPasswords no . Usuń # na początku linii i zapisz plik. Uruchom ponownie demona SSH.
Używaj kluczy SSH zamiast haseł
Klucze SSH zapewniają bezpieczny sposób logowania się do serwera SSH. Hasła można złamać, odgadnąć lub wymusić metodą brute-force . Klucze SSH nie są podatne na tego typu ataki.
Generując klucz SSH, tworzysz parę kluczy. Jeden to klucz publiczny, drugi to klucz prywatny. Klucz publiczny jest zainstalowany na serwerach, z którymi chcesz się połączyć. Klucz prywatny jest bezpiecznie przechowywany na Twoim komputerze.
Klucze SSH umożliwiają nawiązywanie połączeń bez hasła, co jest bezpieczniejsze niż połączenia wykorzystujące uwierzytelnianie hasłem.
Wysyłając żądanie połączenia, komputer zdalny wykorzystuje kopię klucza publicznego do utworzenia zaszyfrowanej wiadomości wysyłanej z powrotem do komputera. Ponieważ jest szyfrowany kluczem publicznym, komputer może go odszyfrować kluczem prywatnym.
Następnie komputer wyodrębnia pewne informacje z wiadomości, szyfruje je i wysyła z powrotem na serwer. Jeśli serwer może go odszyfrować za pomocą kopii klucza publicznego. Jeżeli informacje zawarte w wiadomości odpowiadają tym, które wysłał Ci serwer, połączenie zostanie potwierdzone.
Tutaj połączenie z serwerem pod adresem 192.168.4.11 jest nawiązywane przez użytkownika za pomocą klucza SSH. Pamiętaj, że nie jest wyświetlany monit o wprowadzenie hasła.
ssh dave@192.168.4.11
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Całkowicie wyłącz uwierzytelnianie hasłem
Możesz całkowicie wyłączyć uwierzytelnianie hasłem, jeśli używasz kluczy SSH. Musimy edytować plik konfiguracyjny SSH.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Przewiń plik w dół, aż zobaczysz wiersz zaczynający się od #PasswordAuthentication tak . Usuń # na początku linii, zmień tak na nie i zapisz plik. Uruchom ponownie demona SSH.
Wyłącz przekazywanie X11
Przekazywanie X11 umożliwia zdalnym użytkownikom uruchamianie aplikacji graficznych z serwera za pośrednictwem sesji SSH, ale jest łatwo wykorzystywane przez złych aktorów. Lepiej to wyłączyć edytując plik konfiguracyjny SSH.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Przewiń plik w dół, aż zobaczysz wiersz #X11Przekazywanie nr , usuń # na początku wiersza i zapisz plik. Uruchom ponownie demona SSH.
Ustaw wartość limitu czasu bezczynności
Jeśli z komputerem zostanie nawiązane połączenie SSH i przez pewien czas nie będzie na nim żadnej aktywności, może to stanowić zagrożenie dla bezpieczeństwa.
Dlatego należy ustawić limit czasu. Jeśli w określonym czasie nie będzie żadnej aktywności, połączenie SSH zostanie rozłączone. Po raz kolejny musimy edytować plik konfiguracyjny SSH.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Przewiń plik w dół, aż zobaczysz linię zaczynającą się od #ClientAliveInterval 0 . Usuń # na początku linii, zmień cyfrę 0 na żądaną wartość. Zwykle ludzie ustawiają go na 300 sekund, czyli 5 minut. Zapisz plik i zrestartuj demona SSH.
Ustaw limit liczby wpisów haseł
Zdefiniowanie limitu liczby potwierdzeń może pomóc w zapobieganiu zgadywaniu haseł i atakom typu brute-force. Po określonej liczbie żądań uwierzytelnienia użytkownik zostanie rozłączony z serwerem SSH. Domyślnie nie ma ograniczenia liczby prób wprowadzenia hasła, ale możesz to edytować w pliku konfiguracyjnym SSH.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Przewiń plik w dół, aż zobaczysz linię zaczynającą się od #MaxAuthTries 0 . Usunięcie # na początku linii powoduje zmianę liczby na żądaną wartość. Możesz ustawić go na 3. Zapisz plik podczas wprowadzania zmian i zrestartuj demona SSH.
Możesz to sprawdzić, próbując się połączyć i wprowadzając nieprawidłowe hasło.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Uwaga: liczba MaxAuthTries jest większa niż liczba prób dozwolonych przez użytkownika. Po dwóch nieudanych próbach następuje rozłączenie, co oznacza, że MaxAuthTries jest ustawione na 3.
Wyłącz logowanie roota
Zaleca się, aby nie logować się jako root, po prostu używać go jako zwykłego użytkownika w systemie Linux i używać sudo do wykonywania czynności wymagających uprawnień roota. Nie powinieneś także pozwalać rootowi na logowanie się do serwera SSH. Tylko zwykli użytkownicy mogą się łączyć. Jeśli muszą wykonać zadanie na poziomie administracyjnym, mogą również użyć sudo. Jeśli musisz pozwolić użytkownikowi root na zalogowanie się, możesz zmusić go do użycia klucza SSH.
Edytuj plik konfiguracyjny, aby wyłączyć logowanie roota.
![Jak zabezpieczyć serwer SSH Jak zabezpieczyć serwer SSH]()
Przewiń plik w dół, aż zobaczysz linię zaczynającą się od #PermitRootLogin zakaz-hasło , usuń # na początku linii.
- Jeśli chcesz uniemożliwić rootowi logowanie, zamień hasło zakazu na nr.
- Jeśli zezwolisz rootowi na logowanie, ale wymusisz użycie klucza SSH, pozostaw hasło zakazujące nienaruszone.
Zapisz zmiany i zrestartuj demona SSH.
Ostatni krok
Oczywiście, jeśli nie potrzebujesz SSH działającego na swoim komputerze, wyłącz go za pomocą następującego polecenia:
sudo systemctl stop sshd
sudo systemctl disable sshd
Życzę powodzenia!