Атаки конкурентов, способные нанести вред вашему сайту: Классический DDOS веб-сервера

К наиболее популярным атакам без сомнения можно отнести этот популярный способ, когда веб-сервер переполняется запросами от ботов и не может нормально обслуживать запросы посетителей.
В результате такой атаки сайт становится недоступным, а с серверной стороны можно наблюдать рост нагрузки на сервер, большое число процессов веб-сервера и конечно, значительный рост коннектов. Если атака будет очень сильной и паразитный трафик превысит пропускную способность канала к серверу, то на него нельзя будет зайти по ssh.
Но столь сильные атаки — редкость, так как 10-20Mbps такого трафика вполне способны свалить неподготовленный сервер.



Способов борьбы с такими атаками очень много, как программных так и аппаратных. Кроме этого существуют отдельные сервисы, которые «чистят» трафик, присылая только легальные запросы.
Я же хочу рассмотреть очень простой и элегантный способ борьбы, для которого нам потребуется nginx и iptables с модулем string.
Слабое место ботов в том, что они не понимают кукисы. На этой особенности и основана моя система защиты. Мы будем передавать на все запросы к веб-серверу «печеньку», и разделять трафик на легальный и мусорный, основываясь именно на этом параметре.
Сначала нужно будет спрятать веб-сервер, например повесив на 8080 порт, а на его место поставить быстрый nginx, и сконфигурировать страницу-заглушку. В качестве примера подойдет стандартный конфиг nginx, единственное, что нужно сделать — добавить cookie, дописав в конфиге nginx:
<b>add_header Set-Cookie "type=this-is-not-bot";</b>

На самой странице-заглушке можно написать нечто вроде «Извините, сайт под DDOS, включите кукисы в браузере и нажмите на ссылку для перехода».
Когда посетитель откроет такую страницу, то при следующем запросе он передаст эту «печеньку», на основе которой можно направить трафик к спрятанному веб-серверу:
<b>iptables -t nat -A PREROUTING -p tcp --dport 80 -m string --string "this-is-not-bot" --algo kmp -j REDIRECT --to-ports 8080</b>

Разумеется, что для нормальной работы сайта не следует забывать передавать в кукисах эту заветную строчку.

Ожидали чего-то более сложного? Извините…

P.S. Поисковые боты не принимают кукисы, так что будет вполне разумно сделать для них заблаговременное исключение.