Konfiguracja i zabezpieczenie serwera Debian vServer: krok po kroku dla początkujących (Część 1 z 3)
Seria „Własny serwer – od 0 do bezpieczeństwa" · 3 części:
- Konfiguracja i zabezpieczenie serwera Debian vServer ← Jesteś tutaj
- Instalacja i konfiguracja Froxlora
- Prawidłowa konfiguracja e-mail: SPF, DKIM i DMARC
To jest Część 1. Doprowadza świeżo wynajęty serwer do bezpiecznego stanu podstawowego. Na tym serwerze w Części 2 zainstalujemy panel zarządzania Froxlor, a w Części 3 skonfigurujemy wysyłkę e-maili.

Spis treści
- Wymagania wstępne
- Krok 1: Połączenie z serwerem przez SSH
- Krok 2: Aktualizacja systemu
- Krok 3: Nazwa hosta, strefa czasowa i język
- Krok 4: Utworzenie użytkownika z uprawnieniami sudo
- Krok 5: Zabezpieczenie SSH (wyłączenie logowania root, logowanie kluczem)
- Krok 6: Konfiguracja zapory (ufw)
- Krok 7: Ochrona przed atakami brute-force z Fail2ban
- Krok 8: Automatyczne aktualizacje bezpieczeństwa
- Lista kontrolna: czy serwer jest bezpieczny?
- Najczęściej zadawane pytania (FAQ)
- Co dalej?
- Źródła
Właśnie wynająłeś serwer vServer (VPS) i zadajesz sobie pytanie: „I co teraz?" Właśnie tu zaczynamy. Ten poradnik napisano dla zupełnych początkujących. Prostymi słowami wyjaśniamy co robimy i dlaczego – a każde polecenie możesz po prostu skopiować i wkleić. Na końcu będziesz mieć aktualny serwer chroniony przed najczęstszymi atakami.
Używamy Debiana 12 (Bookworm), jednego z najpopularniejszych i najstabilniejszych systemów serwerowych. Jeśli korzystasz z Ubuntu, niemal wszystkie polecenia działają identycznie.
Ważne: We wszystkich poleceniach zastąp symbole zastępcze swoimi rzeczywistymi wartościami –
SERVER-IPadresem IP swojego serwera (znajdziesz go w e-mailu z potwierdzeniem od dostawcy), anazwa-uzytkownikadowolną nazwą.
Wymagania wstępne
- Wynajęty vServer/VPS z Debianem 12. Nie masz jeszcze? Dostawcy to np. IONOS, Hetzner lub webtropia.
- Adres IP i hasło root serwera (otrzymane e-mailem od dostawcy).
- Terminal na własnym komputerze: w macOS i Linux jest preinstalowany („Terminal"), w Windows użyj PowerShell (preinstalowany) lub PuTTY.
Więcej nie potrzebujesz. Do dzieła.
Krok 1: Połączenie z serwerem przez SSH
„SSH" to szyfrowane połączenie zdalne z serwerem – wpisujesz polecenia na swoim komputerze, a wykonują się one na serwerze. Otwórz terminal i połącz się jako użytkownik root:
ssh root@SERVER-IP
Przy pierwszym połączeniu zostaniesz zapytany, czy ufasz serwerowi – wpisz yes i naciśnij Enter. Następnie podaj hasło root (wpisywanie jest niewidoczne, to normalne). Po połączeniu wiersz wygląda mniej więcej tak:
root@twoj-serwer:~#
Gratulacje – jesteś w środku. (Szczegółowe wprowadzenie do SSH znajdziesz w wiki Debiana.)
Krok 2: Aktualizacja systemu
Świeżo zainstalowany serwer często zawiera przestarzałe pakiety ze znanymi lukami bezpieczeństwa. Pierwszym krokiem jest zawsze: zaktualizować wszystko. Tym poleceniem serwer pobiera listę dostępnych aktualizacji, instaluje je, usuwa zbędne pakiety i porządkuje:
apt update && apt full-upgrade -y && apt autoremove -y && apt clean
Może to potrwać kilka minut. Jeśli pojawi się komunikat o konieczności ponownego uruchomienia, uruchom serwer ponownie:
reboot
Po restarcie połączenie zostanie na chwilę przerwane. Odczekaj ~30 sekund i połącz się ponownie przez ssh root@SERVER-IP.
Krok 3: Nazwa hosta, strefa czasowa i język
Aby logi miały poprawne znaczniki czasu, a serwer schludną nazwę, ustawiamy trzy drobiazgi.
Nazwa hosta (nazwa serwera, np. web01):
hostnamectl set-hostname web01
Ustawienie strefy czasowej (tu: Europa/Warszawa; dostosuj):
timedatectl set-timezone Europe/Warsaw
Instalacja pakietów językowych (locales) i wygenerowanie UTF-8:
apt install -y locales
sed -i 's/# pl_PL.UTF-8/pl_PL.UTF-8/' /etc/locale.gen
locale-gen
Sprawdź wynik:
timedatectl
Powinno tam być „Time zone: Europe/Warsaw".
Krok 4: Utworzenie użytkownika z uprawnieniami sudo
Stała praca jako root jest niebezpieczna – jedna literówka może uszkodzić cały system. Lepiej: zwykły użytkownik, który tylko w razie potrzeby uzyskuje uprawnienia administratora przez poprzedzające słowo sudo.
Utwórz użytkownika (zastąp nazwa-uzytkownika) i podaj silne hasło, gdy pojawi się prośba:
adduser nazwa-uzytkownika
Dalsze pytania (imię, telefon …) możesz pominąć Enterem. Teraz nadaj użytkownikowi uprawnienia sudo:
usermod -aG sudo nazwa-uzytkownika
Przetestuj to, zanim przejdziesz dalej. Otwórz drugie okno terminala i zaloguj się nowym użytkownikiem:
ssh nazwa-uzytkownika@SERVER-IP
Sprawdź, czy sudo działa:
sudo whoami
Jeśli po wpisaniu hasła pojawi się root, wszystko jest w porządku. Zostaw to drugie okno otwarte – będzie nam potrzebne w następnym kroku jako zabezpieczenie.
Krok 5: Zabezpieczenie SSH (wyłączenie logowania root, logowanie kluczem)
Teraz znacznie wzmocnimy dostęp zdalny. Dwa działania: logowanie kluczem SSH zamiast hasła oraz brak bezpośredniego logowania root.
Uwaga – ryzyko zablokowania dostępu: W tym kroku zmieniamy dostęp SSH. Koniecznie zostaw otwarte działające okno z Kroku 4. Dzięki temu wrócisz, jeśli coś pójdzie nie tak.
Wskazówka dla Windows – czy potrzebuję PuTTY i Pageant? Niekoniecznie. Windows 10/11 ma już OpenSSH, a poniższe polecenia (
ssh-keygen,ssh) działają bezpośrednio w PowerShell – tak jak w macOS/Linux. Jeśli wolisz narzędzia PuTTY (lub masz starszy Windows), postępuj tak:
>
1. Wygeneruj klucz w PuTTYgen: ustaw „Type of key" na EdDSA → Ed25519, kliknij Generate, poruszaj myszą. Zapisz klucz prywatny jako
.ppk; skopiuj pokazany klucz publiczny (pole „Public key for pasting…") do schowka. 2. Umieść klucz publiczny na serwerze w pliku~/.ssh/authorized_keysswojego użytkownika (jedna linia). 3. Załaduj klucz prywatny w Pageant (agent kluczy PuTTY) – dzięki temu nie musisz go wybierać przy każdym połączeniu. 4. Połącz się przez PuTTY (host:nazwa-uzytkownika@SERVER-IP).
>
PuTTYgen i Pageant są w pakiecie PuTTY: putty.org. Funkcjonalnie obie drogi są równoważne – poniżej zostajemy przy wbudowanym OpenSSH, bo wymaga mniej kroków.
5.1 Wygeneruj klucz na własnym komputerze. Wykonaj to polecenie w terminalu na swoim komputerze (nie na serwerze) i potwierdź pytania Enterem:
ssh-keygen -t ed25519 -C "moj-serwer"
5.2 Skopiuj klucz publiczny na serwer (też z komputera):
ssh-copy-id nazwa-uzytkownika@SERVER-IP
W Windows bez ssh-copy-id użyj zamiast tego:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh nazwa-uzytkownika@SERVER-IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
5.3 Test: Zaloguj się ponownie – teraz nie powinno już być pytania o hasło:
ssh nazwa-uzytkownika@SERVER-IP
5.4 Wyłącz logowanie hasłem i logowanie root. Edytuj na serwerze konfigurację SSH edytorem nano:
sudo nano /etc/ssh/sshd_config
Znajdź poniższe linie (lub dodaj je) i ustaw dokładnie tak:
PermitRootLogin no
PasswordAuthentication no
Zapisz Ctrl+O, Enter, zamknij Ctrl+X. Następnie przeładuj usługę SSH:
sudo systemctl restart ssh
Ważne: Nie zamykaj jeszcze bieżącego okna. Otwórz nowe i sprawdź, że logowanie jako nazwa-uzytkownika nadal działa – oraz że ssh root@SERVER-IP jest teraz odrzucane. Dopiero wtedy krok się powiódł. Tło w wiki Debiana o SSH.
Krok 6: Konfiguracja zapory (ufw)
Zapora blokuje wszystkie porty sieciowe poza tymi nielicznymi, które naprawdę są potrzebne. Używamy ufw („Uncomplicated Firewall") – prostej i przyjaznej początkującym.
Instalacja i ustawienie reguł podstawowych (blokuj cały ruch przychodzący, zezwalaj na wychodzący):
sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
Zezwol na dostęp SSH przed aktywacją – inaczej zablokujesz sobie dostęp:
sudo ufw allow OpenSSH
Dla późniejszego serwera WWW (Froxlor w Części 2) otwieramy też porty WWW:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Teraz włącz zaporę i sprawdź status:
sudo ufw enable
sudo ufw status verbose
Potwierdź pytanie przez y. Na liście statusu powinny pojawić się tylko SSH (22), 80 i 443 jako dozwolone. Szczegóły o ufw znajdziesz w Ubuntu Server Guide.
Krok 7: Ochrona przed atakami brute-force z Fail2ban
Atakujący automatycznie próbują tysięcy haseł. Fail2ban rozpoznaje zbyt wiele nieudanych prób i tymczasowo blokuje atakujący adres IP. Instalacja i aktywacja:
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
Tworzymy własną konfigurację, aby aktualizacje jej nie nadpisały:
sudo nano /etc/fail2ban/jail.local
Wklej poniższą treść (blokuje IP po 5 nieudanych próbach na 1 godzinę):
[sshd]
enabled = true
maxretry = 5
bantime = 1h
findtime = 10m
Zapisz (Ctrl+O, Enter, Ctrl+X) i uruchom usługę ponownie:
sudo systemctl restart fail2ban
Status możesz sprawdzić w każdej chwili:
sudo fail2ban-client status sshd
Krok 8: Automatyczne aktualizacje bezpieczeństwa
Luki bezpieczeństwa są odkrywane nieustannie. Aby serwer automatycznie instalował ważne poprawki, konfigurujemy unattended-upgrades:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
W pytaniu wybierz „Yes". To wszystko – od teraz serwer samodzielnie instaluje aktualizacje bezpieczeństwa. Więcej w wiki Debiana o UnattendedUpgrades.
Lista kontrolna: czy serwer jest bezpieczny?
Zanim pójdziesz dalej, przejrzyj krótko:
- [ ] System jest aktualny (
apt update && apt full-upgrade) - [ ] Nazwa hosta, strefa czasowa i locale ustawione
- [ ] Własny użytkownik z uprawnieniami
sudodziała - [ ] Logowanie kluczem SSH działa, logowanie hasłem wyłączone
- [ ]
ssh root@SERVER-IPjest odrzucane - [ ] Zapora (ufw) aktywna, otwarte tylko 22/80/443
- [ ] Fail2ban działa
- [ ] Automatyczne aktualizacje bezpieczeństwa aktywne
Najczęściej zadawane pytania (FAQ)
Zablokowałem sobie dostęp – co teraz? Niemal każdy dostawca oferuje w panelu klienta funkcję „VNC" lub „konsola", dzięki której zalogujesz się bezpośrednio bez SSH i cofniesz ustawienia.
Czy używać kluczy SSH, czy wystarczy hasło? Klucze są znacznie bezpieczniejsze i mocno zalecane. Jeśli koniecznie chcesz zostać przy haśle, zostaw PasswordAuthentication na yes – użyj jednak bardzo długiego hasła i koniecznie Fail2ban.
Czy działa to też na Ubuntu? Tak, niemal identycznie. Tylko w bardzo starych wersjach niektóre nazwy pakietów mogą się różnić.
Czy potrzebuję wiedzy o Linuksie? Nie. Jeśli kopiujesz polecenia i zastępujesz symbole zastępcze, dasz radę. Przy pierwszym razie przyda się trochę cierpliwości.
Co dalej?
Twój serwer jest teraz bezpieczny. W następnej części zainstalujemy Froxlor, darmowy panel zarządzania, którym łatwo przez interfejs zarządzasz domenami, stronami, certyfikatami SSL i bazami danych – zupełnie bez konsoli:
👉 Część 2: Instalacja i konfiguracja Froxlora
A w Części 3: Prawidłowa konfiguracja e-mail: SPF, DKIM i DMARC zadbamy o to, by Twoje e-maile były bezpiecznie dostarczane.
Przy okazji: jeśli wolisz zlecić tworzenie oprogramowania lub potrzebujesz indywidualnych rozwiązań serwerowych/webowych, chętnie pomoże Ci PepperTools.
Źródła
- Debian 12 (Bookworm) – strona oficjalna
- Wiki Debiana: SSH
- Wiki Debiana: UnattendedUpgrades
- Ubuntu Server Guide: Firewalls (ufw)
- Fail2ban (projekt oficjalny)
Stan: czerwiec 2026. Polecenia i nazwy pakietów mogą się zmieniać wraz z nowymi wersjami – wiążąca jest każdorazowo oficjalna dokumentacja.
Latwiejsze fakturowanie
Easy Invoice laczy oferty, faktury i zarzadzanie klientami w chmurze.
Wyprobuj Easy Invoice