Uodpornienie jądra Linux za pomocą sysctl.conf. Ochrona przed atakami SYN Flood i dostrajanie TCP
Wprowadzenie
W tym poradniku wzmocnisz jądro Linuxa używając sysctl.conf, zabezpieczysz serwer przed atakami SYN flood i zoptymalizujesz zachowanie stosu TCP. Strojenie na poziomie jądra poprawia odporność na ataki typu denial-of-service (DoS) oparte na sieci i zwiększa ogólną wydajność TCP. Symulujesz również atak SYN flood w kontrolowanym środowisku i sprawdzasz, czy mechanizmy ochronne działają poprawnie.
Wymagania wstępne
Docelowa grupa odbiorców: Średniozaawansowani administratorzy systemów
Szacowany czas: 45–60 minut
Wymagania systemowe
- System operacyjny: Ubuntu 24.04 LTS (przetestowany); kompatybilny z Debian 12/13 i innymi nowoczesnymi dystrybucjami Linuxa
- Wersja jądra: 5.x lub nowsza
- Minimum 1 GB RAM
- Uprawnienia root lub sudo
- Dostęp do sieci między maszynami testowymi
Wymagane narzędzia
Zainstaluj następujące narzędzia:
sudo apt update
sudo apt install -y hping3 net-tools procps iproute2
Zweryfikuj instalację: hping3 --version
Oczekiwany wynik: informacje o wersji potwierdzające pomyślną instalację.
Symulację ataku SYN flood przeprowadzaj tylko w kontrolowanym środowisku laboratoryjnym. Nigdy nie testuj na systemach, które nie są twoją własnością lub na których nie masz pozwolenia na testowanie.
Krok 1: Utwórz kopię zapasową bieżącej konfiguracji sysctl
Przed wprowadzeniem zmian utwórz kopię zapasową.
sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup
Wynik: Utworzono plik kopii zapasowej /etc/sysctl.conf.backup.
Krok 2: Skonfiguruj parametry jądra dla ochrony przed SYN flood
Otwórz plik konfiguracyjny:
sudo nano /etc/sysctl.conf
Dodaj lub zmodyfikuj następujące parametry.
Włącz SYN Cookies
net.ipv4.tcp_syncookies = 1
Cel: Włącza SYN cookies, gdy kolejka SYN backlog przepełnia się.
Wartości:
- 0 – Wyłączone
- 1 – Włączone, gdy występuje przepełnienie SYN backlog (zalecane)
- 2 – Zawsze włączone (rzadko używane)
Dlaczego: SYN cookies zapobiegają wyczerpaniu pamięci, unikając alokacji zasobów do momentu zakończenia handshake.
W nowoczesnych dystrybucjach ta opcja jest domyślnie włączona. Możesz to sprawdzić za pomocą następującego polecenia: sysctl -a | grep net.ipv4.tcp_syncookies
Zwiększ kolejkę SYN Backlog
net.ipv4.tcp_max_syn_backlog = 4096
Cel: Maksymalna liczba oczekujących żądań połączeń oczekujących na potwierdzenie.
Dlaczego: Większy backlog pozwala na więcej półotwartych połączeń, zanim jądro zacznie je odrzucać.
Zredukuj liczbę prób SYN-ACK
net.ipv4.tcp_synack_retries = 3
Cel: Liczba retransmisji dla pakietów SYN-ACK.
Dlaczego: Obniżenie tej wartości zmniejsza czas oczekiwania na złośliwe półotwarte połączenia.
Włącz ponowne użycie TCP Time-Wait
net.ipv4.tcp_tw_reuse = 1
Cel: Pozwala na ponowne użycie gniazd TIME-WAIT dla nowych wychodzących połączeń.
Wartości:
- 0 – Wyłączone
- 1 – Włączone
Dlaczego: Zmniejsza wyczerpanie gniazd pod dużym obciążeniem.
Zredukuj czas oczekiwania FIN
net.ipv4.tcp_fin_timeout = 15
Cel: Czas, przez jaki gniazdo pozostaje w stanie FIN-WAIT-2.
Dlaczego: Zmniejsza zużycie zasobów przez nieaktywne połączenia.
Włącz filtrowanie ścieżki zwrotnej
net.ipv4.conf.all.rp_filter = 1
Cel: Waliduje adresy IP źródłowe względem tabeli routingu.
Wartości:
- 0 – Wyłączone
- 1 – Tryb ścisły
- 2 – Tryb luźny
Dlaczego: Pomaga w łagodzeniu ataków polegających na fałszowaniu adresów IP.
Zwiększ maksymalną liczbę otwartych plików
fs.file-max = 2097152
Cel: Maksymalna liczba uchwytów plików w całym systemie.
Dlaczego: Zapobiega wyczerpaniu deskryptorów plików podczas dużego obciążenia połączeniami.
Krok 3: Zastosuj zmiany sysctl
Zastosuj zmiany bez ponownego uruchamiania:
sudo sysctl -p
Oczekiwany wynik: każdy parametr wyświetlony z nową wartością.
Zweryfikuj konkretny parametr: sysctl net.ipv4.tcp_syncookies
Oczekiwany wynik: net.ipv4.tcp_syncookies = 1
Wynik: Parametry jądra są aktywne.
Krok 4: Symuluj atak SYN Flood
Ważne: Wykonuj to tylko w środowisku laboratoryjnym.
Z oddzielnej maszyny testowej uruchom:
sudo hping3 -S --flood -V <YOUR_SERVER_IP> -p 80
Wyjaśnienie:
-Swysyła pakiety SYN--floodwysyła pakiety tak szybko, jak to możliwe-p 80celuje w port HTTP
Wynik: Wysoki wolumen pakietów SYN wysłanych do serwera.
Krok 5: Monitoruj serwer podczas ataku
Na docelowym serwerze monitoruj połączenia:
netstat -ant | grep SYN_RECV | wc -l
Wynik: Wyświetla liczbę półotwartych połączeń.
Sprawdź licznik SYN cookies:
nstat -az | grep Syncookies
Powinieneś zaobserwować rosnące liczniki, takie jak TcpExtSyncookiesSent. To potwierdza, że SYN cookies są używane.
Krok 6: Porównaj zachowanie przed i po wzmocnieniu
Jeśli testujesz bez wzmocnienia:
- Liczba SYN_RECV szybko rośnie
- Serwer może stać się nieodpowiedzialny
- Kolejka połączeń przepełnia się
Po wzmocnieniu:
- SYN cookies aktywują się
- Mniej odrzuconych połączeń
- Serwer pozostaje responsywny
Zainstaluj serwer WWW na docelowym serwerze:
sudo apt install nginx
Aby przetestować responsywność:
curl http://localhost
Wynik: Serwer odpowiada normalnie nawet podczas symulowanego ataku.
Krok 7: Strojenie wydajności TCP (opcjonalna zaawansowana optymalizacja)
Dodaj dodatkowe parametry strojenia do konfiguracji sysctl. Uruchom nano /etc/sysctl.conf i dodaj:
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 2000000
Wyjaśnienie:
net.core.somaxconn– maksymalna długość kolejki nasłuchu dla aplikacji.net.core.netdev_max_backlog– maksymalna liczba pakietów w kolejce po stronie wejściowej przed przetworzeniem.net.ipv4.tcp_max_tw_buckets– maksymalna liczba gniazd TIME-WAIT. Ta opcja jest istotna dla serwerów z dużym obciążeniem i wystarczającą ilością RAM.
Te parametry poprawiają wydajność pod dużym ruchem.
Zastosuj zmiany:
sudo sysctl -p
Lista kontrolna weryfikacji
sysctl -pdziała bez błędówtcp_syncookiesrówna się 1- Licznik
SyncookiesSentrośnie podczas ataku - Serwer pozostaje responsywny
- Brak ostrzeżeń jądra w logach:
dmesg | grep -i syn
Cofanie zmian
Przywróć oryginalną konfigurację:
sudo cp /etc/sysctl.conf.backup /etc/sysctl.conf
sudo sysctl -p
Wynik: System powraca do oryginalnych parametrów jądra.
Opcjonalnie usuń narzędzia testowe:
sudo apt remove hping3 -y
Rozwiązywanie problemów
Syncookies nie rosną
Sprawdź: sysctl net.ipv4.tcp_syncookies
Jeśli wartość wynosi 0, ponownie zastosuj konfigurację.
Serwer nadal odrzuca połączenia
Zwiększ backlog: net.ipv4.tcp_max_syn_backlog = 8192
Następnie zastosuj zmiany:
sudo sysctl -p
Podsumowanie
Wzmocniłeś jądro Linuxa używając sysctl.conf, włączyłeś mechanizmy ochrony przed atakami SYN flood, zoptymalizowałeś zachowanie stosu TCP i zweryfikowałeś ochrony poprzez symulację kontrolowanego ataku. Te zmiany poprawiają odporność na ataki SYN flood i zwiększają ogólną stabilność sieci.
Kolejne kroki
- Połącz z ograniczaniem szybkości zapory (iptables lub nftables)
- Wprowadź limity śledzenia połączeń
- Wdroż systemy wykrywania włamań (IDS)
- Monitoruj metryki za pomocą Prometheus i Grafana