Poprawa bezpieczeństwa i ochrony serwera Linux / CentOS w Internecie

W tym artykule omówimy podstawowe pojęcia i określone ustawienia, które pomogą zwiększyć bezpieczeństwo twojego serwera CentOS w Internecie. Korzystanie z tych metod zwiększy ochronę serwera przed atakami hakerów i infekcjami. Podręcznik jest w większości uniwersalny, a główne punkty są odpowiednie do zwiększenia bezpieczeństwa dowolnego serwera Linux.

Treść

  • Opcje partycjonowania i montażu napędów dyskowych do izolacji
  • Instalowanie i aktualizowanie oprogramowania w systemie Linux (CentOS)
  • Ochrona SSH, autoryzacja klucza
  • Hasło systemu Linux zmienia się regularnie
  • Zwiększanie bezpieczeństwa serwera dzięki SELinux
  • Skonfiguruj zaporę ogniową
  • Odinstaluj X Windows
  • Ochrona jądra Linux
  • Uprawnienia do plików systemu Linux
  • Bezpieczeństwo serwera WWW
  • Ochrona serwera fizycznego
  • Kopia zapasowa serwera Linux

Opcje partycjonowania i montażu napędów dyskowych do izolacji

Instalując CentOS (i dowolną dystrybucję Linuksa) na etapie partycjonowania dysku, nie twórz jednej partycji, ale osobno sieć-przestrzeń z partycji głównej, utwórz także partycje systemowe:

  • / root
  • / boot
  • / var
  • / tmp
  • /

Podczas izolowania partycji osoby atakujące nie będą mogły wznieść się ponad katalog sieć podczas hakowania witryny i wprowadzania do niej złośliwych skryptów.

Użyj specjalnych opcji, aby bezpiecznie zamontować niektóre partycje:

  • noexec - nie zezwala na uruchamianie plików binarnych (nie można go używać w katalogu głównym, ponieważ doprowadzi to do niesprawności systemu);
  • nodev - zakłada, że ​​pliki urządzeń nie zostaną utworzone w podłączonym systemie plików / dev. Nie dotyczy również katalogu głównego;
  • nosuid - zabrania operacji z suid i sgid bitów.

Parametry te można ustawić na katalog tylko wtedy, gdy istnieje on jako osobna sekcja. Możesz dostosować / etc / fstab zgodnie z następującymi zaleceniami, jeśli masz jakieś partycje na dysku:

  • / home - zamontować z opcjami nodev, nosuid, usrquota (włączenie kwot);
  • / boot - zamontować z opcjami nodev, nosuid, noexes - ta sekcja jest wymagana do uruchomienia systemu, zabraniamy wprowadzania jakichkolwiek zmian;
  • / var - nosuid - uruchamianie jako root nie jest zabronione;
  • / var / log - zamontować z opcjami nodev, nosuid, noexeс;
  • / var / www - zamontować z opcjami nodev, nosuid;
  • / tmp - zamontować z opcjami nodev, nosuid, noexe - ta sekcja jest potrzebna tylko do przechowywania i nagrywania plików tymczasowych.
Wszystkie powyższe sekcje są montowane z opcją rw (nagrywalny).

Instalowanie i aktualizowanie oprogramowania w systemie Linux (CentOS)

Podczas instalacji serwera nigdy nie używaj dystrybucji systemu operacyjnego skompilowanych przez nieznane osoby. Pobieraj dystrybucje tylko z oficjalnych serwerów lustrzanych i nie używaj plików kickstart innych osób do instalacji. Jeśli nie rozumiesz kodu innej osoby, lepiej całkowicie zrezygnować z tego przedsięwzięcia i zainstalować wszystko ręcznie lub całkowicie przeanalizować plik kickstart, aby nie instalować złośliwego oprogramowania na serwerze.

Zainstaluj tylko wymagane minimum oprogramowania. Instalacja i konfiguracja tylko dla skrzynki i przy pomocy instalatora mniam i dnf. Sprawdź całe zainstalowane oprogramowanie i usuń niepotrzebne pakiety:

zainstalowana lista mniam
mniam list nazwa_pakietu
mniam usuń pakietNazwa

Używaj tylko oficjalnych i zaufanych repozytoriów pakietów..

Nie używaj niezaszyfrowanego FTP, Telnet, Rlogin, Rsh.

Wyłącz nieużywane usługi na swoim serwerze, jeśli w tej chwili usunięcie usługi Ci nie odpowiada.

Aby sprawdzić listę wszystkich usług, użyj polecenia:

systemctl list-unit-files --type = usługa

Aby wyłączyć i usunąć usługę z uruchamiania w CentOS, użyj systemctl:

systemctl stop service
systemctl wyłącz usługę

Na przykład, aby wyłączyć usługę httpd używana jest następująca komenda:

systemctl stop httpd.service
systemctl wyłącz usługę httpd.service

Zawsze aktualizuj zainstalowane oprogramowanie na serwerze. Terminowo aktualizowane oprogramowanie ochroni Cię przed znanymi lukami. Możesz skonfigurować automatyczne aktualizacje systemu, abyś nie musiał za każdym razem robić tego ręcznie.

mniam aktualizacja - aktualizacja systemu

Ochrona SSH, autoryzacja klucza

Aby uzyskać bezpieczną autoryzację na serwerze, użyj klucza prywatnego. Wygeneruj klucz za pomocą narzędzia ssh-keygen:

# ssh-keygen

Generowanie publicznej / prywatnej pary kluczy rsa. Wprowadź plik, w którym chcesz zapisać klucz (/root/.ssh/id_rsa): Wpisz hasło (puste dla braku hasła): Wprowadź ponownie to samo hasło: Twoja identyfikacja została zapisana w /root/.ssh/id_rsa. Twój klucz publiczny został zapisany w /root/.ssh/id_rsa.pub. Kluczowy odcisk palca to: SHA256: ffIDjWIfOgMZmOVbQmDWaOCADK4G3cYYy0dTIjqLkD8 [email protected] Obraz losowy klucza to: + --- [RSA 2048] ---- + | * + .B = + | | oO @oO. | | *. *. B +. | | = + o *. o | | + .E + S * o | | ... o + * | | +. o | | o. | | | + ---- [SHA256]-----+ 

Po wygenerowaniu możesz połączyć się za pomocą tego klucza z serwerem za pośrednictwem ssh-klient.

Utwórz dodatkowego użytkownika i wykonaj polecenia za pomocą sudo.

sudo groupadd sudo - utwórz grupę sudo

webmaster adduser - utwórz użytkownika

webmaster passwd - zmień hasło

usermod -aG sudo webmaster - dodaj użytkownika do grupy sudo

W pliku / etc / sudoers dodaj linię:

% sudo ALL = (ALL: ALL) ALL

Wyłącz w ustawieniach ssh-autoryzacja serwera przez root i login / hasło:

nano / etc / ssh / sshd_config

I zmień wartość poniższych linii na:

PermitRootLogin nie Hasło Uwierzytelnienie nie Wyzwanie Odpowiedź Uwierzytelnienie nie UsePAM nie Uwierzytelnianie Metody publickey PubkeyUwierzytelnienie tak 

Zmień domyślny port dla ssh. Domyślny port dla ssh, będzie podatny na pękanie.

Aby zmienić standardowy port na ssh, w pliku konfiguracyjnym / etc / ssh / sshd_config zamień wartość w wierszu:

Port 22

Hasło systemu Linux zmienia się regularnie

Jeśli nadal używasz haseł do autoryzacji w systemie Linux, skonfiguruj hasło dla hasła za pomocą narzędzia chage.

Aby sprawdzić, ile dni hasło będzie ważne dla dowolnego użytkownika, użyj polecenia:

chage -l root

Domyślnie ustawiłem 99999 dni na rootowanie:

# chage -l root

Ostatnia zmiana hasła: nigdy Hasło wygasa: nigdy Hasło nieaktywne: nigdy Konto wygasa: nigdy Minimalna liczba dni między zmianą hasła: 0 Maksymalna liczba dni między zmianą hasła: 99999 Liczba dni ostrzeżenia przed wygaśnięciem hasła: 7 

Aby zmienić okres ważności hasła (na przykład 9 dni), użyj polecenia:

chage-M 9 root

Teraz podczas sprawdzania informacji o wygaśnięciu hasła dla użytkownika root informacje te uległy zmianie:

# chage -l root

Ostatnia zmiana hasła: nigdy Hasło wygasa: nigdy Hasło nieaktywne: nigdy Konto wygasa: nigdy Minimalna liczba dni między zmianą hasła: 0 Maksymalna liczba dni między zmianą hasła: 9 Liczba dni ostrzeżenia przed wygaśnięciem hasła: 7 

Możesz uzyskać więcej opcji dla narzędzia chage z pomocy:

człowiek chage

Aby zablokować użytkowników podczas wprowadzania nieprawidłowego hasła, użyj narzędzia fail2ban (pozwala wdrożyć analogię zasad grupy do blokady konta w systemie Windows). Fail2ban chroni serwer i usługi Linux przed zgadywaniem hasła.

Aby zainstalować tryb fail2ban:

mniam zainstalować epel-release fail2ban -y

Plik konfiguracyjny fail2ban znajduje się w /etc/fail2ban/jail.conf. Ustawienia, których dotkniemy:

  • bantime = 600 - czas blokady przy blokowaniu
  • maxretry = 3 - liczba prób wprowadzenia nieprawidłowego hasła, po których użytkownik zostanie zablokowany
  • czas znalezienia = 600 - okres, w którym użytkownik musi się zalogować

Inne ustawienia są używane zgodnie z potrzebami. Dodatkowo możesz skonfigurować wysyłanie raportów na swój e-mail.

Utwórz plik /etc/fail2ban/jail.local i dodaj tam następujące wiersze:

Po zmianie pliku konfiguracyjnego uruchom ponownie usługę.

[DOMYŚLNE] ignoreip = 127.0.0.1/24 [ssh-iptables] włączone = prawdziwy port = filtr ssh = akcja sshd = iptables [nazwa = sshd, port = ssh, protokół = tcp] ścieżka_danych = / var / log / secure 

Następnie zapisz plik i uruchom ponownie usługę fail2ban:

restart systemctl fail2ban

Dlatego skonfigurowaliśmy blokowanie użytkownika dla ssh:

Jeśli hasło zostanie wprowadzone nieprawidłowo, zostałem zablokowany na 10 minut. Możesz skonfigurować fail2ban do pracy z dowolną usługą współpracującą z użytkownikami, na przykład:

  • proftpd
  • exim
  • postfiks

Zwiększanie bezpieczeństwa serwera dzięki SELinux

Zwykle podczas konfigurowania serwera wyłączam się SELinux, chociaż nie jest to zalecane. Ale ustawienie SELinux bardzo specyficzny i obszerny. Konfiguracja SELinux na serwerze może potrwać kilka dni. Jeśli masz czas na konfigurację i debugowanie systemu SELinux, użyj go do zabezpieczenia swojego serwera.

SELinux ma 3 tryby pracy:

  • Egzekwowanie
  • Permissive
  • Niepełnosprawnych

W trybie zachęcanie SELinux stosuje swoje zasady do systemu i monitoruje nieautoryzowany dostęp użytkowników. Wszystkie próby są rejestrowane.

W trybie liberalny Polityka SELinuksa nie jest stosowana, ale wszystkie informacje są zapisywane w logach, po czym można je przeanalizować. Ten tryb jest przydatny podczas konfigurowania i debugowania systemu..

I… wyłączone odpowiednio wyłącza SELinux, a jego zasady w ogóle nie obowiązują.

Plik konfiguracyjny SELinux - / etc / selinux / config

Skrupulatne ustawienie SELinux możesz napisać na kilka artykułów, jeśli potrzebujesz szczegółowych informacji, możesz skorzystać z oficjalnej dokumentacji Redhat. Zwykle podczas konfigurowania serwera wszystko działa w pełni, jestem włączony SELinux zauważyłem, że są problemy z ftp-serwer, a także niektóre płatne oprogramowanie.

Kontrola stanu:
# sestatus

Status SELinux: wyłączony

W celu wygodniejszego przestudiowania dzienników SELinux, polecam użycie narzędzi aureport i uszczelniacza.

Skonfiguruj zaporę ogniową

Otwórz tylko minimalny niezbędny zestaw portów na serwerze, które są naprawdę potrzebne do pracy. Na przykład do pracy sieć-wystarczy otworzyć serwery 80 i 443. Jeśli używasz mysql /mariadb, wyłącz możliwość połączenia ze zdalnych serwerów do portu 3306 (jeśli twoja baza danych jest używana tylko lokalnie, nie jest uwzględniona w klastrze Galera i nie jest używana w skryptach replikacji).

Jeśli komputer / brama dostępu jest ustawiona na statyczną IP adres, dodaj swój zaufany adres do wyjątków zapory i połącz się z nim z serwerem. Dowiedz się więcej o konfigurowaniu zapory ogniowej na CentOS (jeśli jesteś przyzwyczajony do iptables, zobacz artykuł Konfigurowanie zapory Linux za pomocą iptables).

Aby sprawdzić otwarte porty na serwerze, użyj narzędzia netstat:

netstat -tulpn

Odinstaluj X Windows

Nie używaj systemu na serwerze X okien. Usuń całe oprogramowanie powiązane z tym systemem, nie ma potrzeby korzystania z niego Linux serwer:

grupa yum usuń „GNOME Desktop”
grupa yum usuń „Przestrzenie robocze plazmy KDE”
grupa yum usuń „Serwer z GUI”
grupa yum usuń „MATE Desktop”

Ochrona jądra Linux

Skorzystaj z ustawień w pliku /etc/sysctl.conf dla dodatkowego bezpieczeństwa podczas rozruchu jądra Linux.

Włącz execshield:

kernel.exec-shield = 1

Wyłącz routing IP (jeśli twój serwer nie jest używany jako brama dostępu do Internetu z sieci LAN):

net.ipv4.conf.all.accept_source_route = 0

Włącz ochronę przed fałszowaniem

net.ipv4.conf.all.rp_filter = 1

Włącz ignoruj ​​żądania emisji

net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_messages = 1

Włącz podejrzaną rejestrację pakietów

net.ipv4.conf.all.log_martians = 1

Uprawnienia do plików systemu Linux

Uruchom wyszukiwanie plików bez użytkownika i grupy, takie pliki są potencjalnie niebezpieczne i mogą zostać wykorzystane przez cyberprzestępców. Aby znaleźć takie pliki, użyj polecenia:

znajdź / katalog -xdev \ (-nouser -o -nogroup \) -print

Jeśli pliki zostaną znalezione, zmień właściciela i grupę na nie.

Ustaw flagę chattr do niezbędnych plików, aby chronić je przed modyfikacją. Żaden użytkownik nie może modyfikować pliku, gdy ta flaga jest ustawiona. Na przykład:

chattr + i /etc/mysript.sh

Nie ustawiaj zbyt wysokich uprawnień do katalogów i plików, na przykład standardowych uprawnień do sieć:

  • 755 dla katalogów
  • 644 dla plików

W niektórych przypadkach mogą istnieć wyjątki, ale zawsze należy ostrożnie podchodzić do tego problemu. Zabroń użytkownikom ustawiania uprawnień 777. Możesz znaleźć takie pliki:

find / home -type f -perm 777

Bezpieczeństwo serwera WWW

Jeśli używasz serwera pod sieć, zajmij się konfiguracją usług internetowych. Zamknij przeglądanie zawartości katalogu poprzez Opcje -Indeksy, także dodaj Rama X..

Nagłówek zawsze dołącza opcje X-Frame SAMEORIGIN

Ten parametr zabrania otwierania strony w ramce, co zapobiegnie osadzaniu zawartości witryny w innych witrynach.

Wyłącz wyświetlanie swojej wersji sieć-serwer. Dla apacz w pliku konfiguracyjnym napisz:

serverSignature Off

Dla nginx w pliku konfiguracyjnym do sekcji http zapisz:

server_tokens wyłączone;

Jeśli używasz php, wyłącz niebezpieczne funkcje poprzez php.ini:

expose_php = Wył

- zabronić wyświetlania wersji php

disable_functions = exec, passthru, shell_exec, system, proc_open, popen

- zabrania korzystania z tych funkcji

Skonfiguruj również limity wykonywania skryptów i ich rozmiar, to ochroni cię przed drobnymi atakami.

Zainstaluj certyfikat SSL na swojej stronie internetowej i poczcie, aby połączenie w przeglądarce i podczas wysyłania poczty było szyfrowane. Możesz skorzystać z bezpłatnego certyfikatu Let's Encrypt lub kupić niedrogi płatny certyfikat.

Ochrona serwera fizycznego

Jeśli twój serwer ma konsolę do zdalnego dostępu ILO/IPMI/ BMC, zamknij dostęp do niego z zewnątrz, zostaw tylko zaufanego IP, ograniczy to niepotrzebne problemy.

Jeśli twój fizyczny serwer znajduje się poza biurem / domem, zamknij BIOS / UEFI hasło.

I najważniejsze: umieść swoje serwery u zaufanych dostawców.

Kopia zapasowa serwera Linux

Oczywiście nie zapomnij o utworzeniu kopii zapasowej serwera. Możesz wykonywać kopie zapasowe całego serwera, a także pojedynczych plików lub katalogów (możesz skonfigurować tworzenie kopii zapasowych, aby tworzyć bezpłatne skrypty do przechowywania w chmurze). W razie incydentu zawsze będziesz mieć pod ręką bieżącą kopię zapasową, z której możesz wdrożyć serwer lub wymienić pliki konfiguracyjne.