Свежие темы форума
Ключи Company of Heroes 2 steam (... 8 aksimon, в 23:02
Quick Sender 2 dimasik9281, в 22:38
ВЫПРАВЛЕНИЕ ССЫЛОК бесплатно 41 klimok, в 22:29
Ключи к Norton/Symantec Антивирус 6993 vladlenSS, в 22:05
Раздача аккаунтов,ключей,cookies,... 392 Vavan, в 21:24
Бесплатные ключи для Microsoft Of... 178 msnozya, в 20:33
CS:GO сайты с халявой (UPD 52 сай... 1191 Slavik_White, в 19:33
[Vn5socks.net] Service Seller Soc... 1907 kashino113, в 19:15
[Dichvusocks.us] Service Seller S... 3588 kickic47, в 19:14
Популярные темы форума
Ключи для Windows 8.1 1534 Sklyr
CS:GO сайты с халявой (UPD 52 сайтa) 1191 Slavik_White
Ключи для nod32 585 RockSmasher
Ключи к Office 2013 387 Sklyr
Бесплатные ключи CS:GO 201 sydimir
Бесплатные ключи для Microsoft Office 2016 178 HARD
Driver Booster 4.3 Pro лицензионный ключ 68 sydimir
Ключи для Касперского 26 Andrey_4ik
CS:GO сайты без депозита от Фрая 3 b1ack
Интересные статьи и лайфхаки
Как активировать Windows 7, 8, 10 в 2016 году?
Как активировать Windows 7, 8, 10 в 2016 году?
В данной статье мы вам расскажем о том, как бесплатно произвести активацию Windows версий 7, 8, 10. В статье в
Как бесплатно получить стикеры вконтакте "Ход...
Как бесплатно получить стикеры вконтакте "Ход...
Как бесплатно получить стикеры вконтакте "Ходим в гости" от Jacobs Monarch? - очень просто. Кстати говоря, они
Как сделать псевдоним или отчество Вконтакте?
Как сделать псевдоним или отчество Вконтакте?
В данной статья мы Вам расскажем о том, как сделать псевдоним или отчество вконтакте. Все мы помним, что в 201
Ответить в теме Новая тема Новый опрос
Сейчас вы просматриваете тему

Защиты от 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
Поиск:

Чтобы оставить свое сообщение в данной теме, пожалуйста,
зарегистрируйтесь или войдите через логин и пароль / одну из социальных сетей.
Пожалуйста, зарегистрируйтесь! или войдите под любой соц.сетью
Вы сможете видеть всю халяву на сайте, писать сообщения и создавать темы на форуме!
Войти Зарегистрироваться