Przejdziesz przez listę kontrolną, która zamienia nowy VPS w bezpieczny serwer: aktualizacje, silne hasła, własny użytkownik, klucz SSH, firewall, fail2ban i automatyczne poprawki bezpieczeństwa. Przy każdym kroku wyjaśniamy, po co go robić i co dokładnie ustawiasz.
Czego potrzebujesz
- Nowy VPS w StormHost z Ubuntu 24.04 lub Debianem 13
- Połączenie SSH jako root (poradnik)
- Menedżer haseł lub bezpieczne miejsce na hasła
- Około 30 minut
Dlaczego zaraz po utworzeniu#
Każdy publiczny adres IP jest widoczny z całego internetu. Automatyczne boty skanują adresy i próbują logować się przez SSH popularnymi nazwami i hasłami. Na nowym VPS pierwsze próby zobaczysz często w ciągu kilku minut. Sprawdź:
journalctl -u ssh --since "1 hour ago" | grep -E "Failed password|Invalid user"journalctl -u ssh– wypisuje wpisy usługi SSH.--since "1 hour ago"– tylko z ostatniej godziny.grep -E "…"– zostawia tylko linie z nieudanym logowaniem lub nieistniejącym użytkownikiem.
Znane skanery internetu blokujemy w sieci, ale to nie zatrzymuje każdej próby. Przed resztą chronią silne hasło, klucz SSH i fail2ban.
Lista kontrolna#
| Krok | Dlaczego | Gdzie |
|---|---|---|
| Aktualizacja systemu | Naprawia znane błędy bezpieczeństwa. | Ten poradnik |
| Zmiana hasła root | Pierwotne hasło przeszło przez e-mail lub ekran. | Zmiana hasła root |
| Utworzenie użytkownika z sudo | Codzienna praca bez nieograniczonych uprawnień roota. | Ten poradnik |
| Klucz SSH i wyłączenie haseł | Klucza nie da się zgadnąć. | Klucz SSH |
| Zakaz logowania roota | Atakujący musi znać także nazwę użytkownika. | Ten poradnik |
| Włączenie firewalla | Z zewnątrz będzie dostępne tylko to, co chcesz. | Firewall w strefie klienta, UFW |
| Instalacja fail2ban | Blokuje adresy IP próbujące haseł. | Fail2ban |
| Automatyczne aktualizacje | Poprawki bezpieczeństwa instalują się same. | Automatyczne aktualizacje |
| Strefa czasowa | Czasy w logach będą zgadzać się z Twoim czasem. | Ten poradnik |
Bezpieczeństwo a strefa klienta#
Zakładki Pliki i Baza danych w strefie klienta łączą się z VPS przez SSH, używając nazwy użytkownika i hasła (domyślnie root i hasło z chwili utworzenia VPS). Niektóre kroki tego poradnika mają więc na nie wpływ:
| Co zmieniasz | Co się dzieje z zakładkami Pliki i Baza danych | Co zrobić |
|---|---|---|
Hasło root (passwd) | Przestają się logować. | W Pliki › Zmień dane logowania wpisz nowe hasło. |
| Port SSH | Przestają się łączyć. | W Pliki › Zmień dane logowania wpisz nowy port. |
| Zakaz logowania roota | Nie mogą logować się jako root. | Wpisz tam innego użytkownika i jego hasło. Pliki zobaczysz z uprawnieniami tego użytkownika. Instalacja i automatyczne połączenie w zakładce Baza danych wymagają wtedy, aby użytkownik miał sudo bez pytania o hasło. |
| Wyłączenie logowania hasłem | Przestają działać całkowicie. | Plikami zarządzaj klientem SFTP z kluczem, a bazami danych przez tunel SSH. |
| SSH tylko z Twojego IP | Przestają działać (łączą się z naszych serwerów). | Tak samo jak wyżej. |
Dane logowania w zakładce Pliki może zmienić tylko właściciel usługi. Konsola oraz zakładki Sieć, Firewall, Kopie zapasowe i Zmiana pakietu działają zawsze; ustawienia VPS nie mają na nie wpływu. Zdecyduj, co jest dla Ciebie ważniejsze. Wyłączenie logowania hasłem daje najwyższe bezpieczeństwo. Jeśli używasz zakładek Pliki i Baza danych, zostaw hasło włączone, ale silne, i zainstaluj fail2ban.
Aktualizacja systemu#
Pobierz listę dostępnych aktualizacji:
bash apt updateapt update– wczytuje listę nowych wersji pakietów z repozytoriów. Sam niczego nie instaluje.
Zainstaluj wszystkie aktualizacje:
bash apt full-upgrade -yapt full-upgrade– aktualizuje pakiety i może przy tym dodać lub usunąć zależności (na przykład nowe jądro).-y– automatycznie odpowiada „tak” na potwierdzenie.
Jeśli instalacja zapyta o plik konfiguracyjny (na przykład
/etc/ssh/sshd_config„has been locally modified”), wybierz keep the local version currently installed. Zachowasz w ten sposób obecne ustawienia, z którymi VPS działa.Sprawdź, czy potrzebny jest restart:
bash ls /var/run/reboot-requiredJeśli polecenie znajdzie plik, zrestartuj. Na Debianie bez pakietu
unattended-upgradesplik może nie powstać, więc tam restartuj zawsze po aktualizacji jądra (pakiet zaczynający się odlinux-image).Zrestartuj VPS:
bash rebootPołączenie SSH się zamknie. Połącz się ponownie po około minucie.
Zmiana hasła root#
Hasło z chwili utworzenia VPS było widoczne w strefie klienta albo w e-mailu. Ustaw nowe, które znasz tylko Ty.
Wygeneruj silne hasło, na przykład generatorem haseł (co najmniej 20 znaków), i zapisz je w menedżerze haseł.
Rozpocznij zmianę hasła:
bash passwdpasswd– bez innych parametrów zmienia hasło użytkownika, który uruchamia polecenie (czyli roota).
Przy monicie
New password:wklej nowe hasło i naciśnij Enter. Hasło się nie wyświetla.Przy monicie
Retype new password:wklej je ponownie. Zobaczyszpasswd: password updated successfully.Nie zamykaj bieżącego okna. Otwórz nowe i przetestuj logowanie nowym hasłem.
W strefie klienta otwórz zakładkę Pliki, kliknij Zmień dane logowania, wypełnij Użytkownik
root, Port22i nowe Hasło i kliknij Zweryfikuj i zapisz.
Hasło w strefie klienta pozostanie stare
Strefa klienta nie zna nowego hasła. W zakładce Konsola wiersz Hasło po kliknięciu Pokaż będzie dalej pokazywać hasło z chwili utworzenia VPS, które już nie działa. Aktualne hasło jest tylko w Twoim menedżerze haseł.
Nowy użytkownik z sudo#
Jako root każda literówka w poleceniu dotyka całego systemu. Do codziennej pracy utwórz własnego użytkownika, który prosi o uprawnienia administratora tylko poleceniem sudo. Dla przykładu użyjemy nazwy jan.
Utwórz użytkownika:
bash adduser janadduser– tworzy użytkownika i jego folder domowy/home/janoraz pyta o hasło.
Wpisz hasło dwa razy (inne niż hasło root). Pytania o imię, telefon i inne dane pomiń klawiszem Enter i na końcu potwierdź
Y.Dodaj użytkownika do grupy
sudo:bash usermod -aG sudo janusermod– zmienia właściwości użytkownika.-aG sudo– dodaje (-a) użytkownika do dodatkowej grupy (-G)sudo. Bez-aużytkownik wypadłby ze wszystkich pozostałych grup.- Członkowie grupy
sudomogą wykonywać polecenia jako root.
Jeśli masz już klucz SSH dla roota, skopiuj go także nowemu użytkownikowi:
bash install -d -m 700 -o jan -g jan /home/jan/.ssh install -m 600 -o jan -g jan /root/.ssh/authorized_keys /home/jan/.ssh/authorized_keysinstall -d– tworzy folder.ssh.-m 700/-m 600– uprawnienia: folder tylko dla właściciela, plik do odczytu i zapisu tylko dla właściciela. Inne uprawnienia SSH odrzuca.-o jan -g jan– właścicielem będzie użytkownikjan.
W nowym oknie zaloguj się jako nowy użytkownik i przetestuj sudo:
bash ssh [email protected] sudo whoamisudo whoami– wykonuje poleceniewhoamijako root. Po wpisaniu hasła użytkownikajanmusi wypisaćroot.
Jeśli brakuje polecenia adduser lub sudo (minimalna instalacja Debiana), zainstaluj je: apt install adduser sudo.
Klucz SSH i wyłączenie logowania hasłem#
To najważniejszy krok. Hasło da się zgadnąć; klucza SSH praktycznie nie. Kroki dla Windows, macOS i Linux są w osobnym poradniku Klucz SSH: logowanie bez hasła, łącznie z bezpiecznym wyłączeniem logowania hasłem.
Zakaz logowania roota#
Gdy root nie może logować się przez SSH, atakujący musi znać także nazwę Twojego użytkownika. Zrób to dopiero wtedy, gdy możesz zalogować się jako nowy użytkownik i sudo działa.
Otwórz (lub utwórz) własny plik konfiguracyjny serwera SSH:
bash nano /etc/ssh/sshd_config.d/00-zabezpeceni.confDodaj linię:
/etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf PermitRootLogin noUstawienie Co robi Zalecana wartość Kiedy zmieniać PermitRootLoginCzy root może logować się przez SSH. no= wcale,prohibit-password= tylko kluczem,yes= także hasłem.noprohibit-password, jeśli potrzebujesz dostępu roota kluczem (na przykład dla skryptu kopii zapasowych).Nazwa pliku zaczyna się od
00, aby wczytywał się pierwszy. Serwer SSH używa pierwszej znalezionej wartości każdego ustawienia.Sprawdź konfigurację i obowiązującą wartość:
bash sshd -t && sshd -T | grep -i permitrootloginsshd -t– kontrola składni. Przy błędzie wypisuje plik i linię.&&– następne polecenie uruchamia się tylko wtedy, gdy poprzednie zakończyło się bez błędu.sshd -T– wypisuje wynikową obowiązującą konfigurację. Musi zawieraćpermitrootlogin no.
Zrestartuj serwer SSH:
bash systemctl restart sshBieżące połączenie pozostaje otwarte.
W nowym oknie sprawdź, że
ssh [email protected]już nie loguje, assh [email protected]tak.
Jako root pracujesz potem przez sudo -i (otwiera wiersz poleceń roota po wpisaniu hasła użytkownika jan).
Zmiana portu SSH#
Przeniesienie SSH z portu 22 na inny nie jest prawdziwym zabezpieczeniem; atakujący nowy port znajdzie. Znacznie ogranicza jednak próby botów w logu.
Zalety:
- Mniej automatycznych prób logowania i czystsze logi.
Wady:
- Przy każdym połączeniu musisz podać port (
ssh -p 2222 …). - Niektóre sieci firmowe i publiczne blokują niestandardowe porty.
- Port trzeba zaktualizować w firewallu, w fail2ban i w strefie klienta (Pliki).
Jeśli zdecydujesz się na zmianę, wybierz port powyżej 1024, którego nie używa żadna inna aplikacja (unikaj na przykład portu 2022, którego niektóre panele gier używają do SFTP). W przykładzie użyjemy 2222.
Zezwól na nowy port w firewallu, zanim przeniesiesz SSH: w zakładce Firewall dodaj regułę Przychodzący, Zezwól, TCP dla portu
2222(wymagana w trybie Blokuj wszystko poza dozwolonym, nieszkodliwa w trybie Zezwól na wszystko), a jeśli używasz UFW, uruchomufw allow 2222/tcp.Dodaj dwie linie do pliku
/etc/. Stary port na razie zostaw, aby zmiana Cię nie odcięła:ssh/ sshd_ config. d/ 00-zabezpeceni. conf /etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf Port 22 Port 2222Port– port, na którym nasłuchuje serwer SSH. LiniiPortmoże być kilka; serwer nasłuchuje wtedy na wszystkich.
Sprawdź konfigurację:
sshd -t.Sprawdź, jak SSH startuje na Twoim VPS:
bash systemctl is-active ssh.socketWynik
activeoznacza, że systemd uruchamia SSH przez socket (domyślnie na Ubuntu 24.04). Wynikinactiveoznacza zwykłą usługę (zwykle Debian 13).
Zastosuj nowy port zgodnie z wynikiem:
Socket aktywny
systemctl daemon-reload
systemctl restart ssh.socketsystemctl daemon-reload– każe systemd ponownie wczytać konfigurację. Na Ubuntu 24.04 specjalny generator przenosi przy tym porty z konfiguracji SSH do ustawień socketu. Bez tego kroku SSH zostałoby na porcie 22.systemctl restart ssh.socket– zaczyna nasłuchiwać na nowych portach.
Socket nieaktywny
systemctl restart sshsystemctl restart ssh– restartuje serwer SSH, który czyta porty z konfiguracji.
- Sprawdź, czy SSH nasłuchuje na obu portach:
ss -tlnp | grep -E ':22 |:2222 '. - W nowym oknie połącz się przez nowy port:
ssh -p 2222 [email protected]. - Gdy połączenie przez nowy port działa, usuń z konfiguracji linię
Port 22. - Sprawdź konfigurację:
sshd -t. - Wczytaj zmianę tym samym poleceniem co wyżej (zależnie od tego, czy socket jest aktywny).
- W strefie klienta otwórz Pliki › Zmień dane logowania i wpisz port
2222. Zakładki Pliki i Baza danych łączą się z VPS przez SSH i bez nowego portu przestałyby działać. - Zaktualizuj port w jailu
sshdw fail2ban (zobacz Fail2ban). - Usuń regułę dla portu 22 w firewallu.
Firewall i fail2ban#
- Firewall w strefie klienta filtruje ruch, zanim dotrze do VPS, i konfigurujesz go klikaniem: Firewall w strefie klienta.
- UFW to firewall bezpośrednio wewnątrz VPS: Firewall UFW.
- Fail2ban obserwuje nieudane logowania i blokuje atakujących: Fail2ban.
Jeden firewall wystarczy. Początkującym zalecamy firewall w strefie klienta, bo naprawisz go, nawet jeśli się odetniesz.
Automatyczne aktualizacje bezpieczeństwa#
Pakiet unattended-upgrades instaluje aktualizacje bezpieczeństwa raz dziennie. Na Ubuntu jest zainstalowany i włączony; na Debianie włączasz go sam.
Ubuntu 24.04
Sprawdź, czy automatyczne aktualizacje są włączone:
bash cat /etc/apt/apt.conf.d/20auto-upgradesWyjście musi zawierać:
Wyniktext APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";Update-Package-Lists "1"– pobieraj listę aktualizacji codziennie (1 = co 1 dzień).Unattended-Upgrade "1"– instaluj dozwolone aktualizacje codziennie.
Jeśli pliku brakuje, uruchom
dpkg-reconfigure -plow unattended-upgradesi odpowiedz Yes.
Debian 13
Zainstaluj pakiety:
bash apt install unattended-upgrades apt-listchangesunattended-upgrades– automatyczna instalacja aktualizacji.apt-listchanges– może wysyłać przegląd zmian w zaktualizowanych pakietach.
Włącz automatyczne aktualizacje:
bash dpkg-reconfigure -plow unattended-upgradesdpkg-reconfigure– ponownie uruchamia konfigurację pakietu.-plow– pokazuje także mniej ważne pytania.
Na pytanie, czy automatycznie pobierać i instalować aktualizacje stable, odpowiedz Yes. Powstanie plik
/etc/.apt/ apt. conf. d/ 20auto-upgrades
Domyślnie Ubuntu instaluje tylko aktualizacje bezpieczeństwa; Debian aktualizacje bezpieczeństwa i poprawki z wydań punktowych wersji stabilnej (na przykład 13.1, 13.2). VPS nie restartuje się sam. Zachowanie zmieniasz we własnym pliku, który nadpisuje domyślny 50unattended-upgrades (tamtego nie edytuj; aktualizacja pakietu mogłaby go nadpisać):
nano /etc/apt/apt.conf.d/52unattended-upgrades-localUnattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Unattended-Upgrade::Remove-Unused-Dependencies "true";| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
Automatic-Reboot | Restartuje VPS, gdy aktualizacja tego wymaga (zwykle nowe jądro). Domyślnie false. | true | Zostaw false, jeśli Twoje aplikacje nie wstają same po restarcie (nie są skonfigurowane jako usługa). Restartuj wtedy ręcznie raz w tygodniu. |
Automatic-Reboot-Time | Kiedy następuje restart, na przykład "04:00". Bez tego restart następuje zaraz po aktualizacji. | "04:00" | Wybierz godzinę, gdy serwer ma najmniejszy ruch. |
Remove-Unused-Dependencies | Usuwa po aktualizacji pakiety, których nic już nie potrzebuje. | true | false, jeśli nie chcesz, aby cokolwiek odinstalowywało się samo. |
Wypróbuj ustawienia na sucho:
unattended-upgrade --dry-run --debug--dry-run– tylko symulacja; nic nie jest instalowane.--debug– szczegółowe wyjście, łącznie z wczytanymi ustawieniami i pakietami, które zostałyby zaktualizowane.
Zapisy rzeczywistych aktualizacji są w folderze /var/.
Strefa czasowa i nazwa serwera#
Ustaw strefę czasową, aby czasy w logach się zgadzały (przykład używa czasu środkowoeuropejskiego):
bash timedatectl set-timezone Europe/Praguetimedatectl– ustawia czas systemowy i strefę czasową.set-timezone Europe/Prague– czas środkowoeuropejski, łącznie z czasem letnim (dla Polski możesz użyćEurope/Warsaw, ta sama strefa).
Sprawdź wynik przez
timedatectl. LiniaTime zonemusi pokazywaćEurope/Prague, aSystem clock synchronized: yes.Opcjonalnie zmień nazwę serwera (hostname):
bash hostnamectl set-hostname vps1hostnamectl set-hostname vps1– ustawia nazwę VPS navps1. Używaj małych liter, cyfr i myślników.
Nowa nazwa pokaże się w znaku zachęty po ponownym zalogowaniu. Jeśli
sudozacznie wypisywaćunable to resolve host vps1, dodaj nazwę do/etc/hostsw linii127.0.1.1. Jeśli nagłówek pliku mówi, że jest generowany automatycznie, postępuj według instrukcji w nagłówku.
Co dalej#
- Kopie zapasowe: archiwizujemy cały VPS i możesz go przywrócić w zakładce Kopie zapasowe. Ważne dane archiwizuj także poza VPS, zobacz Kopie zapasowe VPS.
- Przegląd: od czasu do czasu sprawdzaj miejsce na dysku (
df -h), działające usługi (systemctl --failed) i zapisy fail2ban. - Tylko potrzebne usługi: nie instaluj tego, czego nie potrzebujesz. Każdy otwarty port to kolejna możliwa droga do środka.
Weryfikacja#
apt updatepo aktualizacji wypisujeAll packages are up to date.- Nowe hasło root działa, a zakładka Pliki się loguje.
- Użytkownik
janloguje się przez SSH, asudo whoamiwypisujeroot. sshd -T | grep -E "^(pokazuje ustawione wartości.permitrootlogin| passwordauthentication| port) " unattended-upgrade --dry-run --debugprzebiega bez błędu.
Rozwiązywanie problemów#
Odcięto Cię od SSH#
Użyj konsoli w przeglądarce. Logujesz się hasłem root (nawet jeśli root jest zablokowany przez SSH) i naprawiasz błąd, na przykład usuwając plik /etc/ i restartując SSH przez systemctl restart ssh.
sudo: jan is not in the sudoers file#
Użytkownik nie jest w grupie sudo. Jako root uruchom usermod -aG sudo jan; użytkownik musi się wylogować i zalogować ponownie, aby grupa zaczęła działać.
Zakładka Pliki zgłasza, że logowanie do VPS się nie powiodło#
Strefa klienta używa starych danych logowania. Otwórz Pliki › Zmień dane logowania i wpisz aktualnego użytkownika, port i hasło. Jeśli wyłączono logowanie hasłem albo SSH jest dozwolone tylko z Twojego adresu IP, zakładka nie zadziała (zobacz tabelę w sekcji Bezpieczeństwo a strefa klienta).
sshd -T pokazuje inną wartość niż ustawiono#
To samo ustawienie jest w innym pliku, który wczytuje się wcześniej (serwer SSH bierze pierwszą znalezioną wartość). Znajdź go:
grep -rni "permitrootlogin" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/grep -rni– szuka tekstu we wszystkich plikach folderu (-r), bez rozróżniania wielkości liter (-i), i wypisuje numer linii (-n).
Zakomentuj linię w drugim pliku (postaw # na jej początku) albo zmień wartość bezpośrednio tam. Potem uruchom ponownie sshd -t && sshd -T | grep -i permitrootlogin i zrestartuj SSH.
Po zmianie portu SSH nadal nasłuchuje tylko na porcie 22#
Na Ubuntu 24.04 najprawdopodobniej pominięto systemctl daemon-reload. Uruchom je, a potem systemctl restart ssh.socket.
E: Could not get lock /var/lib/dpkg/lock-frontend #
W tle trwa inna instalacja, zwykle automatyczne aktualizacje (na nowym VPS po pierwszym starcie). Poczekaj kilka minut i uruchom polecenie ponownie. Nie zabijaj procesu.
Podsumowanie
- Zaktualizuj system (
apt update,apt full-upgrade) i po nowym jądrze zrestartuj. - Zmień hasło root przez
passwdi wpisz nowe hasło także w zakładce Pliki. - Pracuj pod własnym użytkownikiem z
sudo; roota przez SSH zablokuj dopiero po przetestowaniu. - Klucz SSH, firewall i fail2ban skonfiguruj według osobnych poradników.
unattended-upgradeszajmuje się automatycznymi aktualizacjami bezpieczeństwa; Twoje zmiany trafiają do52unattended-upgrades-local.- Wyłączenie haseł lub ograniczenie SSH do Twojego IP wyłącza zakładki Pliki i Baza danych; konsola działa zawsze.