Zabezpieczenie połączenia SSH przed atakami brute force
Domyślny port SSH (22) jest często celem zautomatyzowanych ataków brute force. Ten przewodnik opisuje zmianę portu SSH i dodatkowe ustawienia zwiększające bezpieczeństwo serwera.
📋 Wymagania wstępne
- Serwer VPS z dostępem root lub sudo
- Aktywne połączenie SSH
- Zainstalowany i skonfigurowany UFW (zob. tutorial Instalacja UFW)
⚠️ WAŻNE: Utrzymuj sesję SSH otwartą
Otwórz dwa terminale SSH równolegle:
- Terminal 1: sesja robocza (wprowadzasz zmiany)
- Terminal 2: zapasowa (na wypadek problemów)
🔧 Zmiana portu SSH
Krok 1: Wybór nowego portu
Wybierz port z zakresu 1024–65535. Unikaj typowych portów:
- 22 (domyślny SSH, bardzo atakowany)
- 80, 443 (HTTP/HTTPS)
- 3306, 5432 (bazy danych)
Przykłady: 2222, 2200, 1022, 5000
Krok 2: Edycja konfiguracji SSH
Bash# Edycja pliku konfiguracyjnego sshd sudo nano /etc/ssh/sshd_config
Krok 3: Zmiana portu
Znajdź linię #Port 22 i zmień ją:
# Przed
#Port 22
# Po (zamień 2222 na wybrany port)
Port 2222
Wskazówka: W nano użyj Ctrl + W, aby wyszukać „Port 22”.
Krok 4: Zapis i wyjście
W nano:
Ctrl + X— wyjścieY— potwierdzenieEnter— zapis
Krok 5: Sprawdzenie składni
Bash# Sprawdzenie poprawności konfiguracji sudo sshd -t
Brak komunikatu błędu oznacza poprawną konfigurację.
Krok 6: Zezwolenie na nowy port w UFW
Bash1# Zezwól na nowy port SSH (zamień 2222 na swój port) 2sudo ufw allow 2222/tcp 3 4# Opcjonalnie: usuń stary port 22, jeśli go nie używasz 5sudo ufw delete allow 22/tcp 6 7# Przeładuj UFW 8sudo ufw reload 9 10# Sprawdź regułę 11sudo ufw status | grep 2222
Krok 7: Restart usługi SSH
Bash1# Restart sshd z nową konfiguracją 2sudo systemctl restart sshd 3 4# Sprawdź, czy usługa działa 5sudo systemctl status sshd
Krok 8: Test nowego połączenia
W nowym terminalu przetestuj połączenie z nowym portem:
Bash# Zamień 2222 na swój port oraz user@ip na swoje dane ssh -p 2222 user@twoje-ip
Jeśli połączenie działa, możesz zamknąć starą sesję na porcie 22.
🔒 Dodatkowe opcje bezpieczeństwa
Wyłączenie logowania root
Bash1sudo nano /etc/ssh/sshd_config 2 3# Znajdź i ustaw 4PermitRootLogin no 5 6# Zapisz i restart 7sudo sshd -t 8sudo systemctl restart sshd
Ograniczenie liczby prób logowania
Bash1sudo nano /etc/ssh/sshd_config 2 3# Dodaj lub zmień te linie 4MaxAuthTries 3 # maks. 3 próby 5LoginGraceTime 30 # 30 s na zalogowanie
Wyłączenie logowania hasłem (tylko klucze SSH)
Bash1sudo nano /etc/ssh/sshd_config 2 3# Zmień 4PasswordAuthentication no 5PubkeyAuthentication yes
Tylko protokół SSH w wersji 2
Bashsudo nano /etc/ssh/sshd_config # Dodaj linię (jeśli jej brakuje) Protocol 2
Wyłączenie tuneli X11 (jeśli nie są potrzebne)
Bashsudo nano /etc/ssh/sshd_config # Ustaw X11Forwarding no
Przykładowa kompletna konfiguracja
Przykładowy bezpieczny blok w /etc/ssh/sshd_config:
# Niestandardowy port SSH
Port 2222
# Bez logowania root
PermitRootLogin no
# Limity połączeń
MaxAuthTries 3
LoginGraceTime 30
# Wyłączenie hasła (przy użyciu kluczy — odkomentuj świadomie)
# PasswordAuthentication no
# PubkeyAuthentication yes
# Tylko SSHv2
Protocol 2
# Bez przekierowania X11
X11Forwarding no
# Bez przekierowania TCP (ostrożnie — może zepsuć niektóre narzędzia)
AllowTcpForwarding no
# Rozłączenie przy bezczynności
ClientAliveInterval 300
ClientAliveCountMax 2
Po każdej zmianie:
Bashsudo sshd -t sudo systemctl restart sshd
🔄 Utworzenie użytkownika z sudo (w razie potrzeby)
Jeśli wyłączyłeś logowanie root, upewnij się, że masz użytkownika z sudo:
Bash1# Nowy użytkownik 2sudo adduser moj_uzytkownik 3 4# Dodanie do grupy sudo 5sudo usermod -aG sudo moj_uzytkownik 6 7# Test sudo 8su - moj_uzytkownik 9sudo whoami 10# Powinno wyświetlić „root”
✅ Końcowa weryfikacja
Status SSH
Bash1sudo systemctl status sshd 2 3# Nasłuch na porcie 4sudo netstat -tlnp | grep ssh 5# lub 6sudo ss -tlnp | grep ssh 7 8# Port w konfiguracji 9sudo sshd -T | grep port
Logi SSH
Bash1# Próby połączeń 2sudo tail -f /var/log/auth.log 3 4# Udane logowania 5sudo grep "Accepted" /var/log/auth.log 6 7# Nieudane próby 8sudo grep "Failed" /var/log/auth.log
🛡️ Dodatkowa ochrona: fail2ban
fail2ban automatycznie blokuje adresy IP przy wielokrotnych nieudanych próbach logowania.
Instalacja fail2ban
Bashsudo apt update sudo apt install fail2ban -y
Podstawowa konfiguracja
Bashsudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local
Przykład dla SSH:
INI1[sshd] 2enabled = true 3port = 2222 # Twój nowy port SSH 4maxretry = 3 # Próby przed banem 5bantime = 3600 # Czas bana w sekundach (1 h) 6findtime = 600 # Okno liczenia prób (10 min)
Uruchomienie fail2ban
Bash1sudo systemctl start fail2ban 2sudo systemctl enable fail2ban 3sudo systemctl status fail2ban 4 5# Lista zbanowanych IP 6sudo fail2ban-client status sshd
🆘 Rozwiązywanie problemów
Brak dostępu SSH
-
Użyj zapasowej sesji (Terminal 2).
-
Bez zapasowej sesji:
-
skontaktuj się z pomocą Infrawire z danymi dostępowymi
-
użyj konsoli VNC/KVM w panelu klienta
-
połącz się lokalnie i przywróć starą konfigurację:
Bashsudo nano /etc/ssh/sshd_config # Przywróć np. Port 22 sudo systemctl restart sshd
-
Port SSH nie odpowiada
Bashsudo netstat -tlnp | grep ssh sudo ufw status | grep 2222 sudo journalctl -u sshd -n 50
Tymczasowe połączenie przez stary port
Bashsudo ufw allow 22/tcp ssh -p 22 user@twoje-ip sudo ufw delete allow 22/tcp
📚 Dodatkowe zasoby
❓ Często zadawane pytania
P: Jaki port wybrać dla SSH?
O: Z zakresu 1024–65535. Unikaj popularnych portów usług (80, 443, 3306 itd.). Dobre są np. 2222, 2200, 1022.
P: Czy ten sam port może obsługiwać kilka usług?
O: Nie — każda usługa musi mieć własny, unikalny port.
P: Czy naprawdę trzeba zmieniać port SSH?
O: Jest to mocno zalecane — znacznie ogranicza masowe skanowanie i ataki brute force na port 22.
P: Czy fail2ban jest konieczny po zmianie portu?
O: Nie jest obowiązkowy, ale stanowi dodatkową warstwę ochrony.
P: Jak łączyć się z nowym portem w kliencie SSH?
O: Opcja -p, np. ssh -p 2222 user@twoje-ip
Bezpiecznych połączeń.