Свежие темы форума
Бесплатный способ заработка на te... 1 felik78, в 02:03
Бесплатные ключи для Microsoft Of... 94 deonissca, в 00:01
upstore.net премиум аккаунт 274 DrKilljoy, в 23:52
Раздача игровых ключей на gleam.i... 643 IrisPusyCat, в 23:35
Ключи к Norton/Symantec Антивирус 4456 semenovkolia2014, в 23:17
Windows 7 Proffesional 94 viktor22, в 22:35
Генератор прямых ссылок 65 semenovkolia2014, в 22:19
Раздача аккаунтов,ключей,cookies,... 293 Vavan, в 22:16
Популярные и интересные темы форума
Раздача игровых ключей на gleam.io Free(,бес... 643 chrap
Чат "Free-Pass". Общение на разные ... 580 Just1ucky
Всем бесплатно по 1 рублю Qiwi! 386 kostiaaka1
CS:GO сайты с халявой (UPD 52 сайтa) 384 Slavik_White
Розыгрыш steam ключей от chrap 189 chrap
ВЫПРАВЛЕНИЕ ССЫЛОК 174 Vavan
Накрутка лайков ВКонтакте бесплатно - 5000 ла... 94 HaRd
Бесплатные деньги Qiwi! 68 kostiaaka1
Интересные статьи и лайфхаки
Как скачать и установить Pokemon GO? (3)
Как получить опыт и покемонов в Pokemon go не выходя из дом... (4)
Как вернуть старый дизайн ВКонтакте? (9)
Как получить бесплатно 30000 свободного опыта в World of Ta... (3)
Бесплатная Steam игра Grimoire: Manastorm от Bundle Stars и... (9)
[Почтовая халява] Бесплатные обложка для паспорта и очки от... (9)
Как и где безопасно хранить свои пароли? (15)
Как не получить бан за мат в чате World of Tanks? (13)
Сейчас вы просматриваете тему

Защиты от HTTP-флуда

Страница 1 из 11
Форум о халяве - FREE-PASS.Ru » Халява бесплатно, акции, раздачи, бесплатные аккаунты. » Другая интересная халява » Исходники сайтов/Скрипты » Защиты от HTTP-флуда
Защиты от HTTP-флуда
Ананас
Автор темы
Дата: Пятница, 07.02.2014, 22:54 | Сообщение # 1
Случилась на днях, как всегда, не в самый подходящий момент, DDoS-атака на один из сайтов, размещенных на моем сервере. DDoS-атаки бывают разные, в этот раз злоумышленники запустили HTTP флуд.

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

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

Модуль ngx_http_limit_req_module

После детального изучения возможностей давно и вполне успешно используемой мною связки nginx + Apache и документации к nginx родилось решение на базе модуля ngx_http_limit_req_module.

Модуль ngx_http_limit_req_module (0.7.21) позволяет ограничить скорость обработки запросов по заданному ключу или, как частный случай, скорость обработки запросов, поступающих с одного IP-адреса. Ограничение обеспечивается с помощью метода “leaky bucket”. 
Пример конфигурации

http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

...

server {

...

location /search/ {
limit_req zone=one burst=5;
}

Директивы
синтаксис: limit_req zone=название [burst=число][nodelay];
умолчание: — 
контекст: http, server, location

Задаёт зону разделяемой памяти (zone) и максимальный размер всплеска запросов (burst). Если скорость поступления запросов превышает описанную в зоне, то их обработка задерживается так, чтобы запросы обрабатывались с заданной скоростью. Избыточные запросы задерживаются до тех пор, пока их число не превысит максимальный размер всплеска. При превышении запрос завершается с ошибкой 503 (Service Temporarily Unavailable). По умолчанию максимальный размер всплеска равен нулю. Например, директивы 
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
location /search/ {
limit_req zone=one burst=5;
}

позволяют в среднем не более 1 запроса в секунду со всплесками не более 5 запросов. 

Если же избыточные запросы в пределах лимита всплесков задерживать не требуется, то следует использовать параметр nodelay: 
limit_req zone=one burst=5 nodelay;

синтаксис: limit_req_log_level info | notice | warn | error;
умолчание: limit_req_log_level error;
контекст: http, server, location

Эта директива появилась в версии 0.8.18. 

Задаёт желаемый уровень записи в лог случаев отказа в обработке запросов при превышении скорости и случаев задержек при обработке запроса. Задержки записываются в лог с уровнем на единицу меньшим, чем отказы, например, если указано “limit_req_log_level notice”, то задержки будут записываться в лог на уровне info. 
синтаксис: limit_req_status код;
умолчание: limit_req_status 503;
контекст: http, server, location

Эта директива появилась в версии 1.3.15. 

Позволяет переопределить код ответа, используемый при отклонении запросов. 
синтаксис: limit_req_zone $переменная zone=название:размер rate=скорость;
умолчание: — 
контекст: http

Задаёт параметры зоны разделяемой памяти, которая хранит состояние для разных значений ключа. Состояние в частности хранит текущее число избыточных запросов. Ключом является любое непустое значение заданной переменной (пустые значения не учитываются). Пример использования: 
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

В данном случае состояния хранятся в зоне “one” размером 10 мегабайт, и средняя скорость обработки запросов для этой зоны не может превышать 1 запроса в секунду. 

В качестве ключа используется IP-адрес клиента. Обратите внимание, что вместо переменной $remote_addr используется переменная $binary_remote_addr, позволяющая уменьшить размер состояния до 64 байт. В зоне размером 1 мегабайт может разместиться около 16 тысяч состояний размером 64 байта. При переполнении зоны в ответ на последующие запросы сервер будет возвращать ошибку 503 (Service Temporarily Unavailable). 

Скорость задаётся в запросах в секунду (r/s). Если же нужна скорость меньше одного запроса в секунду, то она задаётся в запросах в минуту (r/m), например, ползапроса в секунду — это 30r/m.

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

Что я сделал

Я проверил, собран ли nginx с модулем ngx_http_limit_req_module и внес в конфигурационный файл сервера следующие строки:

http {
# Директива описывает зону, в которой хранятся состояния сессий. 
# Значения сессий определяется заданной переменной. 

limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;

# В данном случае состояния сессий хранятся в зоне "one" размером 
# 10 мегабайт и средняя скорость запросов для этой зоны не может 
# более 2 запросов в секунду. 

# Данный случай частный лично для моей 
# ситуации и подбирается индивидуально.

...

# Атакуемый домен.
server {

...

location / {
# Директива задаёт зону (zone) и максимально возможные всплески
# запросов (burst). Если скорость запросов превышает описанную 
# в зоне, то их обработка запроса задерживается так, чтобы запросы 
# обрабатывались с заданной скоростью. Избыточные запросы задерживаются
# до тех пор, пока их число не превысит 
# заданное число всплесков. В этом случае запрос завершается кодом 
# "Service unavailable" (503).

limit_req zone=one burst=4;
}

* This source code was highlighted with Source Code Highlighter.

* пример конфигурации и пояснения со страницы документации по модулю

Что я получил

Все боты, которые с неистовой частотой «долбили» сервер, начали получать в ответ http- ошибку 503. А выбрать с логов IP ботов например так:

tail -1000 /var/log/nginx-access.log | grep " 503 " | cut -f1 -d" " | sort -u

И после этого занести их в таблицу фаервола (у меня FreeBSD и IPFW) проще некуда, равно как и поставить это все в crontab.

Вот, собственно, и все. На оригинальность идеи я не претендую, спасибо Игорю Сысоеву за реализацию nginx и данного модуля к нему.

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

Поделиться этой темой:
 
Бот
Аватарка бота
Интересное
Не видишь блоки? - Отключи AdBlock
Eroxa_pass
Дата: Среда, 01.07.2015, 17:22 | Сообщение # 2
xm
 
Форум о халяве - FREE-PASS.Ru » Халява бесплатно, акции, раздачи, бесплатные аккаунты. » Другая интересная халява » Исходники сайтов/Скрипты » Защиты от HTTP-флуда
Страница 1 из 11
Поиск:
Пожалуйста, зарегистрируйтесь! или войдите под любой соц.сетью
Вы сможете видеть всю халяву на сайте, писать сообщения и создавать темы на форуме!
Войти Зарегистрироваться