Главная
 
npofopr.ucoz.ruСуббота, 2024-05-18, 13:35:27



Приветствую Вас Гость | RSS
Главная
Меню сайта

Форма входа

Категории раздела
postfix [3]
console [2]
ssh [1]
jabber [1]
DHCP [2]
apache [4]
vhcs [1]
pptp [2]
server [7]
ftp [1]
trafic [1]
ip [1]
LDAP [1]
squid [1]
squid

Главная » Статьи » linux » apache

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

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



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

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

Что я сделал



Я проверил, собран ли 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-флуда будет вам полезен.

Источник: http://habrahabr.ru/blogs/infosecurity/67685/
Категория: apache | Добавил: npofopr (2009-08-28)
Просмотров: 1286 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 1
1 Aerormcox  
0
почерпнул много нового

Имя *:
Email *:
Код *:
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Поиск


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz