Przejdź do treści

Serwer Dedykowany: Porady dotyczące bezpieczeństwa Linuxa

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

10 listopada 20269 min czytania8 Wyświetlenia0 pomocne

Wprowadzenie

Ten przewodnik zawiera kilka wskazówek i porad, jak uczynić Twój serwer Linux bardziej bezpiecznym. Ponieważ serwery muszą być dostępne z zewnątrz, podstawowa ochrona przed niechcianym dostępem jest zdecydowanie zalecana i nie powinna być pomijana.

Informacje

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

Wskazówka

Najprostszy sposób na zabezpieczenie serwera jest zawsze taki sam, niezależnie od typu serwera: używaj silnych haseł, regularnie aktualizuj swoje usługi i zwracaj uwagę, jakie usługi instalujesz oraz jakich instrukcji przestrzegasz.

Konfiguracja portów usług

UsługaPort
SSH22
FTP21
Mail25
DNS53
HTTP80
HTTPS443

Usługi takie jak SSH czy FTP domyślnie korzystają z tych samych portów (niektóre z nich podane są w tabeli powyżej). Jeśli zewnętrzny atakujący próbuje złamać Twój serwer SSH metodą brute-force, musi najpierw znać port, na którym działa SSH. Jeśli nie zmienisz tych portów, najczęściej będą to porty 22 i 21, które umożliwiają bezpośredni dostęp do serwera lub plików przez FTP.

Aby temu zapobiec, zalecamy dostosowanie portów standardowych usług do własnych potrzeb. W następnym rozdziale 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!

Możesz wyświetlić listę standardowych portów poleceniem cat /etc/services, aby nie wybrać zajętego portu.

Zmiana portu SSH

Aby zmienić port SSH, musisz edytować plik konfiguracyjny. Zwykle znajduje się on pod ścieżką /etc/ssh/sshd_config. Jeśli nie, możesz go znaleźć poleceniem:

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

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

Code
sudo nano /etc/ssh/sshd_config

Wpisz swój wybrany port po Port. Jeśli Port jest zakomentowany (np. #Port 22), usuń znak "#" i zamień 22 na wybrany port. Zapisz plik (w nano Ctrl + o) i zamknij (Ctrl + x).

Musisz teraz zrestartować usługę SSH, aby zmiany zaczęły działać.

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

Zmiana portu FTP

Jeśli masz zainstalowany serwer FTP, np. proFTPd, port również możesz zmienić w pliku konfiguracyjnym. Procedura jest podobna jak w przypadku SSH.

Znajdź plik proftpd.conf

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

Zazwyczaj znajduje się on w /etc/proftpd.conf (CentOS) lub /etc/proftpd/proftpd.conf (Ubuntu, Debian). Otwórz plik w nano, usuń znak "#" przed port i wpisz swój port. Pamiętaj o wcześniejszych wskazówkach, aby nie wybrać nieprawidłowego portu.

Wskazówka

W nano możesz użyć Ctrl + W, aby wyszukać.

Code
nano /etc/proftpd/proftpd.conf

Dodatkowa ochrona z Fail2Ban

Fail2Ban to usługa, która blokuje adresy IP próbujące uzyskać dostęp do serwera z prawdopodobnie złośliwymi zamiarami. Monitoruje logi pod kątem podejrzanych zdarzeń i w ten sposób skutecznie zabezpiecza system.

Po instalacji Fail2Ban ma już prekonfigurowane ustawienia dla popularnych usług, takich jak:

  • apache
  • lighttpd
  • sshd
  • qmail
  • postfix
  • Courier Mail Server Można łatwo dodać kolejne usługi, definiując wyrażenia regularne (RegEx) i wskazując pliki logów.
Przykładowo, spójrz na wpis w /var/log/auth.log. Ten plik zawiera wszystkie próby logowania 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 wykorzystuje ten plik i monitoruje nieudane próby uwierzytelnienia. Ponieważ log zawiera adres IP atakującego, Fail2Ban może po kilku nieudanych próbach zablokować ten adres.

Instalacja Fail2Ban

Zaloguj się na serwer. Jeśli potrzebujesz pomocy, skorzystaj z przewodnika Pierwsze logowanie (SSH). Polecenia wykonuj jako root lub z sudo.

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

Po instalacji sprawdź status usługi:

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 zainstalowany, ale jeszcze nie aktywny ani skonfigurowany. Sprawdź katalog /etc/fail2ban, gdzie powinny znajdować się 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 aktywować „więzienie” (jail), utwórz plik jail.local. Skopiuj do niego zawartość jail.conf i otwórz:

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

W pliku jail.local możesz teraz ustawić wszystkie opcje, w tym usługi do monitorowania. Skup się na sekcji [Default], która zawiera ustawienia ogólne.

Znajdź i zmodyfikuj np. tak:

AtrybutOpisWartość
ignoreipAdresy IP, które nie będą blokowane127.0.0.1/8
ignorecommandNieistotne
bantimeCzas blokady adresu IP1h
findtimeOkres, w którym liczone są nieudane próby logowania10m
maxretryMaksymalna liczba nieudanych prób przed blokadą5
Code
# można definiować z odstępami i/lub przecinkami
#ignoreip = 127.0.0.1/8 ::1

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

# "bantime" to czas w sekundach, przez jaki host jest zablokowany.
bantime  = 1h

# Host zostaje zablokowany, jeśli "maxretry" błędów wystąpi w ciągu "findtime"
findtime  = 10m

# "maxretry" to liczba błędów przed blokadą.
maxretry = 5

To podstawowa konfiguracja. Aby monitorować np. SSH, znajdź sekcję [sshd]. Jeśli zmieniłeś port, wpisz go w port.

Sekcja [sshd] może wyglądać tak:

Code
[sshd]

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

Możesz ustawić indywidualne opcje dla każdej usługi (np. maxretry niższe niż domyślne). Jeśli nie, używane są ustawienia ogólne.

Na koniec zrestartuj Fail2Ban, aby zaczął działać.

Code
sudo systemctl restart fail2ban.service

Sprawdzenie działania Fail2Ban

Jeśli masz dostęp do VPN lub innego serwera, możesz przetestować działanie Fail2Ban, blokując się samemu. Połącz się z innym IP (np. przez VPN lub hotspot z telefonu) i spróbuj wielokrotnie zalogować się z błędnym hasłem.

Uwaga

Nie testuj tego w swojej normalnej sieci, bo możesz się zablokować.

Próbuj połączyć się przez SSH i podawać błędne hasło. Powinieneś zobaczyć:

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 widzisz, połączenie jest odrzucane (Connection refused zamiast Permission denied).

Sprawdź status Fail2Ban, aby zobaczyć zablokowane IP.

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

Aby odblokować IP, użyj polecenia: fail2ban-client set sshd unbanip {twoje IP}.

Informacje

Jeśli masz dużo blokad, warto wydłużyć czas blokady po każdej kolejnej 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
# Bantime rośnie z każdą blokadą tego IP
bantime.increment = true
# Skala do 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 silnych haseł, regularnie aktualizuj usługi i zwracaj uwagę, jakie usługi instalujesz oraz jakich instrukcji przestrzegasz.
Logowanie hasłem jest podatne na ataki brute-force, zwłaszcza przy prostych hasłach. Zaleca się uwierzytelnianie tylko za pomocą kluczy SSH i wyłączenie logowania hasłem.
SSH korzysta domyślnie z portu 22. Ponieważ usługi takie jak SSH czy FTP używają standardowych portów, są one częstym celem automatycznych ataków — warto zastosować odpowiednie zabezpieczenia.

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.