🔐 Jak skonfigurować serwer SSH na Ubuntu 20.04

SSH (Secure Shell) to podstawowe narzędzie każdego administratora, umożliwiające bezpieczne zdalne zarządzanie serwerem. Prawidłowa konfiguracja serwera SSH jest kluczowa dla utrzymania bezpieczeństwa i efektywnego zarządzania systemem. W tym poradniku przeprowadzimy Cię krok po kroku przez proces instalacji, konfiguracji i zabezpieczenia serwera SSH na Ubuntu 20.04.

⚡ Ekspresowe Podsumowanie:

  1. Instalacja OpenSSH: Wykorzystanie apt install openssh-server do zainstalowania serwera SSH.
  2. Podstawowa konfiguracja: Edycja pliku /etc/ssh/sshd_config do dostosowania podstawowych ustawień, w tym zmiana domyślnego portu.
  3. Uwierzytelnianie kluczem: Konfiguracja uwierzytelniania kluczem SSH zamiast hasła dla zwiększenia bezpieczeństwa.
  4. Dodatkowe zabezpieczenia: Implementacja Fail2ban, filtrów IP i dodatkowych ustawień dla ochrony przed nieautoryzowanym dostępem.

🗺️ Spis Treści - Twoja Mapa Drogowa


📚 Podstawowe informacje o SSH

SSH (Secure Shell) to protokół sieciowy umożliwiający bezpieczną komunikację między komputerami. W przeciwieństwie do starszych protokołów, jak Telnet czy FTP, SSH zapewnia szyfrowaną komunikację, co jest kluczowe w dzisiejszym świecie cyberbezpieczeństwa.

Dlaczego warto używać SSH?

  • Bezpieczeństwo - cała komunikacja jest szyfrowana
  • Uwierzytelnianie - pewna identyfikacja zarówno klienta, jak i serwera
  • Integralność - zapewnienie, że dane nie zostały zmienione podczas transmisji
  • Tunelowanie - możliwość tworzenia zaszyfrowanych tuneli dla innych protokołów
  • Przekierowanie portów - umożliwia bezpieczny dostęp do usług na zdalnym serwerze

OpenSSH - standardowa implementacja

OpenSSH to najpopularniejsza implementacja protokołu SSH, otwarta i darmowa. Jest domyślnie dostępna w większości dystrybucji Linuxa, w tym w Ubuntu. OpenSSH składa się z kilku kluczowych komponentów:

  • sshd - daemon serwera SSH nasłuchujący na połączenia przychodzące
  • ssh - klient umożliwiający łączenie się z serwerami SSH
  • scp - narzędzie do kopiowania plików między komputerami
  • sftp - bezpieczna alternatywa dla FTP
  • ssh-keygen - narzędzie do generowania i zarządzania kluczami SSH

💡 Instalacja serwera SSH na Ubuntu 20.04

Instalacja OpenSSH na Ubuntu 20.04 jest prosta i wymaga zaledwie kilku komend. Proces ten jest podobny także dla nowszych wersji Ubuntu.

Krok 1: Aktualizacja systemu

Przed instalacją jakiegokolwiek oprogramowania warto zaktualizować indeksy pakietów i sam system:

sudo apt update
sudo apt upgrade -y

Krok 2: Instalacja pakietu openssh-server

sudo apt install openssh-server -y

Krok 3: Weryfikacja statusu usługi SSH

Po instalacji serwer SSH powinien zostać automatycznie uruchomiony. Możesz to zweryfikować komendą:

sudo systemctl status ssh

Powinieneś zobaczyć informację o statusie "active (running)". Jeśli usługa nie jest uruchomiona, możesz ją aktywować:

sudo systemctl start ssh
sudo systemctl enable ssh

Krok 4: Konfiguracja zapory sieciowej

Jeśli używasz zapory UFW (Uncomplicated Firewall), musisz zezwolić na ruch SSH:

sudo ufw allow ssh

Jeśli później zmienisz port SSH, musisz zaktualizować regułę zapory:

# Przykład dla portu 2222
sudo ufw allow 2222/tcp

Uwaga: Jeśli korzystasz z panelu zarządzania hostingiem lub usługi w chmurze, możliwe, że będziesz także musiał skonfigurować tam reguły zapory sieciowej, aby zezwolić na ruch SSH.

Weryfikacja dostępu SSH

Po instalacji możesz zweryfikować działanie SSH, próbując połączyć się z nim z innego komputera:

ssh username@server_ip

Zastąp username swoją nazwą użytkownika na serwerze, a server_ip adresem IP Twojego serwera.

🛠️ Podstawowa konfiguracja serwera SSH

Domyślna konfiguracja SSH jest funkcjonalna, ale warto dostosować ją do własnych potrzeb i zwiększyć poziom bezpieczeństwa.

Lokalizacja pliku konfiguracyjnego

Główny plik konfiguracyjny serwera SSH znajduje się w:

/etc/ssh/sshd_config

Tworzenie kopii zapasowej

Przed wprowadzeniem zmian w konfiguracji, warto utworzyć kopię zapasową oryginalnego pliku:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

Edycja pliku konfiguracyjnego

Otwórz plik konfiguracyjny w edytorze tekstu:

sudo nano /etc/ssh/sshd_config

Kluczowe ustawienia do rozważenia

1. Zmiana domyślnego portu

Domyślnie SSH nasłuchuje na porcie 22. Zmiana tego portu może zmniejszyć liczbę automatycznych ataków:

# Zmień tę linię:
# Port 22
# Na:
Port 2222  # Użyj dowolnego portu powyżej 1024

✨ Pro Tip: Wybierz port, który nie jest używany przez inne usługi i nie jest standardowo skanowany, ale jednocześnie jest łatwy do zapamiętania.

2. Ograniczenie logowania jako root

Jednym z podstawowych kroków bezpieczeństwa jest wyłączenie możliwości bezpośredniego logowania jako użytkownik root:

# Zmień tę linię:
# PermitRootLogin yes
# Na:
PermitRootLogin no

3. Ograniczenie dozwolonych użytkowników

Możesz określić, którzy użytkownicy mogą się logować przez SSH:

AllowUsers user1 user2 admin

4. Konfiguracja czasu bezczynności

Ustawienie automatycznego rozłączania nieaktywnych sesji:

ClientAliveInterval 300  # w sekundach
ClientAliveCountMax 2

Te ustawienia spowodują rozłączenie sesji po 10 minutach nieaktywności.

5. Wyłączenie logowania hasłem (po skonfigurowaniu kluczy SSH)

Po skonfigurowaniu uwierzytelniania kluczem, możesz wyłączyć logowanie hasłem:

# Zmień:
# PasswordAuthentication yes
# Na:
PasswordAuthentication no

6. Konfiguracja wersji protokołu

Upewnij się, że używasz tylko protokołu SSH w wersji 2 (bezpieczniejszej):

# Upewnij się, że masz:
Protocol 2

Zastosowanie zmian

Po wprowadzeniu zmian, zapisz plik (w nano: Ctrl+O, Enter, Ctrl+X) i zrestartuj usługę SSH:

sudo systemctl restart ssh

Uwaga: Podczas testowania nowej konfiguracji SSH zawsze utrzymuj aktywną sesję i nie zamykaj jej, dopóki nie zweryfikujesz, że możesz się połączyć z nowymi ustawieniami. W przypadku problemów zawsze możesz wrócić do konsoli serwera i naprawić konfigurację.

🔑 Konfiguracja uwierzytelniania kluczem SSH

Uwierzytelnianie kluczem SSH jest znacznie bezpieczniejsze niż używanie haseł. Opiera się na parze kluczy: prywatnym (przechowywany na Twoim komputerze) i publicznym (umieszczany na serwerze).

Krok 1: Generowanie pary kluczy na komputerze klienckim

Na swoim komputerze (nie na serwerze) wygeneruj parę kluczy:

ssh-keygen -t ed25519 -C "twój_email@domena.pl"

Możesz również użyć algorytmu RSA z długim kluczem, jeśli potrzebujesz większej kompatybilności:

ssh-keygen -t rsa -b 4096 -C "twój_email@domena.pl"

Podczas generowania zostaniesz poproszony o:

  • Lokalizację zapisu kluczy (zwykle domyślna jest dobra)
  • Hasło zabezpieczające klucz (zdecydowanie zalecane)

Krok 2: Kopiowanie klucza publicznego na serwer

Użyj ssh-copy-id do skopiowania klucza publicznego na serwer:

ssh-copy-id username@server_ip

Jeśli zmieniłeś port SSH, musisz to określić:

ssh-copy-id -p 2222 username@server_ip

Alternatywnie, możesz skopiować klucz ręcznie:

cat ~/.ssh/id_ed25519.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Krok 3: Testowanie logowania kluczem

Spróbuj zalogować się na serwer:

ssh username@server_ip

Jeśli ustawiłeś hasło dla klucza, zostaniesz poproszony o jego podanie.

Krok 4: Wyłączenie logowania hasłem

Po potwierdzeniu, że możesz się zalogować kluczem, wyłącz logowanie hasłem edytując plik /etc/ssh/sshd_config jak opisano w poprzedniej sekcji:

PasswordAuthentication no

Dodatkowe opcje dla kluczy SSH

Używanie agenta SSH

Agent SSH pozwala na przechowywanie odblokowanych kluczy w pamięci, co eliminuje potrzebę wielokrotnego wpisywania hasła:

# Uruchomienie agenta
eval $(ssh-agent -s)

# Dodanie klucza do agenta
ssh-add ~/.ssh/id_ed25519

Konfiguracja pliku ~/.ssh/config

Stworzenie pliku konfiguracyjnego dla klienta SSH może uprościć łączenie z wieloma serwerami:

# ~/.ssh/config
Host server1
    HostName server1.example.com
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host server2
    HostName 192.168.1.2
    User user2
    Port 22
    IdentityFile ~/.ssh/server2_key

Z taką konfiguracją możesz po prostu wpisać ssh server1, a wszystkie ustawienia zostaną zastosowane automatycznie.

🛡️ Zaawansowane zabezpieczenia serwera SSH

Podstawowa konfiguracja to dobry początek, ale możesz dodatkowo zabezpieczyć swój serwer SSH.

Instalacja i konfiguracja Fail2ban

Fail2ban to narzędzie, które monitoruje logi i blokuje adresy IP, z których pochodzą powtarzające się nieudane próby logowania.

Instalacja Fail2ban:

sudo apt install fail2ban -y

Konfiguracja Fail2ban dla SSH:

Utwórz plik konfiguracyjny:

sudo nano /etc/fail2ban/jail.local

I dodaj następującą konfigurację:

[sshd]
enabled = true
port = ssh  # lub twój niestandardowy port
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600  # czas blokady w sekundach (1 godzina)
findtime = 600  # okres, w którym liczba nieudanych prób jest liczona (10 minut)

Uruchom Fail2ban:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Ograniczenie dostępu za pomocą TCP Wrappers

TCP Wrappers to prosta metoda kontroli dostępu oparta na adresach IP:

Edytuj plik /etc/hosts.allow:

# /etc/hosts.allow
sshd: 192.168.1.0/24  # Zezwól na dostęp z sieci lokalnej

Edytuj plik /etc/hosts.deny:

# /etc/hosts.deny
sshd: ALL  # Blokuj wszystkie inne połączenia

Używanie 2FA (dwuskładnikowej autentykacji)

Możesz dodać dodatkową warstwę zabezpieczeń poprzez skonfigurowanie dwuskładnikowej autentykacji:

Instalacja Google Authenticator:

sudo apt install libpam-google-authenticator -y

Konfiguracja dla twojego użytkownika:

google-authenticator

Postępuj zgodnie z instrukcjami, aby skonfigurować aplikację i zapisz kody zapasowe.

Konfiguracja PAM:

Edytuj plik /etc/pam.d/sshd:

# Dodaj na końcu pliku
auth required pam_google_authenticator.so

Edytuj /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes

Zrestartuj serwer SSH:

sudo systemctl restart ssh

Konfiguracja limitu czasu i liczby prób logowania

Dodaj do /etc/ssh/sshd_config:

# Limit liczby prób logowania
MaxAuthTries 3

# Limit czasu na uwierzytelnienie
LoginGraceTime 30s

Dodatkowe ustawienia dla zwiększenia bezpieczeństwa

# Wyłącz puste hasła
PermitEmptyPasswords no

# Wyłącz przekierowanie X11
X11Forwarding no

# Czy hostowanie TCP jest dozwolone
AllowTcpForwarding no

# Czy dozwolone jest tunelowanie
PermitTunnel no

# Limit maksymalnej liczby sesji
MaxSessions 2

# Wyłącz kompresję (może być używana do ataków)
Compression no

📈 Monitorowanie i debugowanie SSH

Przydatne narzędzia i techniki do monitorowania i rozwiązywania problemów z SSH.

Przeglądanie logów SSH

Logi SSH są przechowywane w pliku /var/log/auth.log:

# Przeglądanie ostatnich wpisów log
sudo tail -f /var/log/auth.log

# Wyszukiwanie prób logowania
sudo grep "Failed password" /var/log/auth.log

# Wyszukiwanie udanych logowań
sudo grep "Accepted" /var/log/auth.log

Uruchamianie SSH w trybie debug

W przypadku problemów, możesz uruchomić serwer SSH z dodatkowymi informacjami debugowania:

# Zatrzymaj standardową usługę
sudo systemctl stop ssh

# Uruchom SSH w trybie verbose
sudo /usr/sbin/sshd -d

Uwaga: W trybie debugowania serwer działa na pierwszym planie i obsługuje tylko jedno połączenie. Jest to przeznaczone tylko do rozwiązywania problemów.

Monitorowanie aktywnych połączeń SSH

# Wyświetlanie aktywnych połączeń SSH
who

# Bardziej szczegółowe informacje
w

# Sprawdzanie otwartych portów SSH
sudo ss -tulpn | grep ssh

Narzędzia do monitorowania w czasie rzeczywistym

# Instalacja htop
sudo apt install htop -y

# Monitoring procesów
htop

# Monitorowanie sieci
sudo apt install iftop -y
sudo iftop

🚩 Typowe problemy i ich rozwiązania

Problem 1: Nie można połączyć się z serwerem SSH

Możliwe przyczyny:

  • SSH nie jest uruchomiony
  • Zapora blokuje port
  • Problemy z siecią

Rozwiązania:

  1. Sprawdź status usługi: sudo systemctl status ssh
  2. Upewnij się, że zapora zezwala na ruch SSH: sudo ufw status
  3. Sprawdź, czy port jest otwarty: sudo ss -tulpn | grep ssh
  4. Sprawdź połączenie sieciowe: ping server_ip

Problem 2: Odmowa dostępu przy logowaniu kluczem

Możliwe przyczyny:

  • Niepoprawne uprawnienia plików
  • Klucz publiczny nie został poprawnie dodany
  • Konfiguracja SSH nie zezwala na uwierzytelnianie kluczem

Rozwiązania:

  1. Ustaw odpowiednie uprawnienia:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  2. Upewnij się, że klucz publiczny jest w pliku ~/.ssh/authorized_keys
  3. Sprawdź ustawienia w /etc/ssh/sshd_config:
    PubkeyAuthentication yes

Problem 3: Powolne logowanie SSH

Możliwe przyczyny:

  • Problemy z DNS
  • UseDNS włączone w konfiguracji
  • Problemy z generowaniem entropii

Rozwiązania:

  1. Wyłącz UseDNS w /etc/ssh/sshd_config:
    UseDNS no
  2. Zainstaluj haveged dla lepszej entropii:
    sudo apt install haveged -y

Problem 4: Błędy "Connection reset by peer"

Możliwe przyczyny:

  • Niestabilne połączenie
  • Problemy z MTU
  • Zbyt restrykcyjne ustawienia SSH

Rozwiązania:

  1. Użyj opcji keep-alive w kliencie:
    # W ~/.ssh/config
    ServerAliveInterval 30
    ServerAliveCountMax 3
  2. Zmodyfikuj MTU:
    sudo ip link set dev eth0 mtu 1492

🔄 Regularna konserwacja i najlepsze praktyki

Utrzymanie bezpiecznego serwera SSH wymaga regularnej konserwacji:

Aktualizacje bezpieczeństwa

Regularnie aktualizuj system i pakiet SSH:

sudo apt update
sudo apt upgrade openssh-server -y

Audyt konfiguracji

Okresowo sprawdzaj konfigurację SSH pod kątem bezpieczeństwa:

# Narzędzie lynis może pomóc w audycie
sudo apt install lynis -y
sudo lynis audit system

Rotacja kluczy

Co jakiś czas rozważ wygenerowanie nowych kluczy SSH, zwłaszcza jeśli uważasz, że obecne mogły zostać skompromitowane:

# Wygeneruj nowe klucze
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new

# Dodaj nowy klucz na serwer
ssh-copy-id -i ~/.ssh/id_ed25519_new.pub username@server_ip

# Usuń stary klucz z serwera
ssh username@server_ip "sed -i '/OLD_KEY_CONTENT/d' ~/.ssh/authorized_keys"

Przegląd zalogowanych użytkowników

Regularnie sprawdzaj, kto jest zalogowany na Twoim serwerze:

w
last
lastlog

Backup konfiguracji

Rób kopie zapasowe konfiguracji SSH, zwłaszcza po wprowadzeniu istotnych zmian:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.$(date +%Y%m%d)

🏁 Podsumowanie - Bezpieczny serwer SSH

Prawidłowa konfiguracja serwera SSH jest fundamentalnym elementem bezpieczeństwa każdego serwera. Dzięki przedstawionym w tym poradniku krokom możesz znacząco zwiększyć poziom bezpieczeństwa, jednocześnie zachowując wygodę zdalnego zarządzania systemem.

✅ Twoja Checklista Bezpieczeństwa SSH:

  • 🔑 Używaj uwierzytelniania kluczem zamiast hasła
  • 🔢 Zmień domyślny port SSH (z 22 na inny)
  • 🚫 Wyłącz bezpośrednie logowanie jako root
  • 👥 Ogranicz listę użytkowników, którzy mogą się logować
  • 🕒 Skonfiguruj automatyczne rozłączanie nieaktywnych sesji
  • 🔒 Zainstaluj i skonfiguruj Fail2ban
  • 🛡️ Rozważ dwuskładnikową autentykację
  • 📊 Regularnie monitoruj logi i próby logowania
  • 🔄 Systematycznie aktualizuj system i pakiet SSH

Pamiętaj, że bezpieczeństwo to proces, a nie stan - wymaga ciągłej uwagi i dostosowywania do zmieniającego się środowiska zagrożeń.

🚀 Wypróbuj nasze bezpieczne serwery VPS już dziś!

Sprawdź ofertę serwerów VPS w IQHost

Nasze serwery VPS oferują pełną kontrolę nad konfiguracją, wysoką wydajność oraz wsparcie techniczne w języku polskim. Idealny wybór zarówno dla początkujących, jak i doświadczonych administratorów.

❓ FAQ - Odpowiedzi na Twoje Pytania

Czy mogę całkowicie zablokować dostęp SSH z internetu i korzystać tylko z VPN?
Tak, to bardzo bezpieczne podejście. Możesz skonfigurować serwer SSH, aby nasłuchiwał tylko na interfejsie VPN lub lokalnym adresie IP, edytując linię ListenAddress w pliku /etc/ssh/sshd_config.

Jak mogę połączyć się z serwerem SSH przez niestandardowy port?
Użyj parametru -p: ssh -p 2222 username@server_ip. Możesz też dodać to ustawienie do pliku konfiguracyjnego SSH (~/.ssh/config).

Czy powinienem zainstalować SSH na serwerze webowym?
Tak, SSH jest standardowym i bezpiecznym sposobem zdalnego zarządzania serwerem. Przy odpowiedniej konfiguracji oferuje wysoki poziom bezpieczeństwa.

Jak mogę zarządzać wieloma kluczami SSH dla różnych serwerów?
Użyj pliku konfiguracyjnego ~/.ssh/config do określenia, który klucz ma być używany dla którego serwera. Możesz też używać agenta SSH do zarządzania wieloma kluczami.

Czy mogę używać SSH do zadań innych niż logowanie na serwer?
Tak, SSH jest wszechstronnym narzędziem. Możesz go używać do tunelowania ruchu, przekierowania portów, bezpiecznego kopiowania plików (SCP/SFTP) czy nawet do tworzenia zaszyfrowanych proxy SOCKS.

Czy ten artykuł był pomocny?

Wróć do listy wpisów

Twoja strona WordPress działa wolno?

Sprawdź nasz hosting WordPress z ultraszybkimi dyskami NVMe i konfiguracją serwera zoptymalizowaną pod kątem wydajności. Doświadcz różnicy już dziś!

Sprawdź ofertę hostingu
30-dniowa gwarancja zwrotu pieniędzy