ModSecurity-nginx コネクタは、nginx と libmodsecurity (ModSecurity v3) の間の接続ポイントです。別の言い方をすると、このプロジェクトは nginx と libmodsecurity 間の通信チャネルを提供します。このコネクタは、nginx で LibModSecurity を使用するために必要です。
ModSecurity-nginx コネクタは、nginx モジュールの形式をとります。このモジュールは、nginx と ModSecurity の間の通信層として機能するだけです。
このプロジェクトは ModSecurity (バージョン 2.9 以前) ではなく libmodsecurity に依存していることに注意してください。
古いバージョンでは、ModSecurity を nginx にリンクするための Apache 内部のラッパーである ModSecurity スタンドアロンを使用します。この現在のバージョンは nginx に近く、Apache に依存しなくなった新しい libmodsecurity を使用します。その結果、この現在のバージョンは依存関係が少なく、バグも少なく、高速になっています。さらに、ディレクトリ/場所ごとのカスタマイズ (SecRuleRemoveById など) によるグローバル ルール設定の使用の可能性など、いくつかの新機能も提供されます。
このソフトウェアをコンパイルする前に、libmodsecurity がインストールされていることを確認してください。 ModSecurity git リポジトリからダウンロードできます。 libmodsecurity のコンパイルとインストールに関する情報については、付属のドキュメントを参照してください。
libmodsecurity がインストールされている場合は、nginx サードパーティ モジュールのインストール手順に従って、ModSecurity-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 for nginx は、nginx 設定ディレクティブを拡張します。 4 つの新しいディレクティブが追加されます。それらは次のとおりです。
構文: modsecurity on |オフ
コンテキスト: 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 <キー> <ルールへの URL>
コンテキスト: http、サーバー、場所
デフォルト:いいえ
modsecurity 構成ファイルを (インターネット上の) どこからダウンロードするかを指定します。また、そのサーバーに対する認証に使用されるキーも指定します。
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
}
}
構文: modsecurity_rules
コンテキスト: 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、サーバー、場所
デフォルト:いいえ
ライブラリでトランザクション ID を生成する代わりに、nginx からトランザクション ID を渡すことができます。これはトレース目的に役立ちます。たとえば、次の構成を検討してください。
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 を組み合わせて使用すると、同じ一意の識別子を使用してアクセス ログ エントリとエラー ログ エントリ間の相関関係を見つけることができます。
文字列には変数を含めることができます。
オープンソース プロジェクトとして、私たちはコミュニティの誰でも私たちのプロジェクトに貢献することを招待 (そして奨励) します。これは、新機能、バグ修正、バグ レポート、初心者ユーザー サポート、およびその他のお手伝いを希望するものなどの形式をとる場合があります。ありがとう。
レビュー作業と QA 統合を容易にするために、パッチを GitHub インフラストラクチャ内に置くことを好みます。 GitHub は、「プル リクエスト」の実行方法に関する優れたドキュメントを提供しています。詳細については、こちらをご覧ください: https://help.github.com/articles/using-pull-requests/
使用されているコーディングスタイルを尊重してください。プル リクエストにはさまざまなコミットを含めることができるため、コミットごとに 1 つの修正または 1 つの機能を提供します。ターゲット作業の範囲外のものは変更しないでください (例: 渡した関数のコーディング スタイル)。
コード内には、TODO または FIXME としてマークされた、注意が必要なさまざまな項目があります。 grep を実行して項目のリストを確認します。
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *
また、最近のバグ レポートや未解決の問題を参照して、どのような種類のヘルプを求めているかを把握することもできます。
手動テストと併せて、nginx テスト ユーティリティを使用して、パッチが nginx の動作やパフォーマンスに悪影響を及ぼさないことを確認することを強くお勧めします。
nginx テストは http://hg.nginx.org/nginx-tests/ で入手できます。
これらのテストを使用するには、Perl ユーティリティ prove (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のデバッグスキーマを尊重します。 nginx の構成中に構成オプション「--with-debug」を使用すると、コネクタのデバッグ メッセージも有効になります。コア ダンプとクラッシュは、nginx のデバッグに使用されるのと同じ方法でデバッグされることが期待されます。詳細については、nginx のデバッグ情報を確認してください: http://wiki.nginx.org/Debugging
設定の問題に直面している場合、または何かが期待どおりに動作しない場合は、ModSecurity ユーザーのメーリング リストを使用してください。 GitHub での問題も歓迎ですが、まずはコミュニティ全体に連絡できるメーリング リストでユーザーに質問してもらうことを好みます。また、新しい問題を開く前に、既存の問題を探すことを忘れないでください。
最後に、GitHub で問題をオープンする予定がある場合は、libmodsecurity のバージョンと実行している nginx コネクタのバージョンを忘れずにお知らせください。
セキュリティ上の問題を公的に報告しないでください。代わりに、[email protected] までご連絡いただき、問題を報告してください。問題が解決されたら、発見に対するクレジットを提供します。
新しい機能についてのアイデアがございましたら、ぜひご相談ください。これはコミュニティ主導のプロジェクトであるため、必ずメーリング リスト経由でコミュニティに連絡し、フィードバックを得るようにしてください。あるいは、お気軽に GitHub の問題を開いて新機能をリクエストしてください。新しい問題を開く前に、必要な機能に対する既存の機能リクエストがあるかどうかを確認してください。
パッケージをディストリビューションに予定どおりに提供することは、私たちが強く望んでいることです。パッケージャーとしてのあなたの仕事を促進するために私たちにできることがあればお知らせください。