Jak sprawić, by Twój serwer nie stał się łatwym celem dzięki skryptom hardeningowym konstruktoida
Wyobraź sobie, że właśnie wdrożyłeś nową instancję Ubuntu. Wszystko działa, SSH jest otwarte, pakiety są zaktualizowane. Czujesz się bezpiecznie — dopóki nie sprawdzisz logów i nie zobaczysz niekończących się prób logowania metodą brute-force z całego świata. Domyślne ustawienia dystrybucji Linuksa stawiają na wygodę kosztem bezpieczeństwa, więc utwardzanie systemu wymaga godzin dostosowywania konfiguracji SSH, konfigurowania zapór i ograniczania uprawnień usług.
Autor repozytorium działający pod nickiem konstruktoid postanowił uprościć tę rutynę i zgromadził skrypty do automatycznego utwardzania Ubuntu. To nie jest tylko zbiór poleceń — to cała strategia przekształcania zwykłego systemu operacyjnego w cyfrową twierdzę, z kontrolą poprzez systemd jako fundamentem.
Co dokładnie robi ten skrypt
Główna idea projektu to minimalizacja powierzchni ataku. Jeśli usługa nie jest potrzebna, powinna być wyłączona. Jeśli usługa działa, powinna mieć dokładnie te uprawnienia, które są wymagane do wykonania jej zadania.
Skrypt sprawdza system pod kątem kompleksowej listy kryteriów, z których wiele pochodzi z zaleceń CIS (Center for Internet Security). Oto kilka obszarów, w których wprowadza porządek:
- Konfiguracja parametrów jądra poprzez sysctl. Obejmuje to blokowanie przekazywania pakietów (IP forwarding), ochronę przed spoofingiem i ograniczanie dostępu do funkcji debugowania jądra.
- Utwardzanie uprawnień do plików systemowych. Skrypt sprawdza uprawnienia do
/etc/shadow,/etc/gshadowi innych krytycznych plików konfiguracyjnych, aby zwykli użytkownicy lub przejęte aplikacje webowe nie mogły ich odczytać. - Ograniczanie usług systemd. To być może najciekawsza część. Skrypt wykorzystuje nowoczesne funkcje izolacji systemd, takie jak
PrivateTmp,NoNewPrivilegesiProtectSystem. - Zarządzanie modułami jądra. Rzadko używane protokoły (jak DCCP czy SCTP) oraz systemy plików, które często stają się źródłem podatności, są wyłączane.
Jak to działa w praktyce
Projekt jest napisany w powłoce Shell, co czyni go przejrzystym do audytu. Możesz po prostu przeczytać kod przed jego uruchomieniem i dokładnie zrozumieć, co zmieni się w Twoim systemie. Aby rozpocząć, wystarczy sklonować repozytorium i uruchomić główny skrypt jako root.
Przy okazji, autor ma osobną wersję dla Debiana, ale to repozytorium jest skoncentrowane konkretnie na Ubuntu (wersje 20.04, 22.04 i 24.04). Co ciekawe, skrypt nie tylko modyfikuje konfiguracje — instaluje również dodatkowe narzędzia bezpieczeństwa, na przykład auditd do szczegółowego logowania wywołań systemowych.
Drobna konfiguracja pod Twoje potrzeby
Uruchomienie skryptu bezpośrednio na żywym systemie produkcyjnym to ryzykowne przedsięwzięcie. Utwardzanie to zawsze kompromis między bezpieczeństwem a funkcjonalnością. Jeśli wyłączysz możliwość ładowania pewnych modułów jądra, Docker lub określony sprzęt sieciowy może przestać działać.
Projekt zawiera plik konfiguracyjny, w którym możesz nadpisać zmienne. Na przykład, jeśli absolutnie potrzebujesz IPv6 (co skrypt domyślnie próbuje ograniczyć), możesz to dostosować w ustawieniach. Zalecam najpierw uruchomić skrypt na testowej maszynie wirtualnej w pełni replikującej Twój stos technologiczny produkcji.
Dlaczego warto zwrócić uwagę na wersję systemd
Wiele starszych poradników bezpieczeństwa Linuksa nadal zaleca edytowanie dziesiątek plików w /etc/. Podejście konstruktoida jest bardziej nowoczesne: aktywnie wykorzystuje modularność systemd. Zamiast przepisywać główny plik jednostki usługi, tworzone są pliki drop-in. Pozwala to na aktualizację pakietów przez apt bez konfliktów konfiguracyjnych, podczas gdy Twoje dostosowania bezpieczeństwa pozostają w mocy.
Skrypt sprawdza również pakiety pod kątem kompromitacji i sugeruje usunięcie oprogramowania, które często staje się luką bezpieczeństwa, takiego jak stare implementacje rsh czy telnet.
Kto znajdzie ten projekt użyteczny
Jeśli administrujesz kilkoma serwerami na potrzeby projektów osobistych, to repozytorium stanie się świetną listą kontrolną. Nie musisz uruchamiać całego skryptu — możesz zapożyczyć dobre rozwiązania do konfigurowania parametrów ufw czy sysctl.
Dla administratorów systemów w firmach to gotowa podstawa do tworzenia własnego korporacyjnego obrazu golden image. Zamiast wymyślać koło na nowo, możesz wziąć pracę konstruktoida i dostosować ją do swoich wymagań zgodności.
Jednak pamiętaj: bezpieczeństwo to proces. Uruchomienie skryptu dzisiaj nie gwarantuje ochrony przed podatnością, która pojawi się jutro. Ale z pewnością podnosi poprzeczkę dla potencjalnego atakującego tak wysoko, że najprawdopodobniej pójdzie szukać łatwiejszego celu.
Od czego zacząć naukę
- Przyjrzyj się plikowi
ubuntu.sh. To jest punkt wejścia, z którego wywoływane są pozostałe moduły. - Zbadaj folder
scripts/. Logika jest podzielona według kategorii: sieć, system plików, uprawnienia. - Koniecznie przeczytaj sekcję o zmiennych środowiskowych w README, aby zrozumieć, jak kontrolować zachowanie skryptu bez edytowania jego kodu.
Projekt jest żywy i regularnie aktualizowany pod kątem nowych wydań Ubuntu oraz zawiera najnowsze zalecenia bezpieczeństwa. To świetny przykład na to, jak automatyzacja zamienia godziny rutynowej pracy w zadanie zajmujące minuty.
Powiązane projekty