Мониторинг DDoS атак типа SYN-flood по SNMP

В статье описаны методы определения и динамической защиты, а также реализация мониторинга SYN-flood атак по SNMP с помощью инструментария Cacti. Материал является частичным переводом документации с официального сайта разработчика метода и содержит, помимо всего остального, дополнения для корректной работы в системе.

Принцип динамической защиты заключается в подстройке параметров систем Linux и FreeBSD для работы с TCP в зависимости от величины очереди на SYN. В процессе работы по cron’у или периодическому запуску пуллером из Cacti скрипт проверяет значение очереди и регулирует подстроечные параметры ядра для снижения порога.

Установка и настройка сводится к следующему:

  1. Скачать архив с исполняемым скриптом и файлом конфигурации synflood-defender
  2. Распаковать архив в систему и изменить путь внутри sh-файла на валидный
  3. Внести изменения в файл snmpd.conf (с аналогичной адаптацией)
    # Synflood-Defender extension
    extend synflooddefender /change/this/programpath/synflood-defender.sh
  4. Перечитать и перезапустить SNMP daemon. Это приведет к добавлению в дерево MIB нового OID, позже используемого Cacti:
     NET-SNMP-EXTEND-MIB::nsExtendOutLine."synflooddefender".1
  5. Скачать темплейты для Cacti по ссылке выше (Tarball) и импортировать их в веб-приложение
  6. Добавить сбор данных для устройства:
    • перейти Console » Management » Data Sources
    • нажать Add в правом верхнем углу
    • выбрать Selected Data Template: Synflood-Defender
    • выбрать устройство в поле Host
    • подтвердить выбор кнопкой Create
  7. Создать график:
    • перейти Console » Management » Graph Management
    • нажать Add в правом верхнем углу
    • выбрать Selected Graph Template: Synflood-Defender
    • указать устройство в поле Host
    • после нажатия Create указать Data Source: Synflood-Defender

В процессе развертывания комплекса на системе под управлением Linux Ubuntu в логи Cacti повалили ошибки:

07/01/2013 10:25:02 PM - CMDPHP: Poller[0] Host[1] DS[55] WARNING: Result from SNMP not valid. Partial Result: U 07/01/2013 10:25:02 PM - CMDPHP: Poller[0] WARNING: SNMP Get Timeout for Host:'127.0.0.1', and OID:'NET-SNMP-EXTEND-MIB::nsExtendOutLine."synflooddefender".1'

При это скрипт работал исправно при запуске вручную из консоли. Попытка получения данных посредством snmp запроса выдала ошибку:

# snmpwalk -v2c -c public localhost NET-SNMP-EXTEND-MIB
NET-SNMP-EXTEND-MIB: Unknown Object Identifier (Sub-id not found: (top) -> NET-SNMP-EXTEND-MIB)

Это означало, что в системе не хватает определений MIB. Решение тривиальное — доустановить их:

apt-get install snmp-mibs-dowloader

Ссылки: