как грамотно защитить nginx от ddos

TB
На сайте с 19.12.2012
Offline
8
15159

Задумался на защитой от ddos сервера с nginx который стоит frontend'ом.

Перерыл гугл в поисках оптимального решения. Более менее понятно с ограничениями кол-ва соединений, но вот когда соединений 1-2 с бота (скажем slow post атака) тут я попал в ступор. Как понял есть 2 основных метода: 1) анализировать лог 2) проверять ботов на поддержку кукисов, явы, флэш. Задумался над 2-ым и набрел на модуль nginx "testcookie-nginx-module".

Кто на практике работал с testcookie-nginx-module, какова эффективность модуля и что посоветуете по защите nginx от ddos атак?

Evas EvaSystems
На сайте с 31.05.2012
Offline
104
#1

Здравствуйте. Ограничивать надо не по кол-ву соединений, а по кол-ву запросов.

Также необходимо верно настроить сам nginx (таймауты, размер запроса и др..). Данная атака имитирует большое кол-во

медленно читающих ответ клиентов, и при плохой настройке она будет успешной. Также заняться тонкой настройкой всего

сервера и его служб (nginx, apache, mysql и др...) для обеспечения нормальной работы под высокими нагрузками. По поводу кукес

модуля, тут нужен белый лист, в котором будут жить подсетки поисковиков, но сами понимаете даже белый лист не даст полной

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

повышается нагрузка (что и будет наблюдаться при атаке). Также, не стоит забывать, что умные боты спокойно примут и вернут вам куки обойдя данную защиту.

Системный администратор Linux. Настройка, сопровождение и оптимизация серверов. Отзывы - searchengines.guru/ru/forum/1017473
Den73
На сайте с 26.06.2010
Offline
523
#2

куки было актуально год назад, уже нет)

методов много, сперва нужн перестать гуглить всякую хрень и научится думать самому.

анализ лога - хорошо, но это не реал тайм пока вы там анализируете вас 50 раз положат, если ботов много и то вы так и будете лежать.

и на закуску, не положат по http -> не проблема -> зальют канал.

zexis
На сайте с 09.08.2005
Offline
388
#3

Около 50% ботов понимают кукисы устанавливаемые через заголовки HTTP

add_header Set-Cookie "namec=val";

Я не видел ддос ботов, которые бы понимали куки устанавливаемые джаваскриптом

Но банить тех, кто не возвращает куки нужно только во время атаки, иначе вы 2-5% пользователей забаните и поисковых ботов.

Определить момент атаки можно по повышенному количеству запросов.

Нужно комплекс мер применять для защиты сервера.

1) в nginx поставить limit_req_zone, limit_zone

2) Анализировать логи access.log, тех кто флудит заносить в фаервол.

3) Анализировать список конектов netstat и банить тех кто сделал слишком много коннектов.

4) Во время атаки включать бан по кукам поставленным джаваскриптом.

5) Использовать белые списки поисковиков

Атаки до 2000 одновременно атакующих ботов и до 60% канала такими настройками отбивать можно успешно.

Это около 80% атак.

Den73
На сайте с 26.06.2010
Offline
523
#4
zexis:

Я не видел ддос ботов, которые бы понимали куки устанавливаемые джаваскриптом

я видел недавно, я сперва не понял юмора потом проверил и убедился.

D
На сайте с 28.06.2008
Offline
1101
#5

Рекомендую защиту zexis - у меня стоит его защита на сервере с сумарной посещаемостью более 100.000 хостов. После установки не падал ни разу.

Максимально забаненых ботов было как раз в районе 2000. Мелкие атаки 500-1000 идут почти каждый день. Сервер их теперь не замечает :)

png zah-month.png
Den73
На сайте с 26.06.2010
Offline
523
#6
Dram:
Рекомендую защиту zexis - у меня стоит его защита на сервере с сумарной посещаемостью более 100.000 хостов. После установки не падал ни разу.

Максимально забаненых ботов было как раз в районе 2000. Мелкие атаки 500-1000 идут почти каждый день. Сервер их теперь не замечает :)

значит вас не ддосили, раз не падал.

зы школо ддос с 1к неадекватных ботов это не ддос.

у zexis еще вменяемый софт, ++ ему в карму.

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

TB
На сайте с 19.12.2012
Offline
8
#7

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


<html><body>setting cookie...<script type=\"text/javascript\" src=\"/aes.min.js\" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers({используем любимый JS обфускатор чтобы спрятать значение iv, меняем по крону}),b=toNumbers({используем любимый JS обфускатор чтобы спрятать значение ключа, меняем по крону}),c=toNumbers("$testcookie_enc_set");document.cookie="BPC="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/";document.location.href="$testcookie_nexturl";</script></body></html>

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

Таким образом для меня выстраивается такая схема защиты

настраиваю ядро ос

limit_req_zone, limit_zone прописываю для nginx

пишу скрипт для iptables который будет банить самых агрессивных (на данный момент стоит скрипт ddos deflate) + скрипт который будет обнаруживать начало атаки изменять конфиг nginx для включения явакуков

с ддосом не по хттп борюсь настройкой ядра ос и iptables

и принципе если атака оч сильная то больше ничего я на уровне сервера сделать не смогу.

я все верно понял? ничего не пропустил?

Evas EvaSystems
На сайте с 31.05.2012
Offline
104
#8
Я не видел ддос ботов, которые бы понимали куки устанавливаемые джаваскриптом

Аналогично, лично столкнулся с подобным, боты понимали и возвращали

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

Вопрос, а что же, по-вашему, я продаю? Вы являетесь моим клиентом?

Что-то не припомню. Не видя ничего, вы пытаетесь тут что-то утверждать, весело.

Ссылка на мою тему с отзывами в подписи, ознакомьтесь. А сейчас, всё что я сделаю,

так это пожелаю вам добра и распрощаюсь с вами.

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

Таким образом для меня выстраивается такая схема защиты
настраиваю ядро ос
limit_req_zone, limit_zone прописываю для nginx
пишу скрипт для iptables который будет банить самых агрессивных (на данный момент стоит скрипт ddos deflate) + скрипт который будет обнаруживать начало атаки изменять конфиг nginx для включения явакуков
с ддосом не по хттп борюсь настройкой ядра ос и iptables
и принципе если атака оч сильная то больше ничего я на уровне сервера сделать не смогу.

я все верно понял? ничего не пропустил?

Упустили, перечитайте пожалуйста моё сообщение.

P.S Тс, могу настроить всё это для работы в автоматическом режиме.

zexis
На сайте с 09.08.2005
Offline
388
#9

limit_req_zone

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

Что вы понимете под "ддос не по хттп" ?

Den73
На сайте с 26.06.2010
Offline
523
#10
theBlackWolf:
спасибо, понял что защиту куками без атаки не стоит включать. По поводу ява куков я сомневаюсь что приведенный код с хабра боты смогут выполнить

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

theBlackWolf:

белый список модуль поддерживает, так что принципе можно избежать бана поисковых ботов

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

theBlackWolf:

но встает вопрос о включении его во время атаки, полагаю тут нужен скрипт, который определит атаку, заменит конфиг нгикса и перезагрузит его.

уж такую простую задачу не решить :( .... а собрались от ддос защищаться :).

theBlackWolf:

Таким образом для меня выстраивается такая схема защиты
настраиваю ядро ос
limit_req_zone, limit_zone прописываю для nginx
пишу скрипт для iptables который будет банить самых агрессивных (на данный момент стоит скрипт ddos deflate) + скрипт который будет обнаруживать начало атаки изменять конфиг nginx для включения явакуков
с ддосом не по хттп борюсь настройкой ядра ос и iptables
и принципе если атака оч сильная то больше ничего я на уровне сервера сделать не смогу.

я все верно понял? ничего не пропустил?

только не копируйте чужие конфиги, можете сделать еще хуже) там не так уж много параметров которые реально имеет смысл крутить, например выкиньте nf_conntrack из ядра, включите syncookies, увеличте размеры очередей, можно уменьшить таймауты, не добавляйте правила в iptables с использованием connlimit, не заставляйте работать apache или чего у вас там.. во время ddos, отдавайте гостям из кэша.

от флуда канала не поможет "настройкой ядра ос и iptables"

дерзайте, что бы затестить можете сходить на хак форумы и заказать на себя атаку (только не радуйтесь раньше времени там скажем так больше половины реальные LOL досеры).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий