Zabezpieczenie serwera z Debianem

Z Thomas-Krenn-Wiki
Przejdź do nawigacji Przejdź do wyszukiwania

W tym artykule opisujemy zabezpieczenia serwera z systemem Debian i opcjonalną konfigurację monitoringu.

Minimalna instalacja

Instalacja serwera tylko z wymaganymi pakietami. Każde niepotrzebne oprogramowanie stanowi dodatkowe pole do ataku.

Zabezpieczenie loginu SSH

Pozbawienie użytkownika root możliwości loginu przez SSH. Może zostać stworzona grupa, która może korzystać z SSH.

Szczegółowa instrukcja znajduje się w artykule pozbawienie użytkownika root możliwości loginu przez SSH.

Ponadto wygodnym i pewnym jest zakaz loginu hasłem i korzystanie z klucza SSH.

Szczegółowa instrukcja znajduje się w artykule login kluczem SSH.

Zmiana portu SSH

Większość (zautomatyzowanych) prób loginu przez SSH odbywa się na standardowym porcie 22. Łatwą i efektowną metodą jest zmiana portu SSH na inny. Aby tego dokonać należy otworzyć plik konfiguracyjny SSH

nano /etc/ssh/sshd_config

i zmienić aktualny port SSH z

22

na inny dowolny port. Następnie usługa SSH musi jeszcze zostać przez

/etc/init.d/ssh restart

restartowana.

Należy zwrócić uwagę, żeby nie wybrać portu, który jest już wykorzystywany. Lista portów i usług znajduje się w

more /etc/services

Aktywne połączenia SSH pozostają aktywne. Teraz należy otworzyć nowe okno terminalu i skontrolować czy połączenie SSH jest dostępne na wybranym porcie, należy to zrobić przed zamknięciem aktywnego okna.

Powiadomienie o loginie SSH

Za pomocą następującego skryptu w momencie loginu użytkownika przez SSH wysyłany jest e-mail.

Należy utworzyć skrypt shella /opt/shell-login.sh o następującej zawartości:

#!/bin/bash
  
echo "Login na $(hostname) $(date +%Y-%m-%d) $(date +%H:%M)"
echo "Uzytkownik: $USER"
echo
finger

Aby w momencie loginu SSH był wysyłany e-mail musi zostać w pliku

/etc/profile

dodany poniższy wiersz

/opt/shell-login.sh | mailx -s "Login SSH na NAZWA-HOSTA" adres-e-mail@example.com

Plik /opt/shell-login.sh musi posiadać uprawnienia 755:

chmod 755 /opt/shell-login.sh

W momencie loginu użytkownika przez SSH wysyłany jest automatycznie e-mail.

Regularne aktualizacje systemu

Debian Security Team regularnie udostępnia aktualizacje bezpieczeństwa i nowe wersje jądra. Jeżeli nie jest wykorzystywana własna kompilacja jądra to regularnie powinny być przeprowadzane aktualizacje systemu. Aby nie była konieczna dzienna kontrola, czy dostępne są nowe aktualizacje może zostać wykorzystany pakiet apticron, który informuje e-mailem o nowych aktualizacjach.

Instalacja pakietu przez

aptitude install apticron

i podanie w

/etc/apticron/apticron.conf

adresu e-mail z nazwą hosta (opcjonalnie). Aktualizacje mogą być również dziennie automatycznie instalowane za pośrednictwem cronjob. Nie jest to jednak zalecane, gdyż w ten sposób brakuje kontroli co jest instalowane i w przypadku problemów nie można określić ich przyczyny.

Linki : Powiadomienie o aktualizacja w Debianie z pakietem apticron

Zamknięcie wszystkich portów i praca z whitelists

Ta metoda wymaga dużej ostrożności podczas konfiguracji, żeby siebie samego nie zablokować.

Gdy wszystkie usługi są zainstalowane i wiadomo, które porty są wymagane to pozostałe mogą zostać zablokowane za pomocą iptables.

Dalsze informacje na ten temat znajdują się na poniższych stronach:

Zapobieganie atakom brute force z Fail2Ban

Pakiet Fail2Ban może zostać wykorzystany do zabezpieczenia różnych usług przed atakami brute force. Po określonej ilości nieudanych prób loginu napastnik jest blokowany przez określoną ilość minut/godz./dni.

Szczegółowe informacje na ten temat znajduje się w artykule zabezpieczenie loginu SSH w Debianie z fail2ban

Wykrywanie rootkitów z rkhunter

Jeżeli napastnikowi uda się włamać do systemu to zwykle jest trudno określić gdzie miało to miejsce. Narzędzie rkhunter kontroluje serwer na obecność typowych rootkitów, podejrzanych ciągów znaków (strings) itd.

Instalacja pakietu przez

aptitude install rkhunter

dodanie w pliku

/etc/rkhunter.conf

adresu e-mail w punkcie

MAIL-ON-WARNING="user@domain.tld"

Przeprowadzenie testu za pomocą

rkhunter --check

Jeżeli wystąpią tu powiadomienia, o których jest wiadomo, że są one false positive to może zostać utworzona whitelist w

/etc/rkhunter.conf

Może ona wyglądać w poniższy sposób

ALLOWHIDDENDIR=/dev/.mdadm
RTKT_FILE_WHITELIST=/etc/init.d/.depend.boot
SCRIPTWHITELIST=/etc/init.d/hdparm

Szczegółowe wyniki testów znajdują się w

/var/log/rkhunter.log

Monitoring usług z Monit

Usługi na serwerze mogą być monitorowane aplikacją Monit. Aplikacja Monit, w zależności od konfiguracji, wysyła e-mail jak tylko jedna usługa nie jest osiągalna lub jest restartowana przez Monit.

Możliwy jest monitoring powierzchni dyskowej, otwartych portów, usług itd.

Instalacja pakietu przez

aptitude install monit

zmiana za pomocą

nano /etc/default/monit

wartości

startup=0

na

startup=1

W ten sposób Monit możne funkcjonować jako usługa. Usługi, które mają być monitorowane muszą jeszcze zostać określone w pliku konfiguracyjnym:

nano /etc/monit/monitrc

Zawartość pliku może wyglądać np. następująco (komentarze // służą objaśnieniu i nie mogą się znajdować w pliku konfiguracyjnym)[1]

 set daemon 120                                                 // kontrola co 2 minuty
 set logfile syslog facility log_daemon                         // gdzie będą zapisywane logi 
 set mailserver localhost                                       // serwer mailowy przez który będę przesyłane maile
 set mail-format { from: user@domain.tld }                      // adres nadawcy e-maila 
 set alert user@domain.tld                                      // odbiorca e-maili 
 
 check system localhost                                         // monitoring lokalnego serwera
    if loadavg (5min) > 1 then alert                            // jeżeli loadaverage jest przez 5 minut większy niż 1, wysłać powiadomienie
    if memory usage > 75% then alert                            // jeżeli wykorzystywane jest więcej niż 75% powierzchni dyskowej, wysłać powiadomienie
    if cpu usage (user) > 70% then alert                        // jeżeli wykorzystywane jest więcej niż 70% zasobów CPU, wysłać powiadomienie (User)
    if cpu usage (system) > 30% then alert                      // jeżeli wymagane jest więcej niż 30% zasobów CPU, wysłać powiadomienie (System)
    if cpu usage (wait) > 20% then alert                        // jeżeli wymagane jest więcej niż 20% zasobów  CPU, wysłać powiadomienie (Wait)
 
 check process sshd with pidfile /var/run/sshd.pid              // monitoring usługi SSH przez plik PID
    start program  "/etc/init.d/ssh start"                      // sposób uruchomienie SSH w przypadku stwierdzenia błędu
    stop program  "/etc/init.d/ssh stop"                        // sposób zakończenie SSH w przypadku stwierdzenia błędu
    if failed port 22 protocol ssh then restart                 // jeżeli usługa SSH nie funkcjonuje, restart
    if 5 restarts within 5 cycles then timeout                  // jeżeli po 5 próbach usługa nie może zostać uruchomiona, z timeoutem zakończyć
 
 check process mysql with pidfile /var/run/mysqld/mysqld.pid    // monitoring usługi Mysql przez plik PID
    group database                                              // zdefiniowanie grupy 
    start program = "/etc/init.d/mysql start"                   // sposób uruchomienie serwera MySQL w przypadku stwierdzenia błędu
    stop program = "/etc/init.d/mysql stop"                     // sposób zakończenie serwera MySQL w przypadku stwierdzenia błędu
    if failed host 127.0.0.1 port 3306 then restart             // jeżeli port 3306 (MySql) na lokalnym serwerze nie funkcjonuje, restart
    if 5 restarts within 5 cycles then timeout                  // jeżeli po 5 próbach usługa nie może zostać uruchomiona, z timeoutem zakończyć
 

Oczywiście na rynku dostępne jest wiele aplikacji do monitoringu. Jednak konfiguracja aplikacji Monit przebiega bardzo szybko i nie jest komplikowanie. Jeżeli jednak wymagane jest więcej opcji lub mają być monitorowane całe farmy serwerów to zalecamy Nagios, do którego udostępniamy plug-in IPMI.

Monitoring dysków za pomocą smartmontools

Ważne komponenty takie jak HDD powinny być również monitorowane. Ponieważ istnieje zbyt wiele kombinacji kontrolerów RAID i ich konfiguracji, opisujemy tu jedynie smartmontools. W przykładzie wykorzystywane są 2 dyski SATA w RAID 1 (za pośrednictwem mdadm) na kontrolerze RAID on-board.

Instalacja pakietu smartmontools przez

aptitude install smartmontools 

i w pliku

/etc/default/smartmontools

usunąć znak # (hash) w poniższym wierszu

#start_smartd=yes

W ten sposób usługa jest uruchamiana podczas startu systemu.

start_smartd=yes
Teraz należy w pliku 
/etc/smartd.conf

dodać dyski, które maja być monitorowane. Wykomentować następujący wiersz

DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner

i umieścić poniżej następujące dwa wiersze

/dev/sda -n standby -a -I 194 -W 6,50,55 -R 5 -M daily -M test -m user@domain.tld
/dev/sdb -n standby -a -I 194 -W 6,50,55 -R 5 -M daily -M test -m user@domain.tld

Legenda:

 /dev/sda               // określa monitorowany dysk
 -n standby             // jeżeli dysk jest w trybie standby, nie wybudzać 
 -a                     // kontrola wszystkich wartości 
 -I 194                 // odczyt temperatury 
 -W 6,50,55             // powiadomienie przy wzroście temperatury o 6 lub więcej stopni.  Maksymalna temperatura 50 stopni, powiadomienie przy 55 stopniach.
 -R 5                   // uwaga na realokowane sektory (ID 5)
 -M daily               // dzienne przypomnienie, nawet jeżeli problem został już zgłoszony
 -M test                // wysłanie e-maila testowego podczas restartu usług 
 -m user@domain.tld     // odbiorca powiadomień 

Odnośniki

Powiązane artykuły

Debian GNU/Linux
Monitoring serwera z Debianem za pośrednictwem aplikacji Munin
Udostępnienie w Sambie z uwierzytelnieniem