Коннектор ModSecurity-nginx — это точка соединения между nginx и libmodsecurity (ModSecurity v3). Другими словами, этот проект обеспечивает канал связи между nginx и libmodsecurity. Этот соединитель необходим для использования LibModSecurity с nginx.
Коннектор ModSecurity-nginx имеет форму модуля nginx. Модуль просто служит уровнем связи между nginx и ModSecurity.
Обратите внимание, что этот проект зависит от libmodsecurity, а не от ModSecurity (версия 2.9 или ниже).
В старой версии используется автономный ModSecurity, который представляет собой оболочку внутренних компонентов Apache для связи ModSecurity с nginx. Эта текущая версия ближе к nginx, поскольку использует новый libmodsecurity, который больше не зависит от Apache. В результате в текущей версии меньше зависимостей, меньше ошибок и она работает быстрее. Кроме того, также предусмотрены некоторые новые функции, такие как возможность использования глобальной конфигурации правил с настройкой для каждого каталога/места (например, SecRuleRemoveById).
Перед компиляцией этого программного обеспечения убедитесь, что у вас установлена libmodsecurity. Вы можете скачать его из git-репозитория ModSecurity. Для получения информации, касающейся компиляции и установки libmodsecurity, обратитесь к документации, прилагаемой к нему.
Установив libmodsecurity, вы можете приступить к установке коннектора ModSecurity-nginx, который соответствует процедуре установки стороннего модуля nginx. Из исходного каталога nginx:
./configure --add-module=/path/to/ModSecurity-nginx
Или, чтобы создать динамический модуль:
./configure --add-dynamic-module=/path/to/ModSecurity-nginx --with-compat
Обратите внимание: при создании динамического модуля ваша исходная версия nginx должна соответствовать версии nginx, для которой вы его компилируете.
Дополнительную информацию о поддержке сторонних надстроек nginx можно найти здесь: http://wiki.nginx.org/3rdPartyModules.
ModSecurity для nginx расширяет ваши директивы конфигурации nginx. Он добавляет четыре новые директивы:
синтаксис: modsecurity включен | выключенный
контекст: http, сервер, местоположение
по умолчанию: выключено
Включает или выключает функциональность ModSecurity. Обратите внимание, что эта директива конфигурации больше не связана с состоянием SecRule. Вместо этого теперь он служит исключительно флагом nginx для включения или отключения модуля.
синтаксис: modsecurity_rules_file <путь к файлу правил>
контекст: http, сервер, местоположение
по умолчанию: нет
Указывает расположение файла конфигурации modsecurity, например:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
}
синтаксис: modsecurity_rules_remote <ключ>
контекст: http, сервер, местоположение
по умолчанию: нет
Указывает, откуда (из Интернета) будет загружен файл конфигурации modsecurity. Он также указывает ключ, который будет использоваться для аутентификации на этом сервере:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
}
}
синтаксис: modsecurity_rules <правило modsecurity>
контекст: http, сервер, местоположение
по умолчанию: нет
Позволяет напрямую включать правило ModSecurity в конфигурацию nginx. В следующем примере загружаются правила из файла и внедряются определенные конфигурации для каждого каталога/псевдонима:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
location /ops {
root /var/www/html/opts;
modsecurity_rules '
SecRuleEngine On
SecDebugLog /tmp/modsec_debug.log
SecDebugLogLevel 9
SecRuleRemoveById 10
' ;
}
}
синтаксис: строка modsecurity_transaction_id
контекст: http, сервер, местоположение
по умолчанию: нет
Позволяет передавать идентификатор транзакции из nginx вместо генерации его в библиотеке. Это может быть полезно для целей отслеживания, например, рассмотрим следующую конфигурацию:
log_format extended ' $remote_addr - $remote_user [ $time_local ] '
'" $request " $status $body_bytes_sent '
'" $http_referer " " $http_user_agent " $request_id ' ;
server {
server_name host1;
modsecurity on;
modsecurity_transaction_id "host1- $request_id " ;
access_log logs/host1-access.log extended;
error_log logs/host1-error.log;
location / {
...
}
}
server {
server_name host2;
modsecurity on;
modsecurity_transaction_id "host2- $request_id " ;
access_log logs/host2-access.log extended;
error_log logs/host2-error.log;
location / {
...
}
}
Используя комбинацию log_format и modsecurity_transaction_id, вы сможете найти корреляции между записями журнала доступа и журнала ошибок, используя один и тот же уникальный идентификатор.
Строка может содержать переменные.
Поскольку мы являемся проектом с открытым исходным кодом, мы приглашаем (и поощряем) всех членов сообщества внести свой вклад в наш проект. Это может принимать форму: новых функций, исправлений ошибок, отчетов об ошибках, поддержки начинающих пользователей и всего остального, с чем вы готовы помочь. Спасибо.
Мы предпочитаем, чтобы ваш патч был в инфраструктуре GitHub, чтобы облегчить нашу работу по проверке и интеграцию контроля качества. GitHub предоставляет отличную документацию о том, как выполнять «Pull Requests». Дополнительную информацию можно найти здесь: https://help.github.com/articles/using-pull-requests/.
Пожалуйста, соблюдайте используемый стиль кодирования. Запросы на включение могут включать в себя различные коммиты, поэтому предоставьте одно исправление или одну функциональность для каждого коммита. Не меняйте ничего, выходящее за рамки вашей целевой работы (например, стиль кодирования в функции, мимо которой вы прошли).
В нашем коде есть различные элементы, отмеченные как TODO или FIXME, которые могут потребовать вашего внимания. Проверьте список элементов, выполнив grep:
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *
Вы также можете просмотреть недавние отчеты об ошибках и открытые проблемы, чтобы понять, какую помощь мы ищем.
Наряду с ручным тестированием мы настоятельно рекомендуем вам использовать утилиту тестирования nginx, чтобы убедиться, что исправление не оказывает негативного влияния на поведение или производительность nginx.
Тесты nginx доступны по адресу: http://hg.nginx.org/nginx-tests/.
Чтобы использовать эти тесты, убедитесь, что у вас есть утилита Perl (часть Perl 5) и выполните следующие команды:
$ cp /path/to/ModSecurity-nginx/tests/* /path/to/nginx/test/repository
$ cd /path/to/nginx/test/repository
$ TEST_NGINX_BINARY=/path/to/your/nginx prove .
Если у вас возникли проблемы с получением добавленной функциональности для прохождения всех тестов nginx, свяжитесь с нами или в списке рассылки nginx по адресу: http://nginx.org/en/support.html.
Мы уважаем схему отладки nginx. Используя параметр конфигурации «--with-debug» во время настройки nginx, вы также включите отладочные сообщения коннектора. Ожидается, что дампы ядра и сбои будут отлаживаться тем же способом, который используется для отладки nginx. Для получения дополнительной информации проверьте информацию об отладке nginx: http://wiki.nginx.org/Debugging.
Если вы столкнулись с проблемой конфигурации или что-то работает не так, как вы ожидаете, воспользуйтесь списком рассылки пользователей ModSecurity. Проблемы на GitHub также приветствуются, но мы предпочитаем, чтобы вопросы пользователей сначала попадали в список рассылки, где вы можете связаться со всем сообществом. Также не забудьте поискать существующую проблему, прежде чем открывать новую.
Наконец, если вы планируете открыть проблему на GitHub, не забудьте сообщить нам версию вашего libmodsecurity и версию коннектора nginx, который вы используете.
Пожалуйста, не сообщайте публично о каких-либо проблемах с безопасностью. Вместо этого свяжитесь с нами по адресу: [email protected], чтобы сообщить о проблеме. Как только проблема будет устранена, мы предоставим вам признание за это открытие.
Мы будем рады обсудить любые ваши идеи относительно новой функции. Имейте в виду, что это проект, управляемый сообществом, поэтому обязательно свяжитесь с сообществом через список рассылки, чтобы сначала получить отзывы. Альтернативно, не стесняйтесь открывать проблемы GitHub с запросом новых функций. Прежде чем открывать новую проблему, проверьте, существует ли существующий запрос на добавление желаемой функции.
Мы очень желаем своевременного выпуска наших пакетов в дистрибутивах. Дайте нам знать, можем ли мы что-нибудь сделать, чтобы облегчить вашу работу как упаковщика.