В настоящее время у меня есть следующая, предположительно стандартная установка: у меня есть физический сервер с запущенным Snort. Snort входит в свои файлы журнала, как и должно. Эти файлы отслеживаются barnyard2, который записывает трафик в базу данных Snorby.
Snort и barnyard2 запускаются как служба systemd. Теперь, помимо постоянного анализа сетевого трафика с помощью Snort, я хочу примерно каждый час читать файлы pcap из разных источников, применяя к ним свои правила Snort.
К счастью, snort предоставляет эту функцию напрямую. Однако, используя snort -r foo.pcap
запускает новый экземпляр Snort, что, конечно же, приводит к созданию нового файла журнала. Barnyard2 распознает этот новый файл журнала и обрабатывает данные из pcap должным образом. => правила в порядке и работают для трафика pcap. Однако трафик от экземпляра Snort, работающего как служба, по-прежнему записывается в старый файл, и barnyard2 не обрабатывает эти пакеты из-за наличия более нового файла журнала.
Чтобы этого избежать, я сейчас пытаюсь использовать tcpreplay
чтобы воспроизвести pcap на моем внешнем интерфейсе, чтобы служба Snort могла обрабатывать пакеты, как любой другой трафик. К сожалению, Snort не соответствует ни одному пакету, если они воспроизводятся таким образом. Правила, работающие через snort -r
должны доказать, что они верны.
Нужно ли мне переписывать что-нибудь вроде MAC-адресов при использовании tcpreplay
? Возможно, стоит упомянуть, что мне пришлось перекомпилировать Snort с --enable-non-ether-decoders
параметр, чтобы он мог читать трафик pcap.
Решением было использовать tcprewrite
перезаписать кадры канала передачи данных через tcprewrite --dlt=enet
. Проблема, похоже, та же, что требовала компиляции Snort с --enable-non-ether-decoders
. Я предполагаю, что это происходит из-за того, что виртуализация где-то в наблюдаемой среде.