Свежие темы форума
[Vn5socks.net] Service Seller Socks Good в 15:42
Ключи к Norton/Symantec Антивирус №3 (Продолжение) в 11:27
Будете ли вы платить по 150 рублей за музыку в ВКонтакте? в 08:32
VK-Postinger - программа для автоматизации в VK в 08:31
Ключ для James Cameron’s Avatar: the game в 18:48
Флудер телефонов -1 в 09:23
ВКонтакте умер как соцсеть в 17:09
Генератор прямых ссылок в 15:09
Ключ для Morphvox Pro в 02:08
Бесплатные и платные виртуальные номера. в 13:17
Популярные темы форума
Ключи к Norton/Symantec Антивирус 9999
Ключи к Norton/Symantec Антивирус №2 (Продолжение) 9734
[Dichvusocks.us] Service Seller Socks Good 7009
[Vn5socks.net] Service Seller Socks Good 6629
Ключи к Norton/Symantec Антивирус №3 (Продолжение) 1967
Ключи для Windows 8.1 1892
CS:GO сайты с халявой (UPD 52 сайтa) 1830
Раздача игровых ключей на gleam.io Free(,бесплатно ) 1203
Раздача аккаунтов,ключей,cookies,JavaScript на ФО 1181
Промо-акции: различные полезные программы 1048
Интересные статьи и лайфхаки
Как скачать и установить Pokemon GO?
Как скачать и установить Pokemon GO?
Совсем недавно появилась новая игра Pokémon GO, которая сразу же полюбилась игрокам со всего мира. В игровых ч
Как поменять почту в World of Tanks [2016]
Как поменять почту в World of Tanks [2016]
Как поменять почту в World of Tanks в 2016-ом году? Смена почты в WoT уже давно была невозможной, так как Warg
Как бесплатно получить стикеры вконтакте "Ход...
Как бесплатно получить стикеры вконтакте "Ход...
Как бесплатно получить стикеры вконтакте "Ходим в гости" от Jacobs Monarch? - очень просто. Кстати говоря, они
Ответить в теме Новая тема Новый опрос
Сейчас вы просматриваете тему

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

  • Страница 1 из 1
  • 1
Форум о халяве - 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 из 1
  • 1
Поиск:

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