• Главная
  • A hack CTF
  • Заметки
  • [Blind code execution]
    [PHP-инклудинг и allow_url_include]
    [Проблема с WUBI и Ubuntu 10.04]
    [Как был взломан antichat.ru]
    [AntiDDoS в LightHTTPd]
    [Sleep() в слепых SQLi]

  • Bugtraq
  • [Уязвимости языка PHP]
    [Уязвимости разных движков]
    [Уязвимости Joomla]
    [Уязвимости Invision Power Board]
    [Уязвимости GuppY CMS]
    [Уязвимости 1024cms]
    [Уязвимости IceBB]
    [Уязвимости Zeus Botnet]

  • Релизы
  • [Online PHP code analysis]
    [Web-разведка]
    [Сканер уязвимости nginx]
    [Анализ текстов]
    [SSI Web-shell]

  • Услуги
  • [Аудит безопасности]

    Anti-DDoS: Конфигурирование LightHTTPD

    В этой теме я хотел бы рассказать о том, как сконфигурировать сервер Lighthttpd для оптимальной производительности.
    Уже из самого названия продукта видно, что этот сервер «лёгкий» – он заточен под максимальную скорость работы.
    А знание конфигурации позволит оптимально настроить сервер под Ваши нужды и нагрузки.

    Далее я напишу о директивах конфигурации сервера, которые прямым образом влияют на производительность.

    Сужаем канал

    Директива connection.kbytes-per-second позволяет ограничить скорость соединения с сервером. Это позволит дольше использовать ресурсы канала во время DDoS-атаки.
    Следующий код ограничит скорость до 1 мбит/с:
    connection.kbytes-per-second = 1024

    По умолчанию директива равна 0, т.е. ограничения отсутствуют.
    Кроме того, можно ограничить скорость соединения для определённого хоста (к примеру, если идёт http-ddos на один из сайтов на сервере):

    $HTTP["host"] == "victim.com" {
    server.kbytes-per-second = 32
    }

    Помимо этого, существует плагин mod_speed.c, который позволяет регулировать скорость прямо в скриптах. Пример на php:
    <?php
    header("X-LIGHTTPD-KBytes-per-second: 50");
    echo('Content with speed, limited to 50 kbit/s');
    ?>

    Ограничиваем запросы

    Для того, чтобы сессии соединения сбрасывались как можно быстрее и количество запросов в эту сессию было как можно меньше, надо регулировать keep-alive директивы. Вот значения по умолчанию:

    server.max-keep-alive-requests = 16
    server.max-keep-alive-idle = 5
    server.max-read-idle = 60
    server.max-write-idle = 360

    Вы можете уменьшать их с увеличением нагрузки (например, во время DDoS-атаки), вплоть до обнуления. Первые две директивы – это соответственно максимальное количество запросов во время сессии и длительность сессии (в секундах)

    Регулируем дескрипторы

    Для каждой открытой, скажем, php страницы на сайте создаётся файловый дескриптор.
    Если идёт атака, то файловых дескрипторов создаётся очень много, и если их количество превысит установленый лимит, сервер перестанет отвечать на запросы.
    Поэтому при больших нагрузках рекомендуется увеличивать значение директивы server.max-fds. По умолчанию оно равно 1024.
    Данная директива работает лишь в случае, когда lighthppd запущен под root.

    server.max-fds = 4096

    Количество соединений

    Директива server.max-connections служит для определения максимального количества соединений сервера.
    По умолчанию она равна 1024, как и server.max-fds, но рекомендуется устанавливать для неё значение, равное 1/2 или 1/3 от значения server.max-fds, поскольку не все файловые дескрипторы отвечают соединениям – многие используются для fastcgi или файлов.

    Баним IP-адреса

    Если атака ведётся с какого-то диапазона IP-адресов или с нескольких IP-адресов, логично забанить эти адреса. Для этого воспользуемся условной конструкцией, глобальными переменными и регулярным выражением:

    $HTTP["host"] == "victim.com" {
    $HTTP["remoteip"] = "^(123\.123\.123\.[0-255])$" {
    url.access-deny = ( "" )
    }
    }

    Ещё ограничиваем трафик

    Вот ещё некоторые меры, которые могут помочь для экономии трафика: бан ботов по user-agent и анти-хотлинкинг.
    User-Agent банится так:

    $HTTP["useragent"] =~ "libwww-perl" {
    url.access-deny = ( "" )
    }

    Это конечно можно сделать и в robots.txt, но ведь бот может и не проверять этот файл, так что на уровне сервера это надёжнее.
    Хотлинкинг же запрещается следующим образом:

    $HTTP["referer"] !~ "^($|http://vitim\.com)" {
    url.access-deny = (".bmp", ".jpg", ".jpeg", ".png",".ico" )
    }

    Таким образом, мы запретили выкладывать на других хостах картинки с нашего сервера. Это бывает весьма полезно, когда картинок много и их постоянно воруют. Того же эффекта можно достичь при помощи .htaccess. Кстати бывали и прецеденты, когда DDoS-атака проводилась с помощью очень частого показа картинок с сервера (канал забивался).

    Распределяем нагрузки

    LightHTTPD позволяет производить LoadBalancing (то есть, распределение нагрузки) между разными fastcgi-серверами.
    К примеру, у Вас есть сайт, написанный на PHP, и Вы хотите разгрузить его.
    Есть фронтэнд с LightHTTPD и 2 бэкэнда с FastCGI на 1000 порту. IP-адрес первого бэкнда – 192.168.1.10, а второго – 192.168.1.11.
    Пишем в lighttpd.conf:


    fastcgi.server = ( ".php" =>
    (
    ( "host" => "192.168.1.10",
    "port" => 1000
    ),
    ( "host" => "192.168.1.11",
    "port" => 1000
    )
    )
    )

    Как это работает? Когда появляется новое подключение, то есть пользователь запрашивает php-страницу, LightHTTPD просматривает список fastcgi-серверов, который заранее отсортирован по количеству подключений, и выбирает тот, у которого нагрузка меньше всего. Новое подключение идёт к этому серверу.
    После чего, список снова отсортировывается.

    Таким образом, можно значительно снизить нагрузку на основной сервер.

    Всё

    Больше информации можно найти на lighttpd.net.
    Удачи в Анти-ДДоСе!

    © BECHED