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