Zabezpieczenie serwera z Debianem
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
- ↑ Monitoring Your Server Services With Monit (debianhelp.co.uk)