Zmiana portu SSH
Zmiana domyślnego portu SSH (22) zmniejsza narażenie na automatyczne skanowanie i podstawowe ataki brute-force, ale nie zastępuje odpowiednich środków bezpieczeństwa.
Przed wprowadzeniem jakichkolwiek zmian upewnij się, że masz otwartą aktywną sesję SSH. Nie zamykaj jej, dopóki nie sprawdzisz, czy nowy port działa. Jeśli coś pójdzie nie tak, utracisz dostęp do serwera.
Wybór numeru portu
Wybierz numer portu większy niż 1024. Porty z zakresu 49152–65535 rzadziej kolidują z innymi znanymi usługami. Unikaj często używanych alternatyw, takich jak 2222 lub 22222, ponieważ są one często celem automatycznych skanerów. W tym poradniku jako przykład używany jest port 22777.
Utworzenie kopii zapasowej pliku konfiguracyjnego
Przed wprowadzeniem jakichkolwiek zmian utwórz kopię zapasową pliku konfiguracyjnego SSH:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
Zmiana portu SSH w Ubuntu i Debianie
Od wersji Debian 12 oraz w niektórych nowszych wersjach Ubuntu (22.04+) SSH może domyślnie korzystać z aktywacji gniazda systemd. W takim przypadku sama zmiana dyrektywy Port w pliku sshd_config często nie wystarcza.
Najpierw sprawdź, czy aktywacja gniazda jest włączona:
systemctl is-active ssh.socket
Jeśli polecenie zwróci active, skonfiguruj gniazdo SSH tak, aby korzystało z nowego portu.
Utwórz nadpisanie systemd dla gniazda SSH:
systemctl edit ssh.socket
Dodaj następującą zawartość:
[Socket] ListenStream= ListenStream=22777
Pusta linia ListenStream= usuwa domyślny port (22). Bez niej SSH może nasłuchiwać zarówno na porcie 22, jak i na nowym porcie.
Aby zwiększyć niezawodność, ustaw port również w konfiguracji SSH. Pomaga to generatorowi systemd i zachowuje ustawienie po aktualizacjach OpenSSH:
mkdir -p /etc/ssh/sshd_config.d echo "Port 22777" | tee /etc/ssh/sshd_config.d/10-port.conf
Aby zapewnić lepszą kompatybilność, możesz również jawnie określić adresy:
[Socket] ListenStream= ListenStream=0.0.0.0:22777 ListenStream=[::]:22777
Zapisz konfigurację i zastosuj zmiany:
systemctl daemon-reload systemctl restart ssh.socket systemctl restart ssh
Sprawdź, czy usługa jest uruchomiona:
systemctl status ssh.socket
W niektórych nowszych systemach, takich jak Ubuntu 24.04+, generator systemd może automatycznie odczytywać port z pliku sshd_config. W takim przypadku wystarczające może być bezpośrednie zmodyfikowanie Port, a następnie wykonanie polecenia systemctl daemon-reload i systemctl restart ssh.socket. Opisana powyżej metoda z nadpisaniem działa we wszystkich wersjach.
Starsze wersje Ubuntu i Debiana
W wersjach Ubuntu starszych niż 22.04 oraz Debian starszych niż 12 SSH nie jest zarządzany za pomocą aktywacji gniazda. Otwórz plik konfiguracyjny SSH:
nano /etc/ssh/sshd_config
Znajdź następującą linię:
Port 22
Usuń znak komentarza i zastąp 22 wybranym numerem portu:
Port 22777
Zapisz plik i sprawdź poprawność konfiguracji:
sshd -t
Jeśli polecenie nie zostanie znalezione, użyj:
/usr/sbin/sshd -t
Jeśli polecenie nie zwróci żadnego wyniku, konfiguracja jest prawidłowa. Uruchom ponownie usługę SSH:
systemctl restart ssh
Wyłączenie aktywacji gniazda
Jeśli wolisz zarządzać SSH za pomocą tradycyjnej usługi zamiast gniazda, możesz wyłączyć aktywację gniazda:
systemctl disable --now ssh.socket systemctl enable --now ssh
Następnie edytuj sshd_config zgodnie z powyższym opisem i uruchom ponownie SSH za pomocą:
systemctl restart ssh
Zmiana portu SSH w AlmaLinux, Rocky Linux i CentOS
Edycja pliku konfiguracyjnego SSH
Otwórz plik konfiguracyjny SSH:
nano /etc/ssh/sshd_config
Znajdź następującą linię:
Port 22
Usuń znak komentarza i zastąp 22 wybranym numerem portu:
Port 22777
Zapisz plik i sprawdź poprawność konfiguracji:
/usr/sbin/sshd -t
Jeśli polecenie nie zwróci żadnego wyniku, konfiguracja jest prawidłowa. Uruchom ponownie usługę SSH:
systemctl restart sshd
Sprawdź, czy usługa jest uruchomiona:
systemctl status sshd
Zezwolenie na port w SELinux
W systemach z włączonym SELinux należy również zezwolić na używanie nowego portu w polityce SELinux. Aby sprawdzić, które porty są obecnie dozwolone dla SSH, uruchom:
semanage port -l | grep ssh
Następnie dodaj lub zmodyfikuj nowy port:
semanage port -a -t ssh_port_t -p tcp 22777 || semanage port -m -t ssh_port_t -p tcp 22777
Jeśli semanage nie jest zainstalowany, zainstaluj wymagany pakiet:
dnf install policycoreutils-python-utils
Konfiguracja zapory sieciowej
Zawsze zezwalaj na nowy port w zaporze przed ponownym uruchomieniem SSH. Jeśli najpierw zrestartujesz SSH, możesz utracić dostęp do serwera.
UFW
ufw allow 22777/tcp ufw reload ufw status
firewalld
firewall-cmd --permanent --zone=public --add-port=22777/tcp firewall-cmd --reload
iptables
iptables -I INPUT -p tcp --dport 22777 -j ACCEPT iptables-save > /etc/iptables/rules.v4
Polecenie iptables-save zapisuje reguły do pliku tylko wtedy, gdy pakiet iptables-persistent jest zainstalowany i skonfigurowany w systemie. Aby go zainstalować, uruchom:
apt install -y iptables-persistent
Przed poleganiem na tym pliku w celu zachowania reguł po restarcie sprawdź, czy Twoja dystrybucja korzysta z tego pliku. Pamiętaj, że współczesne systemy mogą używać nftables zamiast iptables. Jeśli korzystasz z nftables, dodaj regułę zezwalającą na nowy port w konfiguracji nftables.
Konfiguracja Fail2Ban
Jeśli Fail2Ban jest skonfigurowany na serwerze, zaktualizuj port SSH w jego konfiguracji. Otwórz /etc/fail2ban/jail.local lub odpowiedni plik w katalogu /etc/fail2ban/jail.d/ i ustaw:
port = 22777
Po zaktualizowaniu konfiguracji uruchom ponownie Fail2Ban:
systemctl restart fail2ban
Weryfikacja nowego portu
Sprawdź, czy SSH nasłuchuje na nowym porcie:
ss -tlnp | grep :22777
Alternatywnie możesz wyświetlić wszystkie nasłuchujące usługi związane z SSH:
ss -tlnp | grep ssh
Na starszych systemach użyj zamiast tego netstat:
netstat -tlnp | grep :22777
Możesz również bezpośrednio sprawdzić stan usługi.
W Ubuntu i Debianie:
systemctl status ssh.socket
W AlmaLinux, Rocky Linux i CentOS:
systemctl status sshd
Nie zamykając bieżącej sesji SSH, otwórz nowe okno terminala i połącz się przy użyciu nowego portu:
ssh root@YOUR_SERVER_IP -p 22777
Jeśli połączenie zakończy się powodzeniem, możesz zamknąć starą sesję. Następnie usuń port 22 z reguł zapory, jeśli nie jest już potrzebny.
Dla UFW:
ufw delete allow 22/tcp ufw reload
Dla firewalld:
firewall-cmd --permanent --zone=public --remove-port=22/tcp firewall-cmd --reload
Nie usuwaj portu 22 z zapory przed sprawdzeniem, czy nowy port działa. Jeśli nowe połączenie nie powiedzie się, użyj otwartej sesji SSH, aby rozwiązać problem lub cofnąć zmiany:
systemctl revert ssh.socket cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config rm -f /etc/ssh/sshd_config.d/10-port.conf systemctl daemon-reload systemctl restart ssh.socket
Jeśli aktywacja gniazda jest wyłączona, zastąp dwa ostatnie polecenia poleceniem:
systemctl restart ssh
Podsumowanie
Zmiana domyślnego portu SSH z 22 na niestandardowy port może zmniejszyć narażenie na automatyczne skanowanie i podstawowe próby ataków brute-force. Zmianę portu należy jednak traktować jako dodatkowy środek bezpieczeństwa, a nie jako zamiennik odpowiedniego zabezpieczenia SSH.
Zawsze pozostawiaj bieżącą sesję SSH otwartą do momentu pomyślnego nawiązania połączenia przy użyciu nowego portu. Po zweryfikowaniu nowego połączenia możesz bezpiecznie zamknąć starą sesję i usunąć port 22 z zapory, jeśli nie jest już wymagany.