Всем привет !
Вспомнил про эту тему, даже не знаю интересно будет кому здесь-нет, но продолжение кул-стори, о том как я пережил более 30 Гбитную атаку, разумеется это не уровень лабы Каспера, но для меня это ново, было занемательно...
Итак, вообще у моего хостера на тарифе есть аппаратная защита от забивания канала на уровне ДЦ, но к сожалению в данном случае при такой силе атаки на Layer 7, был пропуск более 20000 ботов, а у меня проект не коммерческий, в общем-то что-бы положить мою впску достаточно и 3000 ботов, короче пришлось фильтровать в ручную !
Итак что было сделано:
Вообще я понимал, что реально навряд-ли они будут постоянно ддосить с такой силой, но всё-же хотелось обезвредить именно в пик атаки, для этого я по GeoIP заблокировал все страны, кроме СНГ.
Но на моё удивление, эти товарищи стали ддосить из РФ, короче всё сервер упал, ну я решил глянуть логи что-там такое и обнаружил кучу запросов такого типа:
"GET / HTTP/1.0" 301 184 "-" "-"
Ну тут сразу видно, пустые запросы и пустой юзер-агент, ага можно сделать фильтр в nginx:
if ($http_user_agent = "") { return 444; } if ($http_user_agent = "-") { return 444; }
Обратите внимание на код ошибки 444 - Это нестандартная ошибка, т.е. nginx закроет соединение, не вернув никакой инфы, ботам должно понравиться...
Также на всякий случай сделал ещё это, т.е. ограничение на запросы:
if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; }
Очень сильно помогло, но не надолго, опять упал, да-блин , анализирую дальше логи, чо они-там опять придумали, но в этот раз ещё легче:
Запросы такого типа, как понял с ломанных сайтов, кстати привожу запрос как он есть:
GET / HTTP/1.0" 200 253178 "-" "WordPress/4.2.2; http://demo.nola.land;verifying pingback from 127.0.0.1"
Куча более 1000 таких запросов, сайты разные, но везде юзерагент WordPress, ога попались
Делаем фильтр:
if ( $http_referer ~* (^WordPress) ){ return 444; }
Ну и всё, по началу где-то час всё тормазило, а потом они сдулись, далее вернул нужные мне страны, а это РФ, СНГ, Европа и США, а все остальные в бан, это на случай повторных атак, короче пока живу...
Для справки, если верить логам, много ботов было с Индии, Китая, Вьетнама, далее Мексика...
Ну и блокировать лучше на уровне файервола, в плане нагрузке, хотя мне удобней всё через nginx делать...
Выводы которые я сделал:
Какая-бы навороченная аппаратная защита не была, всё-равно должен-быть человек, который-бы мог всё-это фильтровать вручную + также не забывайте делать лимиты на коннекты к базе и т.д., что-бы не потерять доступ к серверу в случае критичных нагрузок !
Надеюсь эта тема кому-то поможет !