У меня есть VPS под управлением Ngix и в настоящее время размещено несколько веб-сайтов. Как вы знаете, у VPS мало ресурсов, и меры безопасности должны выполняться клиентом.
Я только что заметил, что существует множество стрессовых инструментов, которые могут вызвать сбой веб-сервера или сервер полностью использует ресурсы, что может привести к зависанию. У меня есть LoadUI на моем компьютере с Windows. Есть даже похожие онлайн-сервисы, такие как LoadImpact.com.
Ему даже не нужно запускать 10 или тысячи инструментов одновременно. Даже ребенок может ввести имя домена в этих инструментах и запустить тест с множеством одновременных подключений и полностью использовать пропускную способность сервера, аппаратные ресурсы и т. Д. ..
Я хочу знать, как мне предотвратить эти наводнения? Это что-то должно обрабатываться Iptables? Или Nginx?
То, что вы уже используете 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, я вижу, что у него есть HttpLimitReqModule что вы тоже должны изучить.