Простая защита от HTTP флуда

Простой способ защиты от HTTP DDoS — включить syn-cookies и заблокировать подонков. Но что делать если атакует 5к-10к хостов да еще и с динамическими IP? Тут нам на помощь придет frontend-backend архитектура c промежуточным кэшированием! Почему с промежуточным кэшированием? А потому что в моем случае от шквала запросов от frontend’а backend умирал унося за собой систему.

Итак алгоритм действий:
1.Меняем порт нашего backend сервера на любой отличный от 80 (пусть будет 2080)
2.Устанавливаем Varnish
3.Устанавливаем и настраиваем lighttpd
4.Ограничиваем кол-во соединений с одного хоста средствами iptables

Так, как, у меня в наличии было несколько серверов, то будет рассмотрена версия конфигурации именно с несколькими серверами, но никто не мешает вам все это запихнуть на один сервер =)

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

Собственно устанавливаем сам пакет:

Далее приводим C-подобный файл конфигурации (в Ubuntu это /etc/varnish/default.vcl) приблизительно к такому виду:
backend default {

#без этого таймаута varnish не хотел забирать контент с backend’а

#разрешаем очистку кэша только с локалхоста

Перезапускаем varnish: service varnish restart

Теперь можно приступить к установке и настройке нашего frontend’а — lighttpd.
Я предпочитаю брать lighttpd отсюда, но вам никто не мешает скачать его из репозиториев дистрибутива (apt-get install lighttpd).
И правим конфиг до тех пор, пока он не примет следующий вид:

#Если у вас один процессор или вы все запускаете на одном сервере то стоит поставить 1

#Разрешаем только три одновременных подключения

#Включаем кэширование на стороне лайти

#Здесь мы будим хранить кэш

И напоследок iptables и небольшой тюнинг системы:

Разрешаем 10 подключений в секунду с одного IP:

Увеличиваем количество открытых файлов:

Плюшки для sysctl.conf:

Как все это работает? lighttpd получает запрос от клиента и если он удовлетворяет определенным критериям (в нашем случае это не пустой User-agent, клиент запрашивает домен habrahabr.ru и это не 4ый одновременный запрос) отправляет запрос одному из серверов varnish. Varnish проверяет свой кэш на наличие нужного пользователю контента отдает его либо из кэша либо отправляет запрос на backend, если в кэше данного контента нет или он устарел.

взято с habrahabr.ru

Рейтинг материала
[Голосов: 0 Рейтинг: 0]
20 декабря 2014, 15:38

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *