Назад | Перейти на главную страницу

Varnish и Connection Flood (DoS - DDoS)

Я поигрался с сервером кеширования Varnish, и моя веб-страница заработала молниеносно, она получила 97 баллов в Google Pagespeed и 100 @ Pingdom. Я использовал Varnish (прокси для nginx), NGINX (доступны только локально, прокси * .php в php-fpm (но я думаю о переходе на HipHop PHP Compiler)).

Так как моя страница была быстрой и использовалось только ~ 500/1 ГБ оперативной памяти, я попросил моего друга провести стресс-тест на HTTP-сервере этой машины. Я настроил следующие Anti-DDoS-механизмы:

На веб-странице нет динамических данных, за исключением воспроизводимой в данный момент песни, которая работает на APC, и определенно нет необходимости в сессиях.

Итак, теперь к моей проблеме, мой друг начал DoS-атаку с какой-то машины, которую ему было разрешено использовать, и мой сервер отключился ОЧЕНЬ быстро. Мне удалось подключиться к SSH, поэтому я использовал последовательную консоль и проверил журналы varnishd, которые показали: начало сеанса конец сеанса

И это все время повторяется. Я заранее получил доступ к консоли и запретил IP-адреса, ê вуаля моя страница вернулась.

Теперь, поскольку нет необходимости в сеансе, мне нужен синтаксис VCL для запрета всех сеансов, кроме сценариев в подкаталоге / user.

IIRC varnish использует потоки для обработки соединений и настроен с ограничением. Итак, все, что нужно сделать злоумышленнику, - это открыть, скажем, 200 подключений к кешу, чтобы заблокировать каждый поток (см. Также slowloris). С другой стороны, nginx (который с радостью будет работать как кеширование обратного прокси) - сервер, основанный на событиях; переключение контекста осуществляется по запросу - оно ограничено только количеством сокетов, которые он может открыть, и, следовательно, намного, НАМНОГО более устойчиво к таким атакам.

(varnish по-прежнему лучше, чем pre-fork или даже рабочий apache для обработки запросов без большого количества запросов, поэтому вы увидите, что многие люди говорят об использовании его для смягчения таких DOS-атак).

Вы можете сделать кое-что, чтобы смягчить атаки DOS на сетевом уровне, используя iptables и / или маршрутизация на основе QOS, но я бы рекомендовал начать с использования nginx в качестве прокси.

Вы можете установить такой инструмент, как fail2ban или OSSEC (мой любимый), чтобы автоматически блокировать подобные атаки. Это не спасает от атак с подделкой IP (от них действительно сложно защититься), но это только начало.