Przejdź do treści

Serwer VPS: wskazówki dotyczące bezpieczeństwa Linuxa

Dowiedz się, jak zwiększyć bezpieczeństwo swojego serwera Linux dzięki ważnym wskazówkom, które pomogą zapobiec nieautoryzowanemu dostępowi i chronić Twoje usługi → Dowiedz się więcej

10 listopada 202610 min czytania0 Wyświetlenia0 pomocne

Wprowadzenie

W tym poradniku znajdziesz wskazówki i porady, jak zwiększyć bezpieczeństwo swojego serwera Linux. Ponieważ (wirtualne) serwery muszą być dostępne z zewnątrz, zdecydowanie warto zadbać o podstawową ochronę przed niepożądanym dostępem i nie należy jej lekceważyć.

Informacje

Pamiętaj, że te instrukcje nie wyczerpują tematu, a bardziej szczegółowe informacje znajdziesz w innych sekcjach dokumentacji ZAP. (np. 2FA (SSH))

Wskazówka

Najprostszy sposób na ochronę serwera jest zawsze taki sam, niezależnie od jego rodzaju: używaj bezpiecznych haseł, regularnie aktualizuj swoje usługi i ogólnie zwracaj uwagę na to, jakie usługi instalujesz oraz z jakich instrukcji korzystasz.

Konfiguracja portów usług

UsługaPort
SSH22
FTP21
Mail25
DNS53
HTTP80
HTTPS443

Usługi takie jak SSH lub FTP domyślnie zawsze korzystają z tych samych portów (niektóre z nich wymieniono w powyższej tabeli). Jeśli zewnętrzny atakujący spróbuje przeprowadzić atak brute force na usługę SSH, najpierw musi wiedzieć, który port jest używany przez SSH. Jeśli nie skonfigurujesz tych portów inaczej, porty 22 i 21 będą najczęściej wybierane, aby bezpośrednio wykonywać polecenia na serwerze lub uzyskać dostęp do plików przez FTP.

Aby temu zapobiec, zalecamy samodzielne ustawienie portów dla usług domyślnych. W następnej sekcji dowiesz się, jak to zrobić:

Uwaga

Wybrany port musi mieścić się w zakresie od 1024 do 65535 i nie może być już używany!

Za pomocą cat /etc/services możesz wyświetlić kilka standardowych portów i uniknąć wybrania portu, który jest już zajęty.

Port SSH

Aby zmienić port SSH, musisz edytować plik konfiguracyjny. Zazwyczaj znajduje się on w lokalizacji /etc/ssh/sshd_config. Jeśli go tam nie ma, możesz go znaleźć za pomocą następującego polecenia:

Code
find / -name "sshd_config" 2>/dev/null

Otwórz teraz plik za pomocą nano (jako root lub z użyciem sudo).

Code
sudo nano /etc/ssh/sshd_config

Wpisz wybrany port po Port. Jeśli Port jest zakomentowane (czyli widnieje jako #Port 22), usuń „#” i zastąp 22 wybranym portem. Zapisz plik (w Nano za pomocą Ctrl + o) i zamknij go (Nano: Ctrl + x).

Teraz należy ponownie uruchomić usługę SSH, aby zmiany zaczęły obowiązywać.

Code
# Na przykład w Ubuntu/Debian/CentOS
sudo systemctl restart sshd

Port FTP

Jeśli masz zainstalowaną usługę FTP, taką jak proFTPd, możesz równie łatwo zmienić jej port, edytując plik konfiguracyjny. Procedura jest podobna jak w przypadku usługi SSH.

Znajdź plik konfiguracyjny proftpd.conf

Code
find / -name "proftpd.conf" 2>/dev/null

Plik zazwyczaj znajduje się w lokalizacji /etc/proftpd.conf (CentOS) lub /etc/proftpd/proftpd.conf (Ubuntu, Debian). Otwórz plik za pomocą nano, usuń „#” przed port i wpisz po nim wybrany port. Pamiętaj o powyższych wskazówkach, aby nie wpisać nieprawidłowego portu.

Wskazówka

Użyj Ctrl + W, aby wyszukać tekst w nano.

Code
nano /etc/proftpd/proftpd.conf

Dodatkowe zabezpieczenia z Fail2Ban

Fail2Ban to usługa, która blokuje adresy IP próbujące logować się na serwer prawdopodobnie w złych zamiarach. Fail2Ban monitoruje pliki dziennika w poszukiwaniu podejrzanej aktywności, zapewniając stosunkowo łatwą i skuteczną ochronę systemu.

Po zainstalowaniu Fail2Ban zawiera wstępnie skonfigurowane ustawienia dla kilku często używanych usług, w tym:

  • apache
  • lighttpd
  • sshd
  • qmail
  • postfix
  • Courier Mail Server Kolejne usługi można łatwo dodać, określając wyrażenie regularne (RegEx) oraz wybrany plik dziennika.
Jako przykład przyjrzyjmy się wpisowi w pliku /var/log/auth.log. Plik ten zawiera wszystkie próby logowania przez SSH, zarówno udane, jak i nieudane.

Oto przykładowy wpis:

Code
Dec 2 12:59:19 vps-zap515723-2 sshd[364126]: Failed password for root from 92.117.xxx.xxx port 52504 ssh2

Fail2Ban korzysta z tego pliku dziennika i monitoruje go pod kątem nieudanych uwierzytelnień. Ponieważ plik zawiera adres IP atakującego, Fail2Ban może zablokować ten adres po kilku nieudanych próbach.

Instalacja Fail2Ban

Najpierw zaloguj się na serwerze Linux. Jeśli potrzebujesz pomocy, skorzystaj z naszego poradnika Pierwszy dostęp (SSH). Polecenia należy wykonywać jako root lub z użyciem sudo.

Code
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban

Po instalacji możesz od razu sprawdzić stan usługi za pomocą systemctl: (Naciśnij Ctrl+C, aby wyjść z systemctl)

Code
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
     Active: active (running) since Sat 2023-12-02 13:10:33 UTC; 24s ago
       Docs: man:fail2ban(1)
    Process: 23988 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, statu>
   Main PID: 23989 (fail2ban-server)
        CPU: 409ms
     CGroup: /system.slice/fail2ban.service
             `-23989 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Starting Fail2Ban Service...
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Started Fail2Ban Service.
Dec 02 13:10:34 vps-zap515723-1 fail2ban-server[23989]: Server ready

Konfiguracja Fail2Ban

Fail2Ban jest już zainstalowany, ale nie został jeszcze włączony ani skonfigurowany. Sprawdź zawartość katalogu /etc/fail2ban. Powinny znajdować się w nim następujące pliki:

Code
action.d fail2ban.d jail.conf paths-arch.conf paths-debian.conf
fail2ban.conf filter.d jail.d paths-common.conf paths-opensuse.conf

Aby utworzyć aktywną „jail”, należy utworzyć plik o nazwie jail.local. Wystarczy skopiować zawartość pliku jail.conf do nowego pliku i go otworzyć:

Code
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Teraz możesz zmienić wszystkie ustawienia w pliku jail.local, w tym określić usługi, które mają być monitorowane. Skup się tylko na sekcji znajdującej się po [Default]. Sekcja Default zawiera ogólne ustawienia podstawowe.

Przewiń nieco w dół, aż znajdziesz tę sekcję, i zmień jej ustawienia, na przykład w następujący sposób:

AtrybutObjaśnienieWartość
ignoreipAdresy IP, które nie mają być blokowane127.0.0.1/8
ignorecommandNieistotne.
bantimeCzas, przez jaki adres IP pozostaje zablokowany1h
findtimeOkres, w którym zliczane są nieudane logowania10m
maxretryLiczba nieudanych prób, po których następuje blokada5
Code
# można rozdzielić spacjami (i/lub przecinkami).
#ignoreip = 127.0.0.1/8 ::1

# ignorecommand = /path/to/command <ip>
ignorecommand =

# "bantime" to liczba sekund, przez którą host jest zablokowany.
bantime  = 1h

# Host zostanie zablokowany, jeśli w ciągu "findtime" sekund
# popełni "maxretry" błędów.
findtime  = 10m

# "maxretry" to liczba błędów, po której host zostanie zablokowany.
maxretry = 5

Podstawowa konfiguracja jest już gotowa. Aby monitorować na przykład usługę SSH, przewiń niżej do sekcji [sshd]. Jeśli zmieniono port, wpisz jego nową wartość w polu port.

Sekcja [sshd] powinna wtedy wyglądać tak:

Code
[sshd]

enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Wskazówka

Jak widać, możliwe jest również konfigurowanie poszczególnych usług indywidualnie (tutaj na przykład maxretry, którego wartość jest niższa niż ustawienie domyślne). Mimo wcześniejszego skonfigurowania ustawień ogólnych większość z nich możesz ponownie ustawić osobno dla każdej usługi. Jeśli tego nie zrobisz, zostaną użyte ustawienia ogólne.

Teraz wystarczy ponownie uruchomić Fail2Ban, aby rozpocząć monitorowanie.

Code
sudo systemctl restart fail2ban.service

Sprawdzanie działania Fail2Ban

Jeśli masz dostęp do VPN lub drugiego serwera, możesz spróbować zablokować swój adres IP przez Fail2Ban, aby sprawdzić, czy usługa działa. Korzystając z VPN lub hotspotu w telefonie, powinieneś uzyskać inny adres IP, którego możesz użyć do przetestowania Fail2Ban.

Uwaga

Nie testuj tego w swojej zwykłej sieci, ponieważ Twój adres IP może zostać zablokowany i możesz stracić dostęp do serwera.

Spróbuj nawiązać połączenie SSH z serwerem (z innego adresu IP!) i za każdym razem wpisz nieprawidłowe hasło. Wynik powinien wyglądać mniej więcej tak:

Code
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
root@185.223.29.xxx: Permission denied (publickey,password).
root@vps-zap515723-2:/var/log# ssh root@185.223.29.179
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
^C
root@vps-zap515723-2:/var/log# ssh root@185.223.29.xxx
ssh: connect to host 185.223.29.xxx port 22: Connection refused

Jak widać, połączenie z serwerem chronionym przez Fail2Ban jest teraz odrzucane (Connection refused zamiast Permission denied).

Wyświetl teraz stan Fail2Ban. Zobaczysz, że adres IP został zablokowany.

Code
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 4
|  |- Total failed:     8
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   xxx

Jeśli chcesz odblokować adres IP, możesz to zrobić za pomocą następującego polecenia: fail2ban-client set sshd unbanip {deine IP}.

Informacje

Jeśli liczba blokowanych adresów IP jest wyjątkowo duża, warto wydłużać czas blokady po każdej nieudanej próbie, aby ograniczyć liczbę możliwych prób logowania.

Code
[sshd]

enabled = true
port    = 22
filter  = sshd
logpath = /var/log/auth.log
maxretry = 4

bantime = 1h
# Czas blokady powinien wydłużać się po każdej blokadzie tego adresu IP
bantime.increment = true
# Współczynnik skalowania dla 24 godzin (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Maksymalny czas blokady = 5 tygodni
bantime.maxtime = 5w

FAQ

Często zadawane pytania

Używaj bezpiecznych haseł, regularnie aktualizuj usługi i zwracaj uwagę na to, co instalujesz oraz z jakich instrukcji korzystasz.
Włącz uwierzytelnianie wyłącznie za pomocą kluczy SSH i wyłącz logowanie hasłem. Więcej informacji znajdziesz w instrukcji dotyczącej kluczy SSH.
Port 22. Osoby próbujące zaatakować SSH metodą brute force muszą najpierw ustalić, który port jest używany.

Opinia

Czy ten artykuł był pomocny?

Twoja opinia pomaga nam lepiej ustalać priorytety i aktualizować treści.

0 od 0 Osoby oceniające uznały ten artykuł za pomocny.

Indywidualna pomoc

Instrukcja nie wystarcza?

Nasz zespół wsparcia ZAP zna twój produkt — opisz krótko problem, a pomożemy ci osobiście.

Zappy zna tę instrukcję i odpowie ci bezpośrednio na czacie.