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, который вы также должны изучить.

Другие вопросы по тегам