Ubuntu前書きNaxsiは、Webアプリケーションのファイアウォール機能を提供するサードパーティのNginxモジュールです。Webサーバーに追加のセキュリティをもたらし、XSSやSQLインジェクションなどのさまざまなWeb攻撃からユーザーを保護します。Naxsiは柔軟で強力です。WordPressなどの一般的なWebアプリケーションですぐに使用できるルールを使用できます。同時に、Naxsiの学習モードを使用して独自のルールを作成し、微調整することもできます。Apache]に似ています。したがって、すでにModSecurityに精通している場合や、Nginxで同様の機能を探している場合は、Naxsiがきっとあなたの興味を引くでしょう。NaxsiにはModSecurityのすべての機能が含まれていない場合があります。このチュートリアルでは、Naxsiをインストールする方法、ルールを理解する方法、ホワイトリストを作成する方法、および一般的に使用されるWebアプリケーション用にすでに記述されているルールの場所を示します。前提条件このチュートリアルを実行する前に、次の前提条件を満たしていることを確認してください。14.04ドロップレット非ルートsudoユーザー。14.04での初期サーバー設定]をご覧ください。断りのない限り、このチュートリアルでルート権限を必要とするすべてのコマンドは、sudo権限を持つ非ルートユーザーとして実行する必要があります。ステップ1-NaxsiのインストールNaxsiをインストールするには、それとともにコンパイルされたNginxサーバーをインストールする必要があります。+`コマンドを使用して、通常のUbuntuの方法でインストールできます。nginx-naxsiこれにより、Nginxとそのすべての依存関係とともにNaxsiがインストールされます。サービスがDropletで自動的に開始および停止することを確認します。Nginxのデフォルトのインストールでは、基本的な動作するNginx環境が提供されます。これは、Naxsiに慣れるのに十分です。Nginxのカスタマイズに時間を費やすことはありませんが、代わりにNaxsiの構成に直接進みます。LTSでNginxサーバーブロック(仮想ホスト)をセットアップする方法]。」にあるコアルールをロードする必要があります。このファイルには、悪意のある攻撃を検出するための一般的な署名が含まれています。これらのルールについては、後で詳しく説明します。+」にルールを含めるだけです。したがって、nanoで編集するために後者のファイルを開きます。」セクションを見つけ、行の先頭にある「#+」文字を削除して、Naxsiのルールのインクルード部分のコメントを外します。##...ファイルを保存し、エディターを終了します。第二に、以前のルールを有効にし、Naxsiの基本的なオプションを設定する必要があります。+`の値のみを、デフォルトですでに存在するエラーファイルに変更し、残りは変更しないままにします。BLOCK;ファイルを保存して終了します。次に、上記の構成ディレクティブとその意味を示します。+-Naxsiを学習モードで起動します。これは、リクエストが実際にブロックされないことを意味します。Nginxエラーログでは、セキュリティ例外のみが発生します。デフォルトのルールはかなり積極的であるため、このような非ブロッキングの初期動作は重要です。後で、これらの例外に基づいて、正当なトラフィックのホワイトリストを作成します。+-サーバーブロック/場所のNaxsiを有効にします。+`のコメントを外すことで、サイトまたはサイトの一部のNaxsiを無効にできます。+-拒否されたリクエストが内部的に送信されるURL。これは、変更する必要がある唯一の設定です。+`エラーページを使用するか、独自のカスタムエラーページを作成できます。+-さまざまなカウンターのしきい値を設定します。SQLカウンターの場合は8ポイント)要求はブロックされます。これらのルールをよりアグレッシブにするには、値を減らし、その逆も同様です。+`は、サーバーブロックのロケーションごとにロードする必要があります。+)にロードしましょう。+」を見つけて、次のようになっていることを確認します。}上記の変更を行ったら、変更を有効にするためにNginxをリロードできます。reload次のステップでは、変更が成功したかどうかを確認する方法と、ログを読み取る方法について説明します。ステップ3-ログの確認Naxsiが機能することを確認するには、まだ学習モードであっても、例外をスローするURLにアクセスして、例外のエラーログを監視します。このルールが正確にどのように機能するかについては、後で説明します。+`でドロップレットにアクセスしてみてください。これにより、ダッシュがSQLのコメントに使用され、SQLインジェクションの一部と見なされるため、Naxsiセキュリティ例外がトリガーされます。+`の出力に、次の新しいコンテンツが表示されます。ゾーン(リクエストの一部)、トリガーされたルールのID、および疑わしいリクエストの変数名を提供します。」はドロップレットのIPです。+`へのリダイレクトに関するメッセージが続きます。"http://Y.Y.Y.Y/index.html?asd=----"Naxsiが学習モードの場合、このリダイレクトはログにのみ表示されますが、実際には発生しません。+`を終了し、エラーログファイルの出力を停止します。後ほど、Naxsiのルールについて詳しく学習します。ログの基本を理解することが重要になります。ステップ4-Naxsiルールの構成Naxsiの設定の最も重要な部分はルールです。ルールには、メインルールと基本ルールの2種類があります。+」ブロックの一部です。悪意のあるアクティビティを検出するための一般的な署名が含まれています。+`で識別)は、主に偽陽性の署名とルールをホワイトリストに登録するために使用されます。これらは場所ごとに適用されるため、サーバーブロック(vhost)構成の一部である必要があります。+」パッケージで提供されるデフォルトのルールを見てみましょう。サンプル行は次のとおりです。id:1007;...上記の規則から、次の部分の概要を説明できます。これらは普遍的であり、すべての規則に含まれています。+`は、すべてのルールを開始するディレクティブです。同様に、すべてのルールはルールのID番号で終わります。str:`はルールの2番目の部分にあります。str:`の場合、上記の例のように、署名がプレーンな文字列であることを意味します。rx:+」と一致させることもできます。msg:+`は、ルールに関する明確化を提供します。mz:+`はマッチゾーン、またはリクエストのどの部分を検査するかを表します。これは、本文、URL、引数などです。s:`は、署名が見つかったときに割り当てられるスコアを決定します。+」(リモートファイルインクルージョン攻撃)などのさまざまなカウンターに追加されます。`-`がリクエスト(ボディ、引数など)のいずれかの部分で見つかった場合、4ポイントSQLカウンターに追加されます。これは、ペアごとに4ポイントを取得し、SQLチェーンはリクエストをブロックするために8ポイントを必要とするためです。したがって、1組のダッシュのみが問題ではなく、ほとんどの場合、正当なトラフィックは影響を受けません。署名が一致しない場合、つまりスコアが適用されます。要求内の何かが欠落している場合、悪意のあるアクティビティが疑われます。1402+」のルールを見てみましょう。」も含まれていない場合、EVADEカウンターに4ポイントが追加されることを意味します。rx:+`)を使用する方法の例でもあります。ステップ5-ホワイトリスト登録ルールデフォルトのNaxsiルールは、サイトの正当なトラフィックをほぼ確実にブロックします。さまざまなユーザーインタラクションをサポートする複雑なWebアプリケーションがある場合はそうです。そのため、このような問題を解決するホワイトリストがあります。ホワイトリストは、2番目のタイプのルールであるNaxsiの基本ルールで作成されます。基本ルールを使用すると、ルール全体またはその一部をホワイトリストに登録できます。1007)に戻りましょう。ファイル名に2つのダッシュがあるファイルがあるとします。ルール1007が設定されていると、このファイルはSQLカウンターを4ポイント増やします。このファイル名と結果のスコアだけではリクエストをブロックするのに十分ではありませんが、問題を引き起こす可能性のある誤検知のままです。2つのダッシュを含む引数もある場合、要求はルール1007をトリガーします。それをテストするには、以前のようにエラーログを追跡します。=-+`にアクセスしてみてください。テストのためにこのファイルをウェブサイトに置く必要はありません。エラーログの出力には、次のようなよく知られた例外が表示されるはずです。この誤検知のトリガーに対処するには、次のようなホワイトリストが必要です。+`で、その後にルールIDが続きます。ホワイトリストに登録する内容をより正確にするために、一致ゾーン(URL)も指定しました。このホワイトリストを適用するには、まずホワイトリスト用の新しいファイルを作成します。/etc/nginx/naxsi_whitelist.rules次に、ルールをファイルに貼り付けます。"mz:URL";他のホワイトリストがある場合は、このファイルにも追加できます。各ホワイトリストは新しい行にあります。ホワイトリストを含むファイルは、サーバーブロックに含める必要があります。デフォルトのサーバーブロックに含めるには、再度nanoを使用します。/etc/nginx/sites-enabled/default次に、次のように、新しいインクルードをNaxsiの前のインクルードの直後に追加します。}この変更を有効にするには、Nginxをリロードします。+`パラメータのみがSQLカウンターに対して4ポイントをトリガーしますが、ファイル名はしません。したがって、この要求は例外としてエラーログに表示されません。必要なホワイトリストをすべて作成するのは、単調で退屈な作業であり、独自の科学でもあります。そのため、最初はすぐに利用できるhttps://github.com/nbs-system/naxsi-rules[Naxsiホワイトリスト]を使用できます。ほとんどの一般的なWebアプリケーションにはこのようなものがあります。私達がしたようにそれらをダウンロードし、サーバーブロックに含めるだけです。エラーログに正当なリクエストの例外が表示されないことを確認したら、Naxsiの学習モードを無効にできます。+」ディレクティブをコメントアウトします。/etc/nginx/naxsi.rules...LearningMode;SecRulesEnabled;#SecRulesDisabled;...最後に、変更を有効にするためにNginxをリロードします。reloadこれで、Naxsiが疑わしい要求をブロックし、サイトのセキュリティが強化されます。結論NginxとNaxsiでWebアプリケーションファイアウォールを設定するのは簡単です。最初はこれで十分であり、強力なNaxsiモジュールが提供するものの詳細を知りたいと思います。これで、Nginxサーバーを高速にするだけでなく、安全にすることもできます。