
Движок сетевой IDS/IPS/NSM с открытым исходным кодом для инспекции трафика в реальном времени, обнаружения и предотвращения вторжений, анализа протоколов и охоты за угрозами на основе правил.
Suricata — это сетевой движок IDS, IPS и NSM, разработанный OISF и сообществом Suricata.
Мы с удовольствием принимаем патчи и другие вклады. Пожалуйста, ознакомьтесь с процессом внесения вклада для получения информации о том, как начать.
Suricata — это сложный программный продукт, работающий в основном с недоверенными входными данными. Неправильная обработка этих данных может иметь серьёзные последствия:
Другими словами, мы считаем, что ставки довольно высоки, особенно учитывая, что во многих типичных случаях IDS/IPS будет напрямую доступен атакующему.
По этой причине мы разработали довольно обширный процесс контроля качества (QA). Следствием этого является то, что внесение вклада в Suricata может быть довольно длительным процессом.
На высоком уровне шаги выглядят так:
Члены команды OISF могут отправлять сборки на наш приватный стенд QA. Там выполняется серия тестов сборки и регрессионный набор тестов, чтобы убедиться, что существующие функции не ломаются.
Финальные прогоны QA занимают как минимум несколько часов и обычно выполняются в ночное время. В настоящее время они включают:
Помимо этих тестов, в зависимости от типа изменений кода могут дополнительно запускаться вручную:
Важно понимать, что почти все перечисленные выше тесты используются в качестве приёмочных. Если что-то падает, устранение проблемы в вашем коде — ваша задача.
Один из этапов QA в настоящее время выполняется после слияния. Мы отправляем сборки в программу Coverity Scan. Из-за ограничений этого (бесплатного) сервиса мы можем отправлять не чаще одного раза в день. Конечно, может случиться так, что после слияния сообщество обнаружит проблемы. В обоих случаях мы просим вас помочь с устранением проблем, если они возникнут.
В: Примете ли вы мой PR?
О: Это зависит от ряда факторов, включая качество кода. Для новых функций это также зависит от того, считают ли команда и/или сообщество функцию полезной, насколько она влияет на другой код и функции, риска регрессий производительности и т. д.
В: Когда будет объединён мой PR?
О: Зависит от обстоятельств. Если это крупная функция или изменение с высоким риском, оно, вероятно, попадёт в следующую крупную версию.
В: Почему мой PR был закрыт?
О: Как описано в документации по рабочему процессу GitHub для Suricata, мы ожидаем новый pull request для каждого изменения.
Обычно команда (или сообщество) оставляет отзыв на pull request, после чего ожидается, что он будет заменён улучшенным PR. Поэтому смотрите комментарии. Если вы не согласны с комментариями, мы можем обсудить их и в закрытом PR.
Если PR был закрыт без комментариев, это, скорее всего, связано с неудачным прохождением QA. Если проверки GitHub-CI не прошли, PR следует исправить сразу же. Обсуждать это не нужно, если только вы не считаете, что результат QA ошибочен.
В: Компилятор/анализатор кода/инструмент ошибается, что делать?
О: Чтобы автоматизировать процесс QA, мы не оставляем предупреждения или ошибки. В некоторых случаях это может означать, что мы добавляем подавление, если инструмент это поддерживает (например, valgrind, DrMemory). Некоторые предупреждения можно отключить. В исключительных случаях единственное «решение» — переписать код, чтобы обойти ложное срабатывание статического анализатора. Как бы это ни раздражало, мы предпочитаем такой подход оставлению предупреждений в выводе. Предупреждения часто игнорируются и повышают риск скрытия других предупреждений.
В: Я считаю, что ваш тест QA ошибочен
О: Если вы действительно так считаете, мы можем обсудить, как его улучшить. Но не делайте этот вывод слишком поспешно: чаще всего ошибка оказывается в коде.
В: Требуете ли вы подписания лицензионного соглашения с контрибьютором?
О: Да, мы делаем это, чтобы сохранить право собственности на Suricata в одних руках — у Open Information Security Foundation. См. http://suricata.io/about/open-source/ и http://suricata.io/about/contribution-agreement/