Ответ
Для базовой защиты от DDoS-атак на уровне сервера можно использовать комбинацию встроенных инструментов и настроек. Эти меры эффективны против атак низкого и среднего уровня.
-
Ограничение скорости запросов (Rate Limiting) Самый эффективный метод на уровне веб-сервера. Nginx позволяет ограничить количество запросов с одного IP-адреса.
# В http блоке limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s; # В server или location блоке server { limit_req zone=mylimit burst=10 nodelay; }rate=5r/s: не более 5 запросов в секунду с одного IP.burst=10: позволяет краткосрочное превышение лимита на 10 запросов.
-
Ограничение количества соединений С помощью
iptablesможно ограничить число одновременных подключений к порту (например, 80) с одного IP.# Разрешить не более 20 одновременных подключений к порту 80 с одного IP iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT -
Включение SYN Cookies Это механизм ядра Linux для защиты от SYN-флуд атак. Он активируется при высокой нагрузке.
# Включить SYN Cookies sysctl -w net.ipv4.tcp_syncookies=1 -
Использование Fail2Ban
Fail2Banсканирует логи (например, Nginx) и автоматически блокирует IP-адреса, проявляющие вредоносную активность (слишком много запросов, попытки сканирования и т.д.).
Важно: Эти методы не спасут от масштабных, распределенных атак. Для серьезной защиты необходимо использовать специализированные сервисы (например, Cloudflare, Qrator Labs) или аппаратные решения.
Ответ 18+ 🔞
Слушай, ну вот представь себе картину: сидит админ, пьёт кофе, и тут — бац! — сервер лег, как подстреленный. А всё потому, что какой-то умник с ботнетом размером с овердохуища решил похулиганить. Ну, блядь, классика жанра. Так вот, чтобы тебя не накрыло таким же медным тазом, есть несколько простых, но годных приёмов на уровне самого сервера. От мелких пакостников — сработает, а от настоящего апокалипсиса — нет, тут уже нужны тяжёлые пушки.
-
Ограничение скорости запросов (Rate Limiting) Это, блядь, основа основ! Не давать каждому челу с одного IP долбить сервер как сумасшедший. В Nginx это делается проще пареной репы.
# В http блоке limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s; # В server или location блоке server { limit_req zone=mylimit burst=10 nodelay; }Перевод с технического на русский:
rate=5r/s— это «не больше пяти запросов в секунду, а то получишь по ебалу». Аburst=10— это «ладно, на десять запросов сверх лимита я закрою глаза, но потом всё, пиздец». -
Ограничение количества соединений Тут в игру вступает старый добрый
iptables. Можно сказать: «Эй, дружок-пирожок, с одного IP — не больше 20 дырок в мою дверь (порт 80) одновременно!».# Разрешить не более 20 одновременных подключений к порту 80 с одного IP iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECTПроще говоря: больше 20 — иди нахуй. Прямо так и пишется.
-
Включение SYN Cookies Это такая хитрая магия ядра Линукса против особо наглых атак (SYN-флуд). Включается одной строчкой, когда система уже чувствует, что её начинают ебать.
# Включить SYN Cookies sysctl -w net.ipv4.tcp_syncookies=1Ядро такое: «Ага, я вижу, вы тут все SYN-пакеты кидаете, чтобы места занять? Ну-ка, получите печеньку и идите нахуй, пока не докажете, что вы не робот».
-
Использование Fail2Ban А это, сука, мой любимый автоматический цепной пёс. Он тупо смотрит в логи (Nginx, SSH — куда скажешь), видит, что какой-то IP ведёт себя как последний пидарас (тысячи запросов, подбор паролей), и просто банит его нахуй. На время или навсегда. Красота!
Но вот главное, что нужно понять, ёпта: это всё — как поставить хороший замок на дверь и решётку на окно. От вора-одиночки или пьяного соседа — защитит. Но если на твой дом решит наехать целая орда пидаров с тараном и огнемётами (читай: мощный распределённый DDoS), то эти решётки свернутся в трубочку. Тут уже нужны либо спецсервисы вроде Cloudflare (которые развернут атаку в сторону, как хитрая жопа), либо дорогущие железные коробки.
Так что, если проект серьёзный — не экономь на защите, а то будет мучительно больно и обидно.