Интеграция с FastNetMon
Описана следующая схема защиты:
- FastNetMon анализирует трафик, выявляет атаки и вызывает скрипт при началах и окончаниях атак.
- Скрипт анализирует отчет FastNetMon и переключает состояние защиты на MITIGATOR в зависимости от характеристик атаки.
Обзор FastNetMon
FastNetMon выявляет начало, окончание и характеристики атаки, анализируя трафик, который может сниматься с сетевых интерфейсов или поступать от агрегаторов (NetFlow, sFlow). FastNetMon не выявляет источник атаки (IP-адреса отправителей или признаки пакетов), но можно определить, какие ресурсы требуется защищать от каких видов атак.
FastNetMon может вызывать внешнюю программу при разных событиях:
- начало атаки (
ban
); - отчет об атаке (
attack_details
); - окончание атаки (
unban
).
В отчет об атаке входит (пример):
- атакованный IP-адрес (защищаемый ресурс);
- направление атаки (аномалия входящего или исходящего трафика);
- тип атаки (SYN flood, ICMP flood, IP fragmentation или неизвестная);
- протокол, на уровне которого происходит атака;
- статистика трафика атаки;
- (опционально) образец трафика атаки в текстовом виде.
Настройка FastNetMon
Здесь описан простейший вариант настройки FastNetMon для тестирования. При наличии развернутого FastNetMon в этом шаге достаточно настроить интеграцию (выделено в тексте).
Установим FastNetMon (Debian, Ubuntu):
apt install -y fastnetmon
Сеть защищаемых ресурсов (например, 10.0.2.0/24) нужно записать в файл:
echo "10.0.2.0/24" > /etc/networks_list
FastNetMon настраивается в /etc/fastnetmon.conf
.
В версии дистрибутива множество настроек с комментариями;
мы составим более простые настройки (готовый файл).
Будем захватывать трафик через libpcapс интерфейса span0
(медленный способ
только для тестов!):
pcap = on
interfaces = span0
Настроим анализ только входящего трафика:
process_incoming_traffic = on
process_outgoing_traffic = off
Оповещать об атаках; не реже, чем раз в 30 секунд проверять, не кончилась ли атака, и если кончилась, оповещать об этом:
enable_ban = on
ban_time = 30
unban_only_if_attack_finished = on
Самое главное — вызов скрипта интеграции при событиях, связанных с атаками. Скрипту нужны подробности об атаке (отчет), при этом описания пакетов не нужны:
notify_script_path = /usr/local/bin/fastnetmon.py
notify_script_pass_details = on
ban_details_records_count = 0
Отключим захват образцов трафика в формате PCAP и их обработку. На практике это может быть полезно, но для наших целей не нужно:
collect_attack_pcap_dumps = off
process_pcap_attack_dumps_with_dpi = off
Наконец, лимиты трафика. Для простоты ограничим только суммарный трафик в пакетах и байтах. Можно также задать ограничения отдельно на трафик TCP, UDP и ICMP, а также на количество соединений (требуется включить их отслеживание):
ban_for_pps = on
ban_for_bandwidth = on
threshold_pps = 20000
threshold_mbps = 1000
Также FastNetMon позволяет настроить разные лимиты для групп подсетей, но при оповещении не будет известно, для какой группы превышен лимит — это можно определить только по атакованному адресу.
Настройка скрипта реагирования
FastNetMon вызывает fastnetmon.py
(скачать),
который разбирает параметры и отчет об атаке, чтобы управлять MITIGATOR
через mitigator.py
(скачать).
Разместим скрипты на машине с FastNetMon:
wget https://docs.mitigator.ru/v23.08/integrate/mitigator.py -O /usr/local/bin
wget https://docs.mitigator.ru/v23.08/integrate/fastnetmon/fastnetmon.py \
-O /usr/local/bin
В /usr/local/bin/fastnetmon.py
нужно настроить доступ к Mitigator´у:
SERVER = 'mitigator.local'
USER = 'admin'
PASSWORD = 'admin'
EXTRA = ['--no-verify']
LOG = '/var/log/fastnetmon-mitigator.log'
Помимо адреса MITIGATOR (SERVER
), логина (USER
) и пароля (PASSWORD
)
можно указать дополнительные опции mitigator.py
. В данном случае
отключается проверка TLS, что актуально, если сертификат самоподписанный.
Функция policy_by_ip()
переводит IP-адрес атакованного ресурса в ID
политики MITIGATOR (42 из policies/42
в URL). В примере всегда
выбирается политика по умолчанию:
def policy_by_ip(ip):
return 1
Скрипт работает так:
- При начале атаки включает политику защиты.
- По отчету об атаке:
- при SYN flood или атаке на TCP включает контрмеру TCP;
- при ICMP flood или атаке на ICMP включает контрмеру ACL;
- в прочих случаях включает контрмеру SORB.
- При окончании атаки выключает контрмеры TCP, ACL, SORB и политику защиты.
Расчет сделан на то, что TCP защищается специальной контрмерой, в ACL можно настроить сброс ICMP (что не рекомендуется, но допустимо под атакой), а прочий трафик можно лимитировать по объему.
Проверка работы
На MITIGATOR включим общую защиту.
В политике по умолчанию настроим:
- для контрмеры ACL правило
drop icmp
; - для контрмеры SORB порог по пакетам 100, нарушителей заносить во временный «черный список».
Ни защиту политики, ни контрмеры включать не будем — это сделает скрипт.
Запустим ICMP flood (утилитой hping3
из пакета hping3
),
адрес жертвы из защищаемой подсети:
hping3 --icmp --flood 10.0.2.254
Через несколько секунд FastNetMon обнаружит атаку, на MITIGATOR включится защита политики и контрмера ACL, и трафик начнет сбрасываться.
После остановки атаки в течение 30 секунд защиты будут выключены.
В случае каких-либо проблем ошибки будут записаны в журнал FastNetMon
(/var/log/fastnetmon.log
) и в журнал скрипта
(/var/log/fastnetmon-mitigator.log
).