Linux - меры против стресса
У меня есть VPS под управлением Ngix и в настоящее время хостинг нескольких веб-сайтов. Как вы знаете, у VPS мало ресурсов, и меры безопасности должны быть приняты клиентом.
Я только что заметил, что существует множество инструментов для работы со стрессом, которые могут вызвать сбой веб-сервера, или сервер съест все ресурсы, что может привести к зависанию. У меня есть LoadUI в моем компьютере с Windows. Есть даже онлайн-сервисы, похожие на LoadImpact.com
Ему даже не нужно запускать 10 или тысячи инструментов одновременно. Даже ребенок может ввести доменное имя в эти инструменты и запустить тест с множеством одновременных подключений и полностью использовать пропускную способность сервера, аппаратные ресурсы и т. Д...
Я хочу знать, как я должен предотвратить эти атаки наводнения? Это что-то должно быть обработано Iptables? Или Nginx?
2 ответа
То, что вы уже используете nginx, является хорошим началом - серверы на основе событий гораздо более устойчивы к атакам типа sloloris.
Тем не менее, это хорошая идея, чтобы предотвратить атаки DOS как можно дальше от вашего приложения. Следующий шаг - iptables.
Вам нужно подумать о том, как вы классифицируете атаки и отличаете их от реального трафика - скорость, с которой создаются новые соединения, является очень хорошим показателем - и вы можете настроить iptables для ограничения новых соединений для каждого IP-адреса:
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent \
--update --seconds 30 --hitcount 80 -j DROP
(отбрасывает новые запросы на соединение, когда скорость возрастает выше 80 каждые 30 секунд)
Вы можете ограничить количество одновременных подключений на IP-адрес:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit \
--connlimit-above 20 -j REJECT --reject-with tcp-reset
Также полезно ограничить пропускную способность, в зависимости от профиля трафика, скажем, до 10% доступной пропускной способности - это делается с помощью tc, а не iptables.
Затем для соединений, которые проходят, могут быть характеристики в HTTP-запросе, которые идентифицируют атаку (реферер, запрошенный URL-адрес, пользовательский агент, язык принятия....), не имеет значения, какие конкретные значения вы выбираете для этого только сейчас - вам просто нужно убедиться, что у вас есть оборудование, где вы можете быстро изменить параметры при первых признаках атаки. Хотя вы можете обработать запрос на веб-сервере, лучшим решением будет блокировка доступа с удаленного IP-адреса с помощью iptables - fail2ban - это инструмент для привязки данных вашего журнала к вашей конфигурации iptables.
Конечно, для крупномасштабной DDOS это не решит проблему, когда злоумышленники заполняют ваш интернет-канал пакетами, которые сервер игнорирует, - для этого вам нужно поговорить с вышестоящим поставщиком.
2 я бы порекомендовал изучить ограничение скорости iptables и fail2ban. Fail2ban даст вам приличную автоматическую блокировку IP-адресов, которые слишком сильно бьют по вашему серверу, и позволит вам настроить, как долго вы хотите, чтобы они были забанены. Ограничение скорости Iptables позволит вам ограничить все типы трафика, поступающего на ваш сервер. Я нашел достойную статью об этом здесь. Однако, если вы выполните обычный поиск в Google, вы увидите гораздо больше.
Редактировать: Хотя у меня нет личного опыта работы с nginx, я вижу, что у него есть http://wiki.nginx.org/HttpLimitReqModule, который вы также должны изучить.