Bezpieczeństwo VPS — checklist po instalacji
Opublikowano: 9 kwietnia 2026 · Kategoria: VPS, Bezpieczeństwo
Świeży VPS z domyślną konfiguracją Ubuntu jest dostępny w internecie z otwartym portem 22 i hasłem root — to cel dla zautomatyzowanych skanerów, które szukają słabych haseł i znanych podatności. W ciągu minut od uruchomienia serwera zaczną pojawiać się próby logowania. Ten checklist obejmuje 18 kroków, które zamkniesz w 1–2 godziny i które radykalnie poprawią bezpieczeństwo Twojego VPS.
Blok 1: SSH Hardening (kroki 1–6)
1. Utwórz użytkownika non-root z sudo
# Utwórz nowego użytkownika adduser admin_user # Dodaj do grupy sudo usermod -aG sudo admin_user # Zaloguj się jako nowy użytkownik i sprawdź sudo su - admin_user sudo whoami # Powinno zwrócić: root
2. Skonfiguruj klucze SSH
# Na lokalnym komputerze — generuj klucz (jeśli nie masz) ssh-keygen -t ed25519 -C "vps-admin" # Skopiuj klucz publiczny na VPS ssh-copy-id -i ~/.ssh/id_ed25519.pub admin_user@IP_VPS # Lub ręcznie — na VPS jako admin_user: mkdir -p ~/.ssh && chmod 700 ~/.ssh # Wklej zawartość id_ed25519.pub do: nano ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
3–6. Edytuj /etc/ssh/sshd_config
# /etc/ssh/sshd_config — kluczowe zmiany # 3. Zmień port SSH (domyślnie 22) Port 2222 # 4. Wyłącz logowanie jako root PermitRootLogin no # 5. Wyłącz logowanie hasłem (TYLKO po skonfigurowaniu kluczy SSH!) PasswordAuthentication no PubkeyAuthentication yes # 6. Ogranicz czas na logowanie i maksymalną liczbę prób LoginGraceTime 30 MaxAuthTries 3 MaxSessions 5 # Opcjonalnie: ogranicz logowanie do konkretnych użytkowników AllowUsers admin_user
# Zrestartuj SSH (UWAGA: nie wylogowuj się przed sprawdzeniem!) systemctl restart sshd # Otwórz NOWY terminal i przetestuj nowe połączenie: ssh -p 2222 -i ~/.ssh/id_ed25519 admin_user@IP_VPS
Blok 2: Firewall UFW (kroki 7–9)
# 7. Zainstaluj i włącz UFW apt install -y ufw # 8. Domyślne reguły: blokuj wszystko przychodzące, zezwalaj wychodzące ufw default deny incoming ufw default allow outgoing # 9. Otwórz tylko potrzebne porty ufw allow 2222/tcp # SSH (twój nowy port) ufw allow 80/tcp # HTTP ufw allow 443/tcp # HTTPS # Jeśli masz bazę danych — NIE otwieraj portu 3306 publicznie # Dostęp do MySQL/MariaDB przez localhost lub VPN # Włącz UFW ufw enable # Sprawdź status ufw status verbose
Blok 3: fail2ban (krok 10)
# 10. Instalacja fail2ban apt install -y fail2ban # Utwórz lokalną konfigurację (nie nadpisuj domyślnej) cat > /etc/fail2ban/jail.local <<EOF [DEFAULT] bantime = 3600 findtime = 600 maxretry = 5 backend = systemd [sshd] enabled = true port = 2222 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 86400 EOF # Uruchom fail2ban systemctl enable fail2ban systemctl start fail2ban # Sprawdź status fail2ban-client status fail2ban-client status sshd
Blok 4: Automatyczne aktualizacje (krok 11)
# 11. Automatyczne aktualizacje bezpieczeństwa apt install -y unattended-upgrades # Aktywuj dpkg-reconfigure --priority=low unattended-upgrades # Sprawdź konfigurację cat /etc/apt/apt.conf.d/50unattended-upgrades # Upewnij się że linia "security" jest odkomentowana # Sprawdź logi aktualizacji cat /var/log/unattended-upgrades/unattended-upgrades.log
Blok 5: Audyt bezpieczeństwa (kroki 12–15)
12. Lynis — audit systemu
apt install -y lynis lynis audit system # Wynik: Hardening index X/100 # Sprawdź sekcje WARNINGS (czerwone) i SUGGESTIONS (żółte) # Raport szczegółowy: /var/log/lynis.log
13. rkhunter — wykrywanie rootkitów
apt install -y rkhunter rkhunter --update rkhunter --propupd # Zapisz baseline systemu rkhunter --check # Skanuj (pierwsze uruchomienie może pokazać fałszywe alarmy) # Logi: /var/log/rkhunter.log
14. Logwatch — raporty z logów
apt install -y logwatch logwatch --output mail --mailto [email protected] --detail high # Automatyczny raport dzienny (cron): # /etc/cron.daily/00logwatch już istnieje po instalacji
15. Port scan z nmap
# Na lokalnym komputerze — sprawdź co jest widoczne z zewnątrz nmap -sV -p 1-65535 IP_VPS # Powinno być widoczne TYLKO to co otworzyłeś w UFW: # 2222/tcp open ssh # 80/tcp open http # 443/tcp open https # Wszystkie inne porty: closed lub filtered
Blok 6: Dodatkowe warstwy (kroki 16–18)
16. Weryfikacja backupów
Backup nie jest backupem dopóki go nie przetestowałeś. Raz w miesiącu: przywróć losowy plik lub bazę z kopii zapasowej i sprawdź czy dane są nienaruszone. Backup niesprawdzony = backup który może nie działać gdy będzie potrzebny.
17. Wyłącz nieużywane usługi
# Sprawdź co nasłuchuje na portach ss -tlnp # Wyłącz nieużywane usługi (przykład: avahi-daemon, cups) systemctl disable avahi-daemon systemctl stop avahi-daemon
18. Monitorowanie logów auth
# Sprawdź nieudane próby logowania grep "Failed password" /var/log/auth.log | tail -20 # Sprawdź zablokowane IP przez fail2ban fail2ban-client status sshd # Sprawdź ostatnie udane logowania last -n 20
Podsumowanie checklisty
| # | Zadanie | Priorytet | Czas |
|---|---|---|---|
| 1 | Utwórz użytkownika non-root z sudo | Krytyczny | 5 min |
| 2 | Skonfiguruj klucze SSH | Krytyczny | 10 min |
| 3 | Zmień port SSH | Wysoki | 2 min |
| 4 | PermitRootLogin no | Krytyczny | 2 min |
| 5 | PasswordAuthentication no | Krytyczny | 2 min |
| 6 | MaxAuthTries 3 | Wysoki | 1 min |
| 7–9 | UFW firewall — reguły | Krytyczny | 10 min |
| 10 | fail2ban z jail.local | Wysoki | 10 min |
| 11 | unattended-upgrades | Wysoki | 5 min |
| 12 | Lynis audit | Średni | 15 min |
| 13 | rkhunter baseline | Średni | 10 min |
| 14 | logwatch e-mail | Średni | 5 min |
| 15 | nmap port scan | Wysoki | 5 min |
| 16 | Weryfikacja backupów | Wysoki | 20 min |
| 17 | Wyłącz nieużywane usługi | Średni | 10 min |
| 18 | Monitoring logów auth | Ciągły | 5 min |