Защита серверов от DDoS-атак (Distributed Denial of Service) — одна из важнейших задач в современном мире сетевой безопасности. DDoS-атаки способны парализовать работу сервиса, генерируя огромное количество запросов, что приводит к перегрузке сервера и его отказу в обслуживании легитимных пользователей.
Одним из эффективных инструментов для защиты от таких атак в системах на базе Linux является nftables. Это мощный и гибкий сетевой фильтр, который предлагает множество возможностей для настройки правил фильтрации трафика, управления скоростью соединений и блокировки подозрительных пакетов.
В данной статье мы рассмотрим, как можно использовать nftables для защиты сервера от DDoS-атак, начиная с базовой настройки и заканчивая созданием правил, предназначенных для минимизации последствий таких атак.
- Преимущества использования nftables
- Основные методы защиты от DDoS с использованием nftables
- Шаг 1: Установка и настройка nftables
- Установка nftables
- Создание базовой конфигурации
- Шаг 2: Ограничение числа новых соединений
- Шаг 3: Защита от SYN-флудов
- Шаг 4: Фильтрация ICMP-запросов (ping-флуд)
- Шаг 5: Ограничение трафика на определённые порты
- Шаг 6: Логирование подозрительного трафика
- Шаг 7: Применение и сохранение конфигурации
- Шаг 8: Постоянный мониторинг и адаптация
- Заключение
Преимущества использования nftables
nftables (оф. сайт: https://nftables.org/) является современным сетевым фильтром, который был введён в ядро Linux как замена для iptables, ip6tables, arptables и ebtables. Основные преимущества использования nftables по сравнению с другими брандмауэрами включают:
- Упрощённый синтаксис: Правила в nftables более компактные и логичные, что облегчает их создание и поддержку.
- Мощные возможности фильтрации: nftables предлагает гибкие механизмы для управления трафиком, включая использование различных протоколов и возможность работы с несколькими типами данных (IPv4, IPv6, ARP).
- Высокая производительность: Благодаря более оптимизированному коду, nftables показывает высокую производительность при обработке сетевого трафика.
- Минимальная нагрузка на систему: nftables эффективно использует ресурсы сервера, что позволяет ему обрабатывать большое количество правил без существенного увеличения нагрузки на CPU.
- Поддержка сложных сценариев: nftables легко справляется с требованиями сложных сетевых сценариев, таких как многоуровневая защита и динамическая фильтрация.
Основные методы защиты от DDoS с использованием nftables
DDoS-атаки могут принимать различные формы, начиная от простых атак на уровне протоколов до сложных атак на уровне приложений. Основная цель защиты от DDoS заключается в том, чтобы минимизировать влияние на легитимных пользователей, блокируя подозрительный трафик и ограничивая нагрузку на сервер. С помощью nftables можно реализовать следующие стратегии защиты:
- Ограничение числа новых соединений (connection tracking).
- Защита от SYN-флудов.
- Фильтрация ICMP-запросов (ping-флуд).
- Ограничение трафика по портам.
- Логирование подозрительного трафика.
Ранее мы писали о методах пошаговой защиты серверов от DDoS-атак от настройки ядра до конфигурации фаервола и frontend сервера Nginx.
Шаг 1: Установка и настройка nftables
Первым шагом в защите вашего сервера с помощью nftables является установка и настройка самого инструмента. На большинстве современных дистрибутивов Ubuntu nftables уже доступен в пакетах.
Установка nftables
Чтобы установить nftables, выполните следующую команду:
sudo apt install nftables
После установки запустите службу и включите её на старте системы:
sudo systemctl enable nftables sudo systemctl start nftables
Создание базовой конфигурации
Создайте новую таблицу и цепочку для фильтрации входящего трафика:
sudo nft add table inet filter sudo nft add chain inet filter input { type filter hook input priority 0 \; }
Эта таблица и цепочка будут использоваться для добавления правил фильтрации, которые мы создадим для защиты от DDoS-атак.
Шаг 2: Ограничение числа новых соединений
Ограничение числа новых соединений помогает защитить сервер от перегрузки в результате большого количества запросов, поступающих одновременно с одного источника. Это особенно полезно против таких атак, как SYN-флуд, когда злоумышленник отправляет множество запросов с целью исчерпать ресурсы сервера.
Добавьте правило для ограничения числа новых соединений с одного IP-адреса:
sudo nft add rule inet filter input ip saddr { limit rate 25/second burst 100 } accept
Это правило разрешает не более 25 новых соединений в секунду от одного IP-адреса. В случае временного всплеска нагрузки допускается до 100 соединений.
Шаг 3: Защита от SYN-флудов
SYN-флуд — это тип DDoS-атаки, при которой злоумышленник отправляет серверу огромное количество SYN-запросов, чтобы истощить ресурсы и заблокировать доступ для легитимных пользователей. Для защиты от этой атаки можно настроить контроль скорости SYN-пакетов.
Добавьте правило для ограничения количества SYN-пакетов:
sudo nft add rule inet filter input tcp flags syn limit rate 10/second burst 20 accept
Это правило разрешает до 10 SYN-запросов в секунду с возможностью временного увеличения до 20 при всплесках трафика.
Шаг 4: Фильтрация ICMP-запросов (ping-флуд)
DDoS-атаки могут также осуществляться через протокол ICMP, чаще всего через так называемый ping-флуд. В таких атаках злоумышленник отправляет на сервер множество ICMP-запросов (echo-request), перегружая его ресурсы. Чтобы защититься от этого, можно ограничить количество ICMP-запросов:
sudo nft add rule inet filter input icmp type echo-request limit rate 10/second burst 20 accept
Это правило ограничивает частоту запросов ICMP до 10 пакетов в секунду, с возможностью увеличения до 20.
Шаг 5: Ограничение трафика на определённые порты
Для защиты от DDoS-атак на конкретные сервисы (например, веб-сервер), можно ограничить количество соединений на определённые порты. Это предотвратит ситуацию, когда злоумышленник направляет большое количество запросов на определённый порт, чтобы перегрузить сервис.
Добавьте правило для ограничения соединений на порт 80 (HTTP):
sudo nft add rule inet filter input tcp dport 80 limit rate 50/second burst 100 accept
Это правило разрешает до 50 запросов в секунду на порт 80 с возможностью временного увеличения до 100.
Шаг 6: Логирование подозрительного трафика
Для анализа потенциальных атак и последующего улучшения правил безопасности важно вести логирование подозрительного трафика. Например, вы можете логировать все пакеты, которые выглядят как часть SYN-флуда, прежде чем их сбрасывать:
sudo nft add rule inet filter input tcp flags syn limit rate 20/second burst 40 counter log prefix "SYN flood attempt: " drop
Это правило логирует все подозрительные SYN-запросы и сбрасывает их.
Шаг 7: Применение и сохранение конфигурации
После того как вы настроите все необходимые правила для защиты от DDoS, их нужно сохранить, чтобы они применялись при каждой перезагрузке сервера. Для этого выполните команду:
sudo nft list ruleset > /etc/nftables.conf
Теперь все ваши правила будут автоматически загружаться при старте системы.
Шаг 8: Постоянный мониторинг и адаптация
Защита от DDoS — это не статический процесс, а постоянная работа. Чтобы поддерживать высокий уровень безопасности, важно регулярно отслеживать активность на сервере и адаптировать правила по мере изменения характера трафика и видов атак.
Заключение
nftables предлагает мощные возможности для настройки защиты от DDoS-атак. Используя его гибкий синтаксис и высокую производительность, можно создать эффективную систему фильтрации трафика, которая позволит снизить риск перегрузки сервера и обеспечить стабильную работу даже в условиях атаки.
Основные стратегии защиты включают ограничение числа соединений, контроль за количеством запросов на определённые порты и логирование подозрительных пакетов. nftables позволяет тонко настраивать правила в зависимости от типа атак и особенностей вашего сервера, что делает его идеальным инструментом для защиты от DDoS в средах на базе Linux.