Podstawy Linux #9: Zabezpieczenie serwera

Masz serwer VPS, użytkownika z sudo i klucze SSH. Teraz czas zabezpieczyć serwer przed atakami. Świeży VPS w internecie dostaje próby logowania brute-force w ciągu minut od utworzenia — to nie kwestia “czy”, ale “kiedy”.
Ta lekcja prowadzi Cię krok po kroku przez podstawowe zabezpieczenia.
⚠️ Zanim zaczniesz
Upewnij się, że masz działający dostęp przez klucz SSH do swojego użytkownika (nie root). Przetestuj w osobnym terminalu! Jeśli wyłączysz logowanie hasłem bez działającego klucza — zablokujesz się na serwerze.
Krok 1: Wyłącz logowanie hasłem
💡 Już to zrobiłeś?
Jeśli wyłączyłeś logowanie hasłem w lekcji 003 Klucze SSH — przejdź do kroku 2.
To najważniejsza zmiana. Klucz SSH ma tysiące bitów, hasło kilkanaście znaków — różnica w bezpieczeństwie jest ogromna.
sudo nano /etc/ssh/sshd_config
Znajdź i zmień (lub dodaj) te linie:
PasswordAuthentication no
PubkeyAuthentication yes
💡 Szybkie wyszukiwanie w nano
CTRL+W → wpisz “PasswordAuth” → Enter. Kursor przeskoczy do tej linii.
Zapisz (CTRL+O, Enter, CTRL+X) i zrestartuj SSH:
sudo systemctl restart sshd
⚠️ Test
Nie zamykaj bieżącej sesji SSH! Otwórz nowy terminal i sprawdź czy logowanie kluczem działa:
ssh moj-serwer
Jeśli działa — bezpiecznie zamknij starą sesję. Jeśli nie — masz jeszcze otwartą sesję żeby naprawić problem.
Krok 2: Wyłącz logowanie jako root
sudo nano /etc/ssh/sshd_config
Znajdź i zmień:
PermitRootLogin no
Restart:
sudo systemctl restart sshd
Od teraz logujesz się jako swój użytkownik i używasz sudo gdy potrzebujesz uprawnień roota.
⚠️ Zaktualizuj ~/.ssh/config na swoim komputerze!
Jeśli wcześniej logowałeś się jako root, zmień User w konfiguracji:
Host moj-serwer
HostName ADRES_IP
User roman
IdentityFile ~/.ssh/moj-serwer
Bez tej zmiany ssh moj-serwer nadal będzie próbowało logować się jako root — i zostaniesz odrzucony.
Krok 3: Zmień port SSH (opcjonalnie)
Domyślny port 22 jest skanowany przez boty non-stop. Zmiana portu nie jest prawdziwym zabezpieczeniem (security through obscurity), ale drastycznie zmniejsza ilość “szumu” w logach.
sudo nano /etc/ssh/sshd_config
Znajdź i zmień:
Port 2222
⚠️ Uwaga
Przed restartem SSH dodaj nowy port do firewalla:
sudo ufw allow 2222/tcp
Restart:
sudo systemctl restart sshd
Przetestuj w nowym terminalu:
ssh -p 2222 roman@ADRES_IP
Jeśli działa — usuń stary port z firewalla:
sudo ufw delete allow ssh
Zaktualizuj ~/.ssh/config na lokalnym komputerze:
Host moj-serwer
HostName ADRES_IP
User roman
Port 2222
IdentityFile ~/.ssh/moj-serwer
Krok 4: Zainstaluj fail2ban
Fail2ban monitoruje logi i automatycznie blokuje adresy IP po kilku nieudanych próbach logowania.
Instalacja
sudo apt update
sudo apt install fail2ban -y
Konfiguracja
Nie edytuj jail.conf bezpośrednio — stwórz plik jail.local:
sudo nano /etc/fail2ban/jail.local
Wklej:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 3
banaction = ufw
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
💡 Wyjaśnienie
bantime = 1h— zablokowany IP nie może się łączyć przez 1 godzinęfindtime = 10m— okno czasowe: 3 próby w ciągu 10 minutmaxretry = 3— po 3 nieudanych próbach = banbanaction = ufw— blokowanie przez firewall ufw
Jeśli zmieniłeś port SSH na 2222, zmień linię port:
[sshd]
enabled = true
port = 2222
Uruchomienie
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Sprawdzanie statusu
sudo fail2ban-client status sshd
Wynik pokaże ile IP jest zablokowanych:
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 47
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 5
`- Banned IP list: 203.0.113.42
Odblokowanie IP (jeśli przypadkowo zablokowałeś siebie)
sudo fail2ban-client set sshd unbanip TWOJE_IP
Krok 5: Skonfiguruj firewall (ufw)
Jeśli jeszcze tego nie zrobiłeś (lekcja Sieć i firewall):
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp # port SSH (ten który ustawiłeś w Kroku 3)
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS
sudo ufw enable
Krok 6: Automatyczne aktualizacje bezpieczeństwa
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
Wybierz Yes — system będzie automatycznie instalować krytyczne łatki bezpieczeństwa.
Krok 7: Monitoruj próby logowania
# Ostatnie udane logowania:
last
# Ostatnie nieudane logowania:
sudo lastb | head -20
# Logi auth w czasie rzeczywistym:
sudo tail -f /var/log/auth.log
Checklist zabezpieczeń
Po wykonaniu tej lekcji Twój serwer powinien mieć:
💡 Na przyszłość
To są podstawy. Przy poważniejszych wdrożeniach rozważ także: monitoring (Uptime Kuma), regularne backupy, VPN do paneli administracyjnych, logowanie do centralnego systemu (np. Grafana/Loki).






