Защита от DDoS — тонкое искусство на стыке программирования, компьютерной безопасности и системного администрирования. В списке инструментов защиты не последнее место занимает популярный сервер Nginx.
Если его правильно настроить, можно минимизировать последствия DDoS-атак и затруднить их проведение. Мы подготовили список рекомендаций для тех, кто строит систему защиты от основных атак DDoS с помощью Nginx.
Существуют и другие способы защиты от DDoS-атак, не связанные с Nginx. Например, если инфраструктура размещена в облаке, можно подключить платформу фильтрации трафика от своего провайдера или использовать CDN — сеть доставки контента, распределенная инфраструктура которой будет обрабатывать запросы и атака не затронет основной сервер.
1. Готовьтесь к балансировке нагрузки с первого дня
Часто бэкэнд-системы сначала работают с небольшими нагрузками. В этом случае балансировка нагрузки не нужна — нет и самой нагрузки. Но это не значит, что к нагрузкам не надо готовиться.
Проектирование и конфигурирование балансировщика на основе Nginx стоит начинать заранее, до момента, когда он действительно понадобится. Внезапная популярность вашего ресурса, попадание программы в топы хит-парадов, резкий рост спроса могут свалиться на вас как снег на голову. Такое внимание пользователей к вашей программе может принести и негатив — если сервер упадет под нагрузкой, клиенты будут недовольны, вы рискуете понести убытки. Если заранее настроить балансировщик и подготовить мощности для обработки запросов, вы легко справитесь с ростом трафика.
Поскольку повышенный спрос на программу чем-то похож на DDoS-атаку, готовность к всплескам полезного трафика защитит вас и от атак.
Если инфраструктура развернута в облаке, подключить балансировщик нагрузки можно бесплатно в пару кликов — нужно только создать сеть и указать, как будет распределяться нагрузка между виртуальными машинами.
2. Кэширование всего, чего только можно
Часть нагрузки на любой сервер — обслуживание однотипных запросов, содержимое которых редко меняется. Выдача стандартных форм, заголовков, статических файлов требует внимания сервера и создает ненужную нагрузку там, где ее можно было бы избежать. Включайте агрессивные политики кэширования везде, где можно. Кэшировать можно как на уровне сервера, создавая кэш-копии статического HTML-контента, так и на уровне клиента заголовками управления кэшированием.
Правильные настройки кэша позволяют снять с сервера рутинную нагрузку, разгрузить процессорные мощности и сеть для обработки целевого трафика и противостояния вредоносным DDoS-запросам. Ваш сервер сможет дольше продержаться под атакой, пока инженеры будут работать над решением проблемы.
3. Блокируйте подозрительные адреса
Часто в ходе расследования инцидентов безопасности выясняется, что большая часть вредоносного трафика приходит с определенных IP-адресов. Такой трафик легко блокируется файерволами. Если по какой-либо причине нет возможности настроить файервол, вы всегда можете отрезать запросы злоумышленников на уровне самого Nginx:
location / {
deny 123.123.123.0/28;
# ...
}
Вот такая простая опция в конфигурационном файле блокирует вредоносную подсеть целиком.
4. Боритесь с медленными соединениями
Один из способов загрузить сервер лишней работой и провести DDoS — отправлять на него медленные запросы. Отвечая на медленные коннекты, сервер не сможет обрабатывать запросы от настоящих пользователей. Для защиты от DDoS в Nginx есть возможность выставить тайм-ауты, которые не позволят соединениям висеть слишком долго:
server {
client_body_timeout 5s;
client_header_timeout 5s;
# ...
}
Эта простая настройка защитит вас от целого класса DDoS-атак.
Для облачной инфраструктуры у некоторых провайдеров можно подключить защиту от DDoS-атак, тогда не придется ничего настраивать самостоятельно. Специальная платформа фильтрации надежно защитит от всех видов угроз.
5. Ограничивайте количество запросов с одного адреса
Еще одна из тактик проведения DDoS — обрушить на сервер большое количество запросов с одного адреса. Nginx умеет предотвращать и это, ограничивая количество запросов с адреса к ресурсу:
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server {
# ...
location /login.html {
limit_req zone=one;
# ...
}
}
В этом примере кода мы ограничиваем количество запросов к ресурсу 30 запросами в минуту. Этого более чем достаточно для любого живого пользователя.
6. Защищаем приложение — ограничиваем число коннектов к бизнес-логике
Если в вашей системе есть чувствительные к нагрузке компоненты, логика в которых может сломаться от избыточного числа запросов, то стоит ограничить максимальное число соединений на таких программах. Например, это уместно для сервиса перевода денег в банковской системе или сервиса оплаты в магазине.
Ограничить количество коннектов на бэкенд в Nginx DDoS Protection можно так:
upstream website {
server 192.168.100.1:80 max_conns=200;
server 192.168.100.2:80 max_conns=200;
queue 10 timeout=30s;
}
DDoS-атаки опасны тем, что для их организации злоумышленникам не нужно разрабатывать специальное ПО — отправить множество вредоносных запросов можно даже с ноутбука. Это значит, что подвергнуться нападению могут и крупные корпорации, и небольшой бизнес. Поэтому стоит заранее подумать о том, как защитить свои серверы.
Источник: https://mcs.mail.ru/blog/zaschita-ot-ddos-atak-sredstvami-nginx
Читайте также статьи по теме:
Что такое DDoS-атаки и почему они опасны для любого IT-сервиса
Как защититься от DDoS-атак: 4 основных правила, чтобы обезопасить ваши сервисы
Быстрый сайт, высокие позиции в поиске, бесперебойный стриминг: для чего нужна сеть доставки контента