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

Как я могу обнаружить DDoS-атаку с помощью pfSense, чтобы я мог сказать своему интернет-провайдеру, кого блокировать?

На прошлой неделе моя сеть подвергся DDoS-атаке который полностью перегрузил нашу ссылку на 100 Мбит / с с Интернетом и в значительной степени отключил все сайты и службы, которые мы размещаем.

Я понимаю (из этого опыта, а также другие ответы), что я не могу справиться с такой DDoS-атакой со своей стороны, потому что даже если мы отбрасываем пакеты, они все равно отправляются по нашей ссылке и насыщают наше соединение.

Однако когда это произошло, мой интернет-провайдер (как ни странно) не смог сказать мне, откуда идет атака. Они сказали, если я могу определить источник (например, через tcpdump) Я мог бы дать им IP-адреса для блокировки. Но все было так перегружено, что бег tcpdump было невозможно. Я просто не мог просмотреть результат.

Почти все наши серверы находятся за маршрутизатором pfSense. Как я могу обнаружить DDoS-атаку с помощью pfSense, чтобы я мог сказать своему интернет-провайдеру, кого блокировать? Я не хочу сам блокировать атаку, я просто хочу получать предупреждения / иметь возможность просматривать список IP-адресов, которые используют гораздо большую пропускную способность, чем обычно.

Маршрутизатор pfSense работает под управлением Snort, если это можно как-то использовать.

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

DDoS-трафик наверное не выглядит как реальный трафик, но его отличает не обязательно количество. Во время недавнего DDoS-атаки наш хостинг-провайдер решил заблокировать первую десятку IP-адресов с наибольшим количеством подключений. Все это, конечно, не имело никакого отношения к DDoS, и одним из них был бот Google. Они бы заблокировали наш офис, если бы не узнали IP-адрес. Стандартный совет по использованию netstat, sort и uniq найти самые высокие связи - не обязательно хороший совет.

Нашим DDoS было SYN-флуд, что означает несколько вещей для обнаружения:

  1. Это не полностью открытые соединения, поэтому в зависимости от того, как вы измеряете соединения, вы можете их даже не увидеть.
  2. Идентифицирующей информации не так много. Практически просто исходный IP-адрес и исходный порт.
  3. Адрес источника может (и почти наверняка будет) подделан, потому что они не ждут ответа.
  4. Возможно, вам повезет и вы обнаружите необычный установленный флаг TCP.

Вы можете увидеть каждый IP-адрес только один раз, что сделало бы блокировку IP-адреса, который вы уже видели, бессмысленным. На практике мы видели 100 000 уникальных исходных IP-адресов за 10 минут и 140000 пакетов в секунду, что означает (в среднем), что каждый IP-адрес возвращался примерно раз в секунду. В нашем случае было бы эффективно блокировать IP-адреса. Общая пропускная способность составляла всего 70 Мбит / с, а поскольку исходные адреса были подделаны, все DDoS-атаки могли быть легко вытеснены одним сервером.

Поскольку каждый IP-адрес отправлял только примерно один пакет в секунду, это было значительно меньше, чем у любого другого законного IP-адреса. Многие из домашних страниц нашего веб-сайта имеют размер до МБ, что означает тысячи пакетов, которые пользователь видит как один запрос.

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

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

Существуют и другие типы DDoS-атак, и некоторые из них заполняют вашу полосу пропускания. Наш брандмауэр все равно вышел из строя, а это значит, что мы не могли получить доступ ни к какой части нашей инфраструктуры. Для вашего конкретного вопроса вам понадобится какой-то внеполосный способ связи с вашим брандмауэром и / или ящиками, чтобы, если ваш интернет-канал заполнится, вы все равно могли войти и диагностировать проблему. В любом случае это, как правило, хорошая идея, потому что существует множество других причин, по которым ваша труба может опуститься. Я обычно вижу много модемов ADSL в стойках других людей, когда хожу по центрам обработки данных, и я не удивлюсь, если некоторые из них предназначены для внеполосной связи.

Два других типа DDoS, которые я видел, - это отраженные DNS-запросы и дорогие HTTP-запросы. Отраженные DNS-запросы особенно неприятны, если вы запускаете DNS-преобразователь, потому что вы не хотите блокировать эти IP-адреса, если вы хотите получить реальный ответ от одного из них. Я бы сменил свои хосты, чтобы использовать новый DNS-преобразователь (возможно, бесплатный публичный) и заблокировал бы весь другой DNS-трафик.

Дорогие HTTP-запросы, как правило, нацелены на ваш ЦП / память / IOPS. Они также содержат много идентифицирующей информации, такой как заголовки HTTP, и исходные адреса не могут быть подделаны. Такой инструмент, как mod_security, может делать удивительные вещи, идентифицируя и блокируя эти типы запросов. Он может даже разорвать TCP-соединение, вместо того, чтобы отправлять ответ HTTP.

Коротко:

  1. Получите внеполосный доступ.
  2. Знайте свои протоколы наизнанку. (TCP, IP, HTTP, все, что вы используете.)
  3. Знайте свои инструменты наизнанку. (pfSense, tcpdump, mod_security и т. д.)
  4. Знайте свои варианты. (HTTP 403, блок pfSense, блок брандмауэра ISP, нулевой маршрут и т. Д.)