На этом этапе вы узнаете, как создать и протестировать собственное правило Suricata для обнаружения конкретных паттернов в сетевом трафике. В качестве практического примера мы сосредоточимся на обнаружении HTTP - запросов к тестовому домену (example.com). Пользовательские правила позволяют расширять возможности обнаружения Suricata за пределы его стандартного набора правил.
-
Сначала перейдите в каталог с правилами, где Suricata хранит свои правила обнаружения:
cd /var/lib/suricata/rules
Обычно все файлы правил Suricata хранятся здесь. Мы добавим наши пользовательские правила в этот каталог, чтобы они были организованы вместе с существующими правилами.
-
Создайте новый файл правил специально для ваших пользовательских правил:
sudo nano custom.rules
Использование sudo
обязательно, так как для изменения каталога с правилами требуются административные привилегии. Мы называем файл custom.rules
, чтобы четко отличить его от стандартных файлов правил Suricata.
-
Добавьте следующее правило для обнаружения HTTP - запросов к example.com:
alert http any any -> any any (msg:"HTTP Request to example.com"; flow:to_server; http.host; content:"example.com"; nocase; sid:1000002; rev:1;)
Разберем, что делает это правило:
alert http
: Активирует оповещение для HTTP - трафика
any any -> any any
: Применяется к трафику с любого исходного порта на любой целевой порт
msg
: Предоставляет удобочитаемое сообщение оповещения
flow:to_server
: Совпадает только с трафиком, направленным на серверы
http.host
: Проверяет HTTP - заголовок Host
content:"example.com"
: Ищет этот конкретный домен
nocase
: Делает поиск регистронезависимым
sid:1000002
: Дает правилу уникальный идентификатор (выше 1 000 000 для пользовательских правил)
rev:1
: Указывает, что это первая версия правила
-
Сохраните файл в редакторе nano, нажав Ctrl + O (записать), затем Enter для подтверждения и Ctrl + X для выхода.
-
Теперь нам нужно сообщить Suricata о загрузке нашего нового файла правил. Отредактируйте основную конфигурацию:
sudo nano /etc/suricata/suricata.yaml
Найдите раздел rule-files:
(обычно около строки 50 - 60) и добавьте:
- custom.rules
Это добавление гарантирует, что Suricata загрузит наши пользовательские правила при запуске.
-
Перед применением изменений проверьте правильность синтаксиса правила:
sudo suricata -T -c /etc/suricata/suricata.yaml -v
Флаг -T
сообщает Suricata проверить конфигурацию без фактического запуска. Это помогает обнаружить любые синтаксические ошибки в ваших правилах до их использования.
-
Перезапустите Suricata, чтобы загрузить новое правило:
sudo pkill suricata
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
Первая команда останавливает любую запущенную инстанцию Suricata, а вторая запускает ее заново с обновленной конфигурацией.
-
Чтобы проверить, работает ли наше правило, сгенерируйте некоторый HTTP - трафик к example.com:
curl http://example.com
Эта команда делает простой HTTP - запрос, который должен активировать наше новое правило.
-
Наконец, проверьте, обнаружил ли Suricata трафик, просмотрев последние оповещения:
sudo tail -n 5 /var/log/suricata/fast.log
Вы должны увидеть оповещение, соответствующее сообщению нашего пользовательского правила о HTTP - запросах к example.com. Если этого не произошло, проверьте каждый шаг и убедитесь в правильности синтаксиса правила.