Uodpornienie jądra Linux za pomocą sysctl.conf. Ochrona przed atakami SYN Flood i dostrajanie TCP | INTROSERV
EUR
european

EUR

usa

USD

Poland Pl
Ex. VAT Ex. VAT 0%

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ę.

Tip

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.

Tip

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

Info

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:

  • -S wysyła pakiety SYN
  • --flood wysyła pakiety tak szybko, jak to możliwe
  • -p 80 celuje 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 -p działa bez błędów
  • tcp_syncookies równa się 1
  • Licznik SyncookiesSent roś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

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA