Посилення безпеки ядра Linux через sysctl.conf. Захист від SYN Flood атак і налаштування TCP | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Посилення безпеки ядра Linux через sysctl.conf. Захист від SYN Flood атак і налаштування TCP

Вступ

У цьому посібнику ви посилите безпеку ядра Linux за допомогою sysctl.conf, захистите сервер від SYN flood атак і оптимізуєте роботу TCP-стеку. Налаштування параметрів ядра підвищує стійкість до мережевих атак типу відмови в обслуговуванні (DoS) та покращує загальну продуктивність TCP. Ви також змоделюєте SYN flood атаку в контрольованому середовищі та перевірите, що механізми захисту працюють коректно.

Передумови

Цільова аудиторія: Системні адміністратори середнього рівня
Орієнтовний час: 45–60 хвилин

Системні вимоги

  • Операційна система: Ubuntu 24.04 LTS (протестовано); Сумісно з Debian 12/13 та іншими сучасними дистрибутивами Linux
  • Версія ядра: 5.x або новіша
  • Мінімум 1 ГБ оперативної пам'яті
  • Права root або sudo
  • Мережевий доступ між тестовими машинами

Необхідні інструменти

Встановіть наступні утиліти:

sudo apt update

sudo apt install -y hping3 net-tools procps iproute2

Перевірте встановлення: hping3 --version
Очікуваний результат: відображається інформація про версію, що підтверджує успішне встановлення.

Tip

Виконуйте симуляцію SYN flood лише у контрольованому лабораторному середовищі. Ніколи не тестуйте системи, які вам не належать або на які ви не маєте дозволу.

Крок 1: Створіть резервну копію поточної конфігурації sysctl

Перед внесенням змін створіть резервну копію.

sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup

Результат: створено резервний файл /etc/sysctl.conf.backup.

Крок 2: Налаштуйте параметри ядра для захисту від SYN Flood

Відкрийте файл конфігурації:

sudo nano /etc/sysctl.conf

Додайте або змініть наступні параметри.

Увімкнення SYN Cookies

net.ipv4.tcp_syncookies = 1

Призначення: Вмикає SYN cookies, коли переповнюється черга SYN backlog.
Значення:

  • 0 – Вимкнено
  • 1 – Увімкнено при переповненні SYN backlog (рекомендовано)
  • 2 – Завжди увімкнено (використовується рідко)

Чому: SYN cookies запобігають виснаженню пам'яті, оскільки ресурси не виділяються до завершення TCP handshake.

Tip

У сучасних дистрибутивах цей параметр зазвичай увімкнено за замовчуванням. Перевірити можна командою: sysctl -a | grep net.ipv4.tcp_syncookies

Збільшення черги SYN Backlog

net.ipv4.tcp_max_syn_backlog = 4096

Призначення: Максимальна кількість запитів на з'єднання, що очікують підтвердження.
Чому: Більша черга дозволяє обробляти більше напіввідкритих TCP-з'єднань перед тим, як ядро почне їх відхиляти.

Зменшення кількості повторних SYN-ACK

net.ipv4.tcp_synack_retries = 3

Призначення: Кількість повторних передач пакетів SYN-ACK.
Чому: Зменшення цього значення скорочує час очікування для підозрілих напіввідкритих з'єднань.

Повторне використання TCP Time-Wait

net.ipv4.tcp_tw_reuse = 1

Призначення: Дозволяє повторно використовувати сокети у стані TIME-WAIT для нових вихідних з'єднань.
Значення:

  • 0 – Вимкнено
  • 1 – Увімкнено

Чому: Зменшує виснаження сокетів при високому навантаженні.

Зменшення FIN Timeout

net.ipv4.tcp_fin_timeout = 15

Призначення: Час перебування сокета у стані FIN-WAIT-2.
Чому: Зменшує використання ресурсів через застарілі з'єднання.

Увімкнення Reverse Path Filtering

net.ipv4.conf.all.rp_filter = 1

Призначення: Перевіряє відповідність джерельної IP-адреси таблиці маршрутизації.
Значення:

  • 0 – Вимкнено
  • 1 – Строгий режим
  • 2 – Помірний режим

Чому: Допомагає зменшити ризик IP spoofing атак.

Збільшення максимальної кількості відкритих файлів

fs.file-max = 2097152

Призначення: Максимальна кількість файлових дескрипторів у системі.
Чому: Запобігає вичерпанню дескрипторів файлів при великій кількості мережевих з'єднань.

Крок 3: Застосуйте зміни sysctl

Застосуйте зміни без перезавантаження системи:

sudo sysctl -p

Очікуваний результат: кожен параметр відображається разом з новим значенням.
Перевірте конкретний параметр: sysctl net.ipv4.tcp_syncookies
Очікуваний результат: net.ipv4.tcp_syncookies = 1

Результат: параметри ядра активовано.

Крок 4: Симуляція SYN Flood атаки

Info

WARNING: Виконуйте це лише в лабораторному середовищі.

З окремої тестової машини виконайте:

sudo hping3 -S --flood -V <YOUR_SERVER_IP> -p 80

Пояснення:

  • -S надсилає SYN пакети
  • --flood надсилає пакети максимально швидко
  • -p 80 цільовий HTTP-порт

Результат: на сервер надсилається великий обсяг SYN-пакетів.

Крок 5: Моніторинг сервера під час атаки

На цільовому сервері перевірте з'єднання:

netstat -ant | grep SYN_RECV | wc -l

Результат: відображає кількість напіввідкритих з'єднань.

Перевірте лічильник SYN cookies:

nstat -az | grep Syncookies

Ви повинні побачити зростання лічильників, таких як TcpExtSyncookiesSent. Це підтверджує використання SYN cookies.

Крок 6: Порівняйте поведінку до і після посилення безпеки

Якщо тестувати без посилення:

  • кількість SYN_RECV швидко зростає
  • сервер може перестати відповідати
  • черга з'єднань переповнюється

Після посилення:

  • активуються SYN cookies
  • менше відхилених з'єднань
  • сервер залишається доступним

Встановіть вебсервер на цільовому сервері:

sudo apt install nginx

Щоб перевірити доступність:

curl http://localhost

Результат: сервер відповідає навіть під час симульованої атаки.

Крок 7: Оптимізація продуктивності TCP (додатково)

Додайте додаткові параметри до конфігурації sysctl. Виконайте nano /etc/sysctl.conf і додайте:

net.core.somaxconn = 8192

net.core.netdev_max_backlog = 5000

net.ipv4.tcp_max_tw_buckets = 2000000

Пояснення:

  • net.core.somaxconn – максимальна довжина черги прослуховування для застосунків.
  • net.core.netdev_max_backlog – максимальна кількість пакетів у черзі перед обробкою.
  • net.ipv4.tcp_max_tw_buckets – максимальна кількість сокетів у стані TIME-WAIT. Актуально для серверів з високим навантаженням і достатнім обсягом RAM.

Ці параметри покращують продуктивність при великому мережевому трафіку.

Застосуйте зміни:

sudo sysctl -p

Перевірочний список

  • sysctl -p виконується без помилок
  • tcp_syncookies дорівнює 1
  • лічильник SyncookiesSent зростає під час атаки
  • сервер залишається доступним
  • у журналах ядра немає попереджень: dmesg | grep -i syn

Відкат змін

Відновіть початкову конфігурацію:

sudo cp /etc/sysctl.conf.backup /etc/sysctl.conf

sudo sysctl -p

Результат: система повертається до початкових параметрів ядра.

За бажанням видаліть тестові інструменти:

sudo apt remove hping3 -y

Усунення проблем

Лічильник Syncookies не збільшується

Перевірте: sysctl net.ipv4.tcp_syncookies
Якщо значення 0, повторно застосуйте конфігурацію.

Сервер все ще відхиляє з'єднання

Збільшіть backlog: net.ipv4.tcp_max_syn_backlog = 8192
Після цього застосуйте зміни:

sudo sysctl -p

Висновок

У цьому посібнику ви посилили безпеку ядра Linux за допомогою sysctl.conf, увімкнули механізми захисту від SYN flood атак, оптимізували роботу TCP-стеку та перевірили ефективність налаштувань шляхом симуляції атаки. Ці зміни підвищують стійкість до SYN flood атак та покращують загальну стабільність мережевої інфраструктури.

Наступні кроки

  • Поєднати з обмеженням швидкості у брандмауері (iptables або nftables)
  • Налаштувати обмеження connection tracking
  • Розгорнути системи виявлення вторгнень (IDS)
  • Моніторити метрики за допомогою Prometheus і 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