Свежие темы форума
ВЫПРАВЛЕНИЕ ССЫЛОК 181 Avizio, в 11:11
Новая РУЛЕТКА-ХАЛЯВА CS:GO ! 2 ariolwork, в 11:06
Промо-акции: различные полезные п... 870 sydimir, в 10:45
[Dichvusocks.us] Service Seller S... 3053 kickic47, в 10:09
Белая схема ежедневного дохода дл... 0 maxmiran, в 10:08
Раздача игровых ключей на gleam.i... 1052 Kr1tiK, в 09:50
Флудер телефонов 17 qwert01, в 09:44
Ключи к Norton/Symantec Антивирус 5583 denq, в 09:19
Популярные и интересные темы форума
Раздача игровых ключей на gleam.io Free(,бес... 1052 chrap
CS:GO сайты с халявой (UPD 52 сайтa) 764 Slavik_White
Чат "Free-Pass". Общение на разные ... 611 Just1ucky
Ключи для nod32 549 RockSmasher
Всем бесплатно по 1 рублю Qiwi! 427 kostiaaka1
Бесплатные ключи CS:GO 51 sydimir
Ключи для Касперского 15 Andrey_4ik
Driver Booster 4.3 Pro лицензионный ключ 12 sydimir
Интересные статьи и лайфхаки
Как не получить бан за мат в чате World of Tanks? (17)
Как узнать возраст человека вконтакте, если он скрыт? (31)
Как узнать что вас взломали во Вконтакте? (8)
Как сделать псевдоним или отчество Вконтакте? (18)
Как вернуть старый дизайн ВКонтакте? (14)
Как получить стикеры в ВК бесплатно? (15)
Как быстро получить опыт в Pokemon go? - качаем опыт при по... (8)
Бесплатная лицензия Kaspeкsky (KIS 2014-2015) на 90 дней (8)
Сейчас вы просматриваете тему

Защиты от 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
Поиск:
Пожалуйста, зарегистрируйтесь! или войдите под любой соц.сетью
Вы сможете видеть всю халяву на сайте, писать сообщения и создавать темы на форуме!
Войти Зарегистрироваться