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 minut
  • maxretry = 3 — po 3 nieudanych próbach = ban
  • banaction = 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).

Roman Rozenberger
Roman Rozenberger

Jestem digital marketerem ze specjalizacją w marketingu w wyszukiwarkach internetowych. Wdrażam automatyzacje z wykorzystaniem narzędzi LowCode, NoCode i AI. Identyfikuje procesy i rozwiązuję problemy.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *