Назад | Перейти на главную страницу

Защита от DDoS-атак?

Возможный дубликат:
DDoS-атака, как остановить?

Я использую частный http-сервер для управления частным веб-сайтом. IP-адрес сервера стал общедоступным, это нормально. Все равно нечего скрывать.

Проблема в том, что сервер получает от 3 до 8 атак каждый день с более чем 4000 подключениями каждый раз. Сервер и оборудование настроены на одновременную обработку до 600 подключений. Поэтому сервер заклинивает. На тот момент у меня есть два варианта:

  1. Захватите IP-адрес злоумышленников и добавьте его в список заблокированных программ в программном брандмауэре, установленном на сервере, который убивает атаку напрямую. но атаки идут с разных IP-адресов, и поэтому их блокировка по очереди требует больших усилий и неэффективна.

  2. Перезагрузите основной маршрутизатор, чтобы остановить атаки на этот момент, но они могут начаться снова в любой момент.

Мой провайдер ничего не может с этим поделать. Какие у меня варианты?

Поможет ли установка коммутатора / маршрутизатора с некоторой защитой от DDoS-атак до того, как сервер окажет какое-либо влияние и поможет ситуации?

Цифры, о которых вы здесь говорите, вполне приемлемы для одного бота с плохим поведением. Тот факт, что вы попадаете в свой Apache MaxChildren ограничение, а не ограничения памяти, пропускной способности или ЦП, и то, что они выполняют действительные HTTP-запросы, также склоняется в пользу плохого бота, а не преднамеренного DDoS.

Если это бот, вероятно, будет задействован небольшой диапазон или даже один IP-адрес. Когда это происходит, просмотр ваших файлов журналов может определить соответствующие IP-адреса:

tail -5000 access.log | cut -d' ' -f1 | sort | uniq -c | sort -n

Настройте число в хвосте, чтобы оно соответствовало загруженности ваших сайтов.

Для одновременных подключений вы также можете посмотреть netstat:

netstat -tan | grep ESTABLISHED | awk '$4 ~ /:80/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Grep через ваши журналы доступа для любого IP-адреса, идентифицированного netstat и убедитесь, что это не просто активный пользователь или даже IP-адрес вашего собственного офиса.


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

Примером этого является бот "Dig; Ext". Этот бот используется для очистки адресов электронной почты со страниц HTML. У него нет паузы между запросами страницы, и он запускает несколько потоков одновременно (я предполагаю, что 10 на основе моих журналов доступа). Когда это приходит, он может помещать в мои журналы доступа дополнительно 1000 запросов в минуту. Он удобно рекламирует строку «Dig; Ext» своему User-Agent, что позволяет нам легко заблокировать ее. 3-секундная загрузка страницы с PHP может быть уменьшена до нескольких сотен микросекунд, если Apache возвращает 403 на основе User-Agent.

Поскольку это полные TCP-соединения, IP-адреса не могут быть подделаны. Следовательно, блокировка IP-адреса должна быть эффективной. Если диапазоны IP-адресов являются динамическими, ADSL или аналогичными, тогда уместно отбрасывать пакеты на вашем брандмауэре. Если они являются диапазонами хостинга серверов, возможно, это связано с некомпетентностью, а не со злым умыслом, и было бы неплохо отправить ответ 403 как намек на то, что они могут захотеть улучшить поведение своего бота.

В mod_security Набор основных правил OWASP имеет правила для бота, о котором я упоминал выше, и многих других, а также эвристики, которые соответствуют характеристикам многих других ботов, но не имеют реальных браузеров, например, отсутствие Accept: заголовки.

Защита от распределенной DOS - непростая задача. И остановиться теоретически невозможно. Я бы порекомендовал вам запустить анализатор пакетов (например, tcpdump) и попытаться понять пакеты. В 90% случаев хосты злоумышленников используют похожие флаги пакетов, которые можно использовать для блокировки атаки.