Podstawy bezpieczeństwa serwerów Linux

Podstawy bezpieczeństwa serwerów Linux

System Linux uznawany jest do dziś jako jeden z najbezpieczniejszych systemów, zarówno dla użytkowników domowych, jak i również serwerów. Nie jest najczęściej wybieranym systemem na komputery domowe, jednak jeżeli chodzi o serwery, to jest głównym systemem, na którym większość serwerów się opiera. W wielu miejscach przeczytasz, że powodem takiej decyzji jest to, że posiada on inny sposób zarządzania, bardziej bezpieczny. I tak rzeczywiście jest. Sposób zarządzania użytkownikami i uprawnieniami, choć niejednemu administratorowi sprawił problemy, to jednak po jego opanowaniu jest wzorowo zorganizowany. Jednak innym czynnikiem wpływającym na bezpieczeństwo serwerów Linux było to, że potocznie określani hakerzy pomijali go w wielu swoich działaniach. Głównym celem były serwery bazujące na Windows. Oczywiście nie twierdzę, że włamań do miejsc na których zainstalowany był Linux nie było. Jednak statystycznie było ich znacznie mniej niż w przypadku serwerów Windows. Poznaj podstawy bezpieczeństwa serwerów Linux.

Oprogramowanie typu malware występuje na każdym rodzaju systemu! Tylko w przypadku Linux było ono pomijane i dlatego oprogramowania typu malware było bardzo mało. Drugą przyczyną jest to, że system Linux uruchamia inaczej pliki wykonywalne, w związku z tym zainstalowanie złośliwego oprogramowania w tym systemie nie odbywa się tak samo jak w przypadku Windowsa.

Dlatego jeżeli trzymasz się zasady nic mi nie grozi bo mam Linux, to jesteś w ogromnym błędzie! Jest on tak samo narażony na ataki jak każdy inny system. Szczególnie, jeżeli wykorzystujesz go jako serwer. W tym wypadku musisz zwrócić szczególną uwagę, aby wbudowane mechanizmy zabezpieczające wzmocnić.

W tym materiale chcę pokazać kilka sposobów oraz programów, które wspomogą w takich działaniach. Niestety, nie jest to wszystko ponieważ musiałbym napisać o tym książkę. Natomiast w tym materiale chcę pokazać te które uważam, za tak zwane must have. Poznaj podstawy bezpieczeństwa serwerów Linux.

 

Sprawdź, czego nauczysz się dzięki kursowi Grafany!

Udostępniamy darmowo ponad godzinny materiał z kursu. Przekonaj się, że jest idealny dla Ciebie!

Chcesz wziąć udział w kursie? Kliknij w link i obejrzyj co Cię czeka: https://asdevops.pl/demo-grafana/

 

 

 

 

Aktualizacja serwera

Należy odróżnić aktualizację systemu od aktualizacji dystrybucji. W przypadku aktualizacji systemu jest to opcja jak najbardziej pożądana. Niemniej jednak aktualizacja dystrybucji do najnowszej może przysporzyć sporo kłopotów. Szczególnie w przypadku serwera. Dlatego bardzo ważna jest aktualizacja systemu, ponieważ posiada ona najczęściej tylko łatki bezpieczeństwa. Natomiast aktualizacja dystrybucji powoduje często modyfikację wersji zainstalowanego oprogramowania, co może przyczynić się do ogromnych komplikacji.

W celu aktualizacji w systemie Debian oraz opartych o niego:

sudo apt update && sudo apt upgrade

W przypadku systemu Red Hat Enterprise Linux oraz opartych o niego:

sudo dnf upgrade

lub

sudo yum upgrade

Repozytoria serwera

Repozytoria mają ogromne znaczenie w związku z poprzednim paragrafem. To dzięki nim po wprowadzeniu odpowiedniej komendy systemowej nasze oprogramowanie jest aktualizowane. Dlatego bardzo istotne jest, aby nie dodawać do repozytoriów serwera oprogramowania firm trzecich. Ma to ogromne znaczenie pod względem bezpieczeństwa.

sudo zamiast root

Stwórz konto uprzywilejowane zamiast korzystać z konta root. Zaloguj się z jego użyciem zamiast korzystać z konta root.

Po pierwsze tworzymy konto użytkownika:

adduser <nazwa-użytkownika>

Zostaniesz poproszony o uzupełnienie podstawowych informacji. Pamiętaj, aby utworzyć dość skomplikowane hasło umożliwiające logowanie do twojego konta.

Po uzupełnieniu wszystkich niezbędnych informacji należy jeszcze konto dodać do grupy sudo. Robisz to w następujący sposób:

usermod -a -G sudo <nazwa-użytkownika>

Deaktywacja konta root

Kolejnym krokiem jest zablokowanie możliwości logowania za pomocą konta root. W celu uniemożliwienia logowania na konto root musimy dostać się na konto superużytkownika:

sudo -s

Następnie blokujemy możliwość logowania na konto:

passwd -l root

Po wprowadzenia powyższego polecenie nie będzie można połączyć się z kontem root

Logowanie przy pomocy bezpiecznego SSH

W celu zapewnienia bezpieczeństwa należy zmienić sposób logowania przy pomocy ssh. Wszystkie zmiany należy wykonać w pliku /etc/ssh/sshd_config. Edytujemy go w następujący sposób:

sudo nano -w  /etc/ssh/sshd_config

Odnajdujemy linię

#PermitRootLogin prohibit-password

i zmieniamy na:

PermitRootLogin no

Kolejnym krokiem jest ustawienie innego portu do logowania przy pomocy ssh. Opcja ta znajduje się na samym początku pliku. Powinna wyglądać w następujący sposób:

#Port 22

Dlatego usuwamy # i określamy port.

Port 3333

Możemy jeszcze zmusić usługę do logowania tylko przy pomocy IPv4:

#AddressFamily any

Zamieniamy na:

AddressFamily inet

Po wprowadzeniu powyższych zmian zapisujemy i wychodzimy z pliku.

Pozostaje zrestartować usługę, aby móc wprowadzić zmiany:

sudo systemctl restart sshd

Teraz, aby zalogować się przy musimy podać port jaki wprowadziliśmy w pliku konfiguracyjnym:

ssh <nazwa-użytkownika>@<adres> -p 3333

SELinux uruchomienie lub instalacja

W skrócie SELinux polega na określeniu polityki bezpieczeństwa do jakiej ma się stosować cały system. Jest warty uwagi oraz wnikliwego zapoznania się ponieważ powstał na zlecenie NASA i od jądra 2.6. jest wbudowany w dystrybucjach opartych o Red Hat Enterprise Linux. Posiada już przygotowane polityki bezpieczeństwa, dlatego nie jesteśmy pozostawieni z tym sami sobie. Bardzo dobra dokumentacja znajduje się pod tym adresem. Natomiast jeżeli korzystasz z serwera bazującego na Ubuntu lub Debianie to polecam https://wiki.debian.org/SELinux.

Firewall

Bardzo istotnym elementem zarówno komputera domowego, jak i również serwera jest odpowiednio skonfigurowany firewall. Najczęściej uruchamiany jest po wykonaniu niezbędnej konfiguracji i wymaga kilku, kilkunastu testów sprawdzających jego działanie.

W przypadku serwera Ubuntu

Instalacja firewalla:

sudo apt install ufw

Dodanie odpowiednich portów:

sudo ufw allow ssh

sudo ufw allow http

sudo ufw allow https

Oczywiście lista jest przykładowa.

Te trzy są najczęściej udostępniane. W przypadku tego firewalla i apache2 możesz jeszcze skorzystać z:

sudo ufw allow in "Apache Full"

Udostępni niezbędne porty aby można było korzystać z serwera apache2.

Aktywowanie firewalla:

sudo ufw enable

Restartowanie:

sudo ufw restart

I sprawdzanie statusu:

sudo ufw status

W przypadku serwera CentOS Stream:

Aplikacja firewall-cmd jest automatycznie zainstalowana dlatego nie musimy przeprowadzać żadnej.

Dodanie odpowiednich portów:

firewall-cmd --add-service={ssh,http,https} --permanent

Dodawanie portów ręcznie:

firewall-cmd --add-port={<port>/<typ tcp lub udp>} --permanent

Przeładowanie firewalla:

firewall-cmd --reload

Aktywowanie firewalla:

sudo systemctl enable --now firewalld

Szyfrowana komunikacja

Do komunikacji z serwerem oraz przesyłania plików zawsze stosuj połączenie szyfrowane. Najlepszymi narzędziami do tego celu są ssh, rsync, scp, sftp. W przypadku braku szyfrowania dane przesyłane do serwera mogą w niewidoczny sposób zostać przechwycone oraz zmodyfikowane. Narzędziem, które może wspomóc w tych działaniach jest https://www.gnupg.org/ .

Nie korzystaj z przestarzałych poleceń

Do poleceń, z których nie powinieneś korzystać należą FTP, Telnet i Rlogin, Rsh. Nie są określane jako bezpieczne, dlatego niezwłocznie powinieneś je usunąć ze swojego serwera. Zwróć uwagę na nazwy z poprzedniego paragrafu. Wszystkie tam wymienione posiadają pierwszą literę s która oznacza secure, czyli bezpieczna.

W przypadku serwera opartego o pakiety .deb powinieneś usunąć następujące narzędzia:

sudo apt purge xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server

W przypadku serwerów opartych o pakiety .rpm:

sudo yum erase xinetd ypserv tftp-server telnet-server rsh-server

Stosowanie zasady minimalistycznej

Jest to serwer, dlatego powinien zawierać oprogramowanie niezbędne do jego funkcjonowania. Z tego względu zawsze warto sprawdzić jakie oprogramowanie jest aktualnie zainstalowane. Następnie zbędne usunąć. Jak najmniejsza liczba oprogramowania zmniejsza ryzyko znalezienia luki w oprogramowaniu. Drugim powodem stosowania takiej hierarchii jest utrzymanie porządku w systemie.

APT

W systemach opartych o apt do usuwania pakietów polecam:

sudo apt remove
sudo apt purge

Do wyświetlania list:

sudo apt list

Do czyszczenia:

sudo apt clean
sudo apt autoremove

YUM

W systemach opartych o yum do usuwania pakietów polecam:

sudo yum remove
sudo yum erase

Do wyświetlania list:

sudo yum list

Do czyszczenia:

sudo yum clean
sudo yum autoremove

Jeden serwer jedna usługa

Dobrym rozwiązaniem będzie stosowanie się do zasady jeden serwer – jedna usługa. Zapewni to dodatkowe bezpieczeństwo, ponieważ gdy ktoś uzyska dostęp do jednego z serwerów, to otrzyma tylko dostęp do częściowych danych. Takie rozbicie w wielu przypadkach może okazać się dość kosztowne, dlatego alternatywnym rozwiązaniem jest skorzystanie z dockera lub też wirtualizacji. Dzięki tym narzędziom uruchomisz na jednym serwerze oddzielne instancje usług. Gdy jedna z maszyn lub jeden z kontenerów, będzie zawierał lukę w usłudze, to pozostałe już nie. Dlatego dostęp będzie ograniczony do maszyny lub kontenera, który miał daną dziurawą usługę uruchomioną.

Pamiętaj o silnych hasłach

Podstawowym narzędziem obrony jest silne hasło. Korzystanie z połączenia słów i liczby odeszło do lamusa. Tworzenie takich haseł jest bardzo niebezpieczne i nie powinno mieć miejsca, szczególnie w przypadku serwerów. W związku z tym pamiętaj, aby hasło zawierało więcej niż 8 znaków, w którym znajdować powinna się kombinacja znaków, liczb oraz liter zarówno dużych i małych. Osobiście uważam, że nie powinieneś stosować się do zasady 8 znaków tylko hasła zawsze tworzyć dłuższe. Jeżeli ktoś będzie próbował złamać hasło najprawdopodobniej zacznie od kombinacji 8 znakowej.

Konfiguracja konieczności zmiana hasła

Nawet najbardziej skomplikowane hasła co jakiś czas powinny być zmieniane. Szczególnie w przypadku serwera. Do tego służy polecenie chage dostępne w systemach Linux. Zerknijmy na poniższy przykład:

sudo chage -M 30 -m 7 -W 5 kgodzisz

-M - maksymalna ilość dni za jaki ma nastąpić zmiana hasła
-m - minimalna ważność hasła
-W - przed jaką ilością dni mamy zostać poinformowani o konieczności zmiany hasła

Na końcu podajemy login naszego konta. Aby uzyskać informacje o wprowadzonych ustawieniach korzystamy z polecenia:

chage -l kgodzisz
Ostatnia zmiana hasła                           : gru 05, 2022
Hasło traci ważność                           : sty 04, 2023
Hasło nieaktywne                               : nigdy
Konto traci ważność                           : nigdy
Minimalna ilość dni pomiędzy zmianami hasła           : 7
Maksymalna ilość dni pomiędzy zmianami hasła          : 30
Liczba dni ostrzeżenia, zanim ważność hasła upłynie   : 5
Piszę ten artykuł 5 grudnia 2022 roku, a przykład dotyczy systemu Red Hat Enterprise Linux 8.

Ustaw blokowanie konta po nieudanych próbach logowania

Jest to bardzo ważne ustawienie w przypadku słownikowych prób złamania hasła. W tym wypadku powinniśmy ustawić limit możliwości błędnych prób logowania. Robimy to przy pomocy polecenia:

sudo faillog -m 3 -u darki

Ustawiamy trzy możliwe próby błędnego logowania. Na końcu znajduje się nazwa konta. W celu wyświetlenia ustawień korzystamy z polecenia:

sudo faillog -u darki
Login       Nieudane Maks.   Ostatnio                  Na
darki           0        3   01/01/70 01:00:00 +0100

Wyłączenie zbędnych usług

Tak jak w przypadku zbędnego oprogramowania, należy pozbyć się zbędnych usług i pozostawić tylko te niezbędne do prawidłowego funkcjonowania serwera oraz niezbędnych narzędzi. Do wyświetlenia listy korzystamy z:

sudo systemctl list-unit-files --type=service

W celu wyłączenia usługi posługujemy się poleceniem:

sudo systemctl stop <nazwa-usługi>
sudo systemctl disable <nazwa-usługi>

Wyszukiwanie plików o niewłaściwych uprawnieniach

Listę plików posiadających podejrzane uprawnienia uzyskamy przy pomocy polecenia:

sudo find /<nazwa-katalogu> -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Do wyświetlenia listy plików bez przypisanego właściciela używamy polecenia:

sudo find /<nazwa-katalogu> -xdev \( -nouser -o -nogroup \) -print

Każdemu z powyższych wyników należy się dokładnie przyjrzeć i nadać odpowiednie prawa lub usunąć.

Wyłącz obsługę niepotrzebnych urządzeń

Dla serwera zbędna jest możliwość obsługi portów usb. W związku z tym należy ją wyłączyć. Plik odpowiadający za to znajduje się w katalogu:

cd /lib/modules/$(uname -r)/kernel/drivers/usb/storage/

W przypadku Red Hat Enterprise Linux korzystamy z polecenia zmieniającego nazwę w następujący sposób:

sudo mv usb-storage.ko.xz usb-storage.ko.xz.blacklist

W przypadku systemu Debian korzystamy z polecenia zmieniającego nazwę w następujący sposób:

sudo mv usb-storage.ko usb-storage.ko.blacklist

Różnica jest tylko w końcówce nazwy pliku. Dlatego jeżeli spotkałbyś się z błędem zerknij w katalog jak nazywa się plik odpowiadający za USB.

Inne przydatne oprogramowanie

ClamAV

Do bardzo przydatnych programów zaliczamy darmowy ClamAV, który będzie służył jako skaner wirusów w systemie. Tak jak wspomniałem na początku tego materiału, system Linux nie jest pozbawiony zagrożeń, dlatego ważne jest, aby takie skanowania regularnie przeprowadzić.

Instalacja w systemie Debian i pochodnych:

sudo apt install clamav

Instalacja w systemie Red Hat Enterprise Linux i pochodnych:

sudo dnf install clamav
sudo yum install clamav

Uruchomienie skanowania:

sudo clamscan <ścieżka-do-skanowanego-katalogu>

chrootkit

Następnym bardzo pomocnym narzędziem będzie wyszukujące rootkity na naszym serwerze:

sudo apt install chkrootkit

Przeprowadzenie skanowania:

sudo chkrootkit

Podstawy bezpieczeństwa serwerów Linux – skanery podatności oraz monitoring

Do innych pomocnych narzędzi, z których warto skorzystać są skanery podatności jak na przykład Greenbone Vulnerability Manager czy też Zabbix, o którym bardzo dużo piszemy na blogu oraz prowadzimy szkolenie znajdujące się pod tym adresem.

Podsumowanie – podstawy bezpieczeństwa serwerów Linux

Zapewnienie bezpieczeństwa serwera nie należy do spraw łatwych. Prezentowane ustawienia należą do podstawowych, które powinien zawierać każdy serwer. Niemniej jednak jest to temat o tyle szeroki, że powstała już niejedna książka z tego zakresu. Jeżeli jesteś zainteresowany lub konieczne jest, abyś zapoznał się ze szczegółami to albo poszukaj publikacji w formie papierowej, albo zapraszam do naszego kursu znajdującego się pod tym adresem. W przypadku tego drugiego nie pozostaniesz sam, tak jak w przypadku książki. Posiadamy grupę na discordzie czy też na facebooku, gdzie w razie problemów będziesz mógł poprosić o pomoc. Mam nadzieję, że dzięki wpisowi znasz podstawy bezpieczeństwa serwerów Linux.

Chcesz poczytać więcej o Linuxie? Przeczytaj nasze wpisy blogowe!

 

 

 

Sprawdź, czego nauczysz się dzięki kursowi Grafany!

Udostępniamy darmowo ponad godzinny materiał z kursu. Przekonaj się, że jest idealny dla Ciebie!

Chcesz wziąć udział w kursie? Kliknij w link i obejrzyj co Cię czeka: https://asdevops.pl/demo-grafana/

 
 
 

Lekcja demo kursu Grafany!

X