Jak podnieść poziom bezpieczeństwa SSH?
Ten artykuł wyjaśnia, w jaki sposób można podnieść poziom bezpieczeństwa serwera SSH, korzystając z zaawansowanych ustawień. Pozwala to kontrolować aktywność klientów SSH, ustalać poziomy zaufania połączeń, izolować określonych użytkowników w katalogach oraz wprowadzać interwały dostępu, aby chronić serwer przed powszechnymi atakami na SSH. Przedstawiono kilka różnych opcji pozwalających na podniesienie poziomu bezpieczeństwa protokołu SSH wykorzystywanego o zdalnego zarządzania hostami.
Na kanale zaprezentowałem jak zainstalować openssh-server na Ubuntu 22.04 LTS. Pokazałem krok po kroku jak zainstalować oprogramowanie oraz jak podłączyć się do maszyny wirtualnej. W wielu dystrybucjach SSH zainstalowano automatycznie i nie trzeba wykonywać dodatkowych czynności. Jeśli jednak nie możesz się podłączyć do swojej maszyny w tym filmie znajdziesz podpowiedzi które pomogą Ci uzyskać dostęp.
Poniżej kilka porad dla zaawansowanych użytkowników.
Blokada logowania na konto root
Dobre praktyki związane z bezpieczeństwem systemów informatycznych stanowią o tym, że administrator powinien pracować na koncie imiennym ze standardowymi uprawnieniami. Dopiero w momencie potrzeby zmiany parametrów systemu ma nastąpić podniesienie uprawnień. Stąd podstawowy element konfiguracji SSH zakłada wyłączenie możliwości logowania użytkownika root. Można to zrobić poprzez edycję pliku /etc/ssh/sshd_config i zmianę:
#PermitRootLogin prohibit-password
na
PermitRootLogin no
Po tej zmianie należy wykonaj restart usługi tak żeby zmiany zostały wdrożone.
sudo systemctl restart sshd.service
Zmiana standardowego portu na którym działa SSH
Standardowa instalacja serwera SSH działa na porcie 22/tcp. Port można dowolnie zmienić, dlatego rozpatrując możliwości warto zastanowić się czy w Twoim środowisku jest to możliwe i faktycznie podniesie poziom bezpieczeństwa systemu. Modyfikację portu dokonasz poprzez edycję pliku /etc/ssh/sshd_config i zmianę standardowego portu:
#Port 22
na nowy np. port 1234
Port 1234
Pamiętaj u usunięciu znaku „#” na początku linii.
Dodatkowo jeśli w Twoim systemie zainstalowany jest lokalny firewall uwf zmodyfikuj reguły tak żeby komunikacja na porcie 1234 była możliwa:
sudo ufw allow 1234/tcp
sudo ufw reload
Na koniec pamiętaj o restarcie usługi SSH:
sudo systemctl restart sshd.service
Czas bezczynności sesji
Bezczynne otwarte połączenie stanowi zagrożenie, ponieważ złośliwy użytkownik może uzyskać zdalny lub fizyczny dostęp sesji klienckiej i wykonać polecenia w imieniu użytkownika. Aby chronić użytkowników systemu, konfiguracja ClientAliveInterval sprawdza czy klient jest nadal aktywny. Gdy klient jest aktywny, odpowiada na wiadomość keepalive lub serwer powtarza proces w oparciu o wartość ClientAliveCountMax przed oznaczeniem klienta jako nieaktywnego i zamknięciem połączenia. Modyfikacji dokonasz poprzez edycję pliku /etc/ssh/sshd_config i zmianę:
#ClientAliveInterval 0
Na wartość wyrażoną w sekundach, dla przykładu 180 sekund
ClientAliveInterval 180
oraz ilość prób wysłania zapytania keepalive
#ClientAliveCountMax 3
na
ClientAliveCountMax 2
Na koniec pamiętaj o restarcie usługi SSH:
sudo systemctl restart sshd.service
Powyższe opcje spowodują że realny czas braku aktywności klienta to 6 minut.
Maksymalna liczba prób logowania
Dobrą praktyką jest wskazanie, ile razy użytkownik może wpisać błędne hasło, zanim zostanie zablokowany dostęp do SSH. Włączenie tego parametru wpłynie na poprawę odporności usługi na atak typu brute-force. Modyfikacji dokonasz poprzez edycję pliku /etc/ssh/sshd_config i zmianę:
#MaxAuthTries 6
na konkretną wartość np. 5
MaxAuthTries 5
Po 5 nieudanych próbach logowania, SSH dla danego użytkownika zostanie zablokowane i ponowna poprawna próba połączenia będzie wymagać podjęcia działań ze strony administratora systemu.
Podsumowanie
Powyższe zmiany nie wyczerpują wszystkich możliwości, jednak w takim wydaniu znacząco wpłyną na poprawę bezpieczeństwa połączenia z usługą zdalnego zarządzania SSH a przez to też bezpieczeństwo całego zdalnego systemu.