Посилення безпеки ядра 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
Очікуваний результат: відображається інформація про версію, що підтверджує успішне встановлення.
Виконуйте симуляцію 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.
У сучасних дистрибутивах цей параметр зазвичай увімкнено за замовчуванням. Перевірити можна командою: 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 атаки
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