OKWszystkie usługi działają prawidłowo
InfrawireLogo InfrawireDokumentacja

Zabezpieczenie połączenia SSH

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ście
  • Y — potwierdzenie
  • Enter — 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

Bash
1# 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

Bash
1# 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

Bash
1sudo 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

Bash
1sudo 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)

Bash
1sudo nano /etc/ssh/sshd_config 2 3# Zmień 4PasswordAuthentication no 5PubkeyAuthentication yes

Tylko protokół SSH w wersji 2

Bash
sudo nano /etc/ssh/sshd_config # Dodaj linię (jeśli jej brakuje) Protocol 2

Wyłączenie tuneli X11 (jeśli nie są potrzebne)

Bash
sudo 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:

Bash
sudo 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:

Bash
1# 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

Bash
1sudo 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

Bash
1# 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

Bash
sudo apt update sudo apt install fail2ban -y

Podstawowa konfiguracja

Bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local

Przykład dla SSH:

INI
1[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

Bash
1sudo 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

  1. Użyj zapasowej sesji (Terminal 2).

  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ę:

      Bash
      sudo nano /etc/ssh/sshd_config # Przywróć np. Port 22 sudo systemctl restart sshd

Port SSH nie odpowiada

Bash
sudo netstat -tlnp | grep ssh sudo ufw status | grep 2222 sudo journalctl -u sshd -n 50

Tymczasowe połączenie przez stary port

Bash
sudo 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ń.