Konfiguracja serwera SSH w Debianie: Zabezpieczanie serwera SSH (zmiana portu, wyłączenie logowania roota, uwierzytelnianie kluczem publicznym)
Konfiguracja serwera SSH w Debianie: Zabezpieczanie serwera SSH (zmiana portu, wyłączenie logowania roota, uwierzytelnianie kluczem publicznym)
Bezpieczeństwo serwera jest jednym z kluczowych aspektów zarządzania systemami opartymi na Linuksie. W przypadku systemu Debian, jednym z najczęściej wykorzystywanych narzędzi do zdalnego dostępu jest SSH (Secure Shell). Choć SSH zapewnia bezpieczną komunikację między urządzeniami, niewłaściwa konfiguracja serwera może otworzyć drzwi do potencjalnych ataków. W tym artykule omówimy najlepsze praktyki konfiguracji serwera SSH w Debianie, w tym zmiany portu, wyłączenie logowania roota oraz zastosowanie uwierzytelniania kluczem publicznym.
1. Zainstalowanie i konfiguracja serwera SSH w Debianie
1.1. Instalacja pakietu OpenSSH
W systemie Debian, serwer SSH jest dostarczany przez pakiet OpenSSH. Aby zainstalować serwer SSH, należy wykonać poniższe polecenie w terminalu:
sudo apt update
sudo apt install openssh-server
Po zainstalowaniu serwera SSH, usługa powinna uruchomić się automatycznie. Można to sprawdzić poleceniem:
sudo systemctl status ssh
Jeśli serwis działa poprawnie, powinno się pojawić potwierdzenie statusu „active (running)”.
2. Zmiana domyślnego portu SSH
Domyślnie serwer SSH nasłuchuje na porcie 22. Jest to powszechnie znany port, co czyni go częstym celem ataków. Aby zwiększyć bezpieczeństwo, warto rozważyć zmianę portu SSH na niestandardowy.

2.1. Zmiana portu w pliku konfiguracyjnym SSH
Aby zmienić port serwera SSH, należy edytować plik konfiguracyjny /etc/ssh/sshd_config
. W tym celu użyj edytora tekstu:
sudo nano /etc/ssh/sshd_config
W pliku tym znajdź linię:
#Port 22
Usuń znak komentarza (początkowy #) i zmień wartość na wybrany numer portu, np. 2222:
Port 2222
Po zapisaniu zmian należy zrestartować serwis SSH, aby zmiany zaczęły obowiązywać:
sudo systemctl restart ssh
2.2. Upewnienie się, że port nie jest zablokowany przez zaporę
Jeśli korzystasz z zapory sieciowej (firewall), np. UFW (Uncomplicated Firewall), pamiętaj, aby otworzyć nowy port:
sudo ufw allow 2222/tcp
Po wykonaniu tej zmiany możesz sprawdzić status zapory, aby upewnić się, że nowy port jest dostępny:
sudo ufw status
3. Wyłączenie logowania roota przez SSH
Logowanie się bezpośrednio jako użytkownik root przez SSH stanowi poważne zagrożenie dla bezpieczeństwa serwera. Atakujący, który zna hasło roota, może uzyskać pełny dostęp do systemu. Zaleca się wyłączenie tej funkcji.
3.1. Wyłączenie logowania roota w pliku konfiguracyjnym SSH
Aby wyłączyć logowanie roota, ponownie edytujemy plik /etc/ssh/sshd_config
:
sudo nano /etc/ssh/sshd_config
Znajdź linię:
PermitRootLogin yes
Zmień wartość na no, co zablokuje możliwość logowania się jako root:
PermitRootLogin no
Zapisz plik i zrestartuj usługę SSH:
sudo systemctl restart ssh
Od teraz nie będzie można logować się bezpośrednio na konto root przez SSH. Aby wykonać zadania wymagające uprawnień roota, użytkownicy mogą używać komendy sudo.
4. Uwierzytelnianie kluczem publicznym
Zamiast logować się za pomocą haseł, które mogą zostać złamane w wyniku ataków słownikowych lub brute-force, lepszym rozwiązaniem jest użycie uwierzytelniania opartego na kluczach publicznych i prywatnych.
4.1. Generowanie pary kluczy SSH
Aby wygenerować parę kluczy SSH, na komputerze lokalnym wykonaj poniższe polecenie:
ssh-keygen -t rsa -b 2048
Po wprowadzeniu tego polecenia, użytkownik zostanie poproszony o wybór lokalizacji, w której chce zapisać klucze. Zostanie również zapytany o opcjonalne hasło zabezpieczające klucz prywatny.
4.2. Kopiowanie klucza publicznego na serwer
Po wygenerowaniu klucza publicznego, należy go skopiować na serwer. Najłatwiejszym sposobem jest użycie narzędzia ssh-copy-id, które automatycznie dodaje klucz publiczny do pliku authorized_keys
na serwerze.
Wykonaj poniższe polecenie:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@hostname
Zamień username na nazwę użytkownika, a hostname na adres IP lub nazwę hosta serwera. Po wykonaniu tej komendy, klucz publiczny zostanie dodany do odpowiedniego pliku na serwerze, umożliwiając logowanie się bez potrzeby podawania hasła.
4.3. Wymuszenie używania kluczy SSH
Po skonfigurowaniu klucza publicznego, warto wymusić używanie tylko tej metody uwierzytelniania i wyłączyć logowanie za pomocą hasła. W tym celu edytujemy plik /etc/ssh/sshd_config
:
sudo nano /etc/ssh/sshd_config
Zmodyfikuj następujące linie:
PasswordAuthentication no
PubkeyAuthentication yes
Po zapisaniu zmian, zrestartuj serwis SSH:
sudo systemctl restart ssh
Teraz użytkownicy będą mogli logować się tylko przy użyciu kluczy SSH, a logowanie za pomocą haseł zostanie zablokowane.
5. Dodatkowe zabezpieczenia serwera SSH
Oprócz podstawowych zmian, warto rozważyć wdrożenie dodatkowych zabezpieczeń w celu ochrony serwera SSH:
5.1. Ograniczenie dostępu do serwera SSH za pomocą zapory
Za pomocą zapory sieciowej (np. UFW), można zezwolić na dostęp do serwera SSH tylko z określonych adresów IP. Przykład konfiguracji:
sudo ufw allow from <adres_ip> to any port 2222 proto tcp
5.2. Zainstalowanie Fail2ban
Fail2ban to narzędzie, które monitoruje logi systemowe i automatycznie blokuje adresy IP, z których wykryto podejrzane próby logowania. Aby zainstalować Fail2ban, użyj poniższego polecenia:
sudo apt install fail2ban
Po zainstalowaniu, Fail2ban automatycznie zacznie monitorować serwer SSH i blokować adresy IP po wykryciu złośliwych prób logowania.
6. Podsumowanie
Zabezpieczenie serwera SSH w Debianie jest kluczowe dla ochrony systemu przed nieautoryzowanym dostępem. Zmiana domyślnego portu, wyłączenie logowania roota oraz zastosowanie uwierzytelniania kluczem publicznym stanowią podstawowe elementy konfiguracji bezpiecznego serwera SSH. Dodatkowo, zastosowanie narzędzi takich jak Fail2ban czy ograniczenie dostępu przez zaporę sieciową zapewnia jeszcze większą ochronę przed atakami z sieci. Zastosowanie tych najlepszych praktyk pomoże zapewnić, że nasz serwer Debian będzie bezpieczny i odporny na ataki.