Nginx におけるセキュリティ問題に関する 10 のヒント
Nginx は、現在最も人気のある Web サーバーの 1 つです。
世界のウェブ トラフィックの 7% を処理しており、驚くべき速度で成長しています。これは素晴らしいサーバーなので、ぜひ導入したいと思います
以下は、Nginx 導入の安全性を確保するのに役立つ一般的なセキュリティの落とし穴と解決策のリストです。
1. 設定ファイルでは「if」を慎重に使用してください。これは書き換えモジュールの一部であり、どこにも使用しないでください。
「if」ステートメントは、オーバーライドされたモジュール評価ディレクティブの必須部分です。言い換えれば、Nginx の設定は一般に宣言型です。場合によっては、ユーザーの要求により、オーバーライドされていないディレクティブ内で「if」を使用しようとしたため、現在直面している状況が発生しました。ほとんどの場合は正常に動作しますが、上記の内容を参照してください。
唯一の正しい解決策は、オーバーライドされていないディレクティブ内の「if」を完全に無効にすることのようです。これにより既存の設定の多くが変更されるため、まだ完了していません。
ソース: IfIsEvil
2. 各 ~ .php$ リクエストを PHP に転送します。
この人気のあるコマンドの潜在的なセキュリティ脆弱性の紹介が先週リリースされました。ファイル名が hello.php.jpeg であっても、~.php$ の正規パターンに一致してファイルが実行されます。
上記の問題を解決するには 2 つの良い方法があります。混合メソッドを使用して任意のコードを簡単に実行しないようにすることが重要だと思います。
1. ファイルが見つからない場合は、try_files のみを使用して (これはすべての動的実行状況で注意する必要があります)、PHP を実行している FCGI プロセスにファイルを転送します。
2. php.ini ファイルで cgi.fix_pathinfo が 0 (cgi.fix_pathinfo=0) に設定されていることを確認します。これにより、PHP はファイルの完全名を確認します (ファイルの最後に .php が見つからない場合は無視されます)
3. 不正なファイルに一致する正規表現の問題を修正します。正規表現は、「.php」を含むすべてのファイルを考慮するようになりました。サイトの後に「if」を追加すると、正しいファイルのみが実行されるようになります。 /location ~ .php$ と location ~ ..*/.*.php$ の両方を 403 を返すように設定します。3. autoindex モジュールを無効にします。
使用している Nginx バージョンでは変更されている可能性があります。そうでない場合は、設定ファイルの location ブロックに autoindex off; ステートメントを追加してください。
4. サーバー上の SSI (サーバー側参照) を無効にします。これは、location ブロックに ssi off を追加することで実行できます。 (スクリプト アカデミー www.jbxue.com)
5. サーバー タグをオフにします。 (デフォルトで) 有効にすると、すべてのエラー ページにサーバーのバージョンと情報が表示されます。この問題を解決するには、server_tokens off ステートメントを Nginx 構成ファイルに追加します。
6. バッファ オーバーフロー攻撃の可能性を制限するために、構成ファイルにカスタム キャッシュを設定します。
client_body_buffer_size 1K; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k;
client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10;
limit_zone slimits $binary_remote_addr 5m; limit_conn slimits 5;
10. 最新の Nginx セキュリティ更新情報を入手してください。