テクノロジー NGINX 非公開: Nginx Web サーバーのセキュリティと強化ガイド

Nginx Web サーバーのセキュリティと強化ガイド

Nginx セキュリティのベスト プラクティス。

Nginx は業界で最も急速に成長している Web サーバーであり、現在市場シェアで第 2 位の地位を占めています。

2004 年に初めてリリースされて以来、優れた評判を獲得し、最もアクセス数の多い上位 100 万のサイトで使用されています。

nginx市場シェア-1
nginx市場シェア-1
nginx市場シェア-1

それには理由があります。Nginx は 非常に高速 です。

この記事では、実稼働環境で Nginx を保護するための重要なガイドのいくつかについて説明します。それでは始めましょう。

Nginx Web サーバーのセキュリティと強化ガイド
Nginx Web サーバーのセキュリティと強化ガイド

SSL/TLS

SSL証明書の実装

Web セキュリティの最初のステップは、https を使用して Web アプリケーションにアクセスし、通信に暗号化層を追加できるように SSL を実装することです。

  • OpenSSL を使用して 2048 ビットおよび sha-2 で CSR を生成する
openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr
  • 上記のコマンドは、現在の作業で直接 CSR とキー ファイルを生成します。 .csr と .key ファイル名を変更することを忘れないでください。

認証局によって署名された CSR を取得し、署名された証明書を取得したら、以下のように Nginx にそれらを実装できます。

  • Nginxサーバーにログインする
  • ssl.conf ファイルがある conf フォルダーに移動します。

注: Linux でのデフォルトのインストールでは、このファイルは /etc/nginx/conf.d の下にあります。

  • ファイルを編集して以下を追加します。これにより、Nginx が 443 ポートでリッスンできるようになります。
 server {
listen       443 ssl;
   server_name bestflare.com;
   ssl                 on;
   ssl_certificate     /opt/cert/bestflare.pem;
   ssl_certificate_key /opt/cert/bestflare.key;
   }

注: 証明書とキー ファイルのパスを変更することを忘れないでください。

  • 設定を保存し、Nginx を再起動します。 SSL 証明書が正常に実装されました。

SSL/TLSの最適化

SSL があるからといって完全に安全であるというわけではないため、Web セキュリティの専門家として、Web サーバーを保護するための構成を適用する必要があります。

まず、Web サイトに対して SSL スキャン を実行して、スコアと重大な脆弱性を見つけることをお勧めします。

ssl-labs-評価-c
ssl-labs-評価-c
ssl-labs-評価-c

したがって、現在の SSL Labs の評価は 「C」 であり、目標は「A」にすることです。

弱いSSL/TLSプロトコルを無効にする

SSL 3、TLS 1.0、および TLS 1.1 には脆弱性があるため、強力な TLS 1.2 プロトコルのみを許可します。

  • ssl.conf ファイルを編集し、server ブロックに以下を追加します
ssl_protocols       TLSv1.2;
  • ssl.conf ファイルを保存し、Nginx を再起動します。

弱い暗号スイートを無効にする

弱い暗号スイートはログジャムのような脆弱性を引き起こす可能性があるため、強力な暗号のみを許可する必要があります。

  • ssl.confファイルのserverブロックに以下を追加します。
 ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
  • ファイルを保存してNginxを再起動します

チェーン証明書のインストール

チェーン証明書がないことも全体的な評価に影響し、Chrome などの最新のブラウザで閲覧するとエラーが表示される場合があります。当局からチェーン証明書を取得する必要があります。ほとんどの場合、Web サイトまたは Google で見つけることができます。

  • 以下のようにWebサイト証明書にチェーン証明書の内容を追加します。私の例では、/opt/cert/bestflare.pem になります。

証明書チェーン
証明書チェーン
証明書チェーン

  • ファイルを保存してNginxを再起動します

TLS 用の安全な Diffie-Hellman

ディフィー・ヘルマンは、信じられていたほど安全ではありません。最近リストに追加されたベスト プラクティスの 1 つは、Diffie-hellman を保護することです。これを行うには、一意の DH グループを生成し、ssl.conf ファイルに ssl_dhparam を追加します。

  • OpenSSL を使用して一意の DH グループを生成する
openssl dhparam -out dhparams.pem 4096
  • 数分かかり、現在の作業ディレクトリに dhparams.pem ファイルが生成されます。
  • dhparams.pem を証明書フォルダーにコピーします
  • ssl.confを変更し、serverブロックに以下を追加します。
 ssl_dhparam    /opt/cert/dhparams.pem;
  • ファイルを保存してNginxを再起動します

SSL/TLS の最適化にはこれで十分です。URL を再度テストして評価を確認してみましょう。

うおおお!これで、SSLLabs による評価が 「A」 であることがわかります。よくやった!

これが完全な ssl.conf です

# HTTPS server configuration
server {
   listen       443 ssl;
   server_name bestflare.com;
   ssl                 on;
   ssl_certificate     /opt/cert/bestflare.pem;
   ssl_certificate_key /opt/cert/bestflare.key;
   ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers   on;
   ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
   ssl_dhparam     /opt/cert/dhparams.pem;
}
Nginx Web サーバーのセキュリティと強化ガイド
Nginx Web サーバーのセキュリティと強化ガイド

情報漏洩

デフォルトの Nginx インストールでは、多くの機密情報が公開されるため、ハッカーが攻撃に備えるのに役立ちます。

PCI コンプライアンス環境で作業している場合、これは情報漏洩の脆弱性とみなされ、この項目を修正する必要があります。

情報漏洩を無効にするには、server_tokens off を使用する必要があります。これについては前回の記事で説明しました。 Nginxのサーバーヘッダーバナーからバージョンを削除する

Web アプリケーションのセキュリティ

デフォルトの Nginx 構成は完璧ではなく、多くの脆弱性がある可能性があるため、セキュリティを強化するために構成を強化しています。

不要なHTTPメソッドを無効にする

ほとんどの場合、Web アプリケーションで必要なのは HTTP リクエストの GET、HEAD、POST だけです。 TRACE または DELETE を許可すると、クロスサイト トラッキング攻撃が許可され、ハッカーが Cookie 情報を盗む可能性があるため、危険です。

  • nginx.confを変更し、serverブロックの下に以下を追加します。
 if ($request_method !~ ^(GET|HEAD|POST)$ ) 
{
return 405; 
}

ファイルを保存し、Nginx を再起動します。誰かが TRACE、DELETE、PUT、OPTIONS を使用しようとすると、「405 Not allowed」と表示されるようになります。

 Chandans-iMac:~ chandan$ telnet bestflare.com 80
Trying 128.199.100.162...
Connected to bestflare.com.
Escape character is '^]'.
TRACE / HTTP/1.1
Host: testing
HTTP/1.1 405 Not Allowed
Server: nginx
Date: Sat, 11 Jul 2015 06:04:34 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

クリックジャッキング攻撃

クリックジャッキング攻撃を防ぐために、HTTP ヘッダーに X-FRAME-OPTIONS を挿入できます。

これは、nginx.conf ファイルに以下を追加することで実現されます。

 add_header X-Frame-Options "SAMEORIGIN";

上記のヘッダーは、同じオリジンからのみリソースをロードするようにブラウザーに指示します。

X-XSS 保護

X-XSS 保護を備えた HTTP ヘッダーを挿入して、クロスサイト スクリプティング攻撃を軽減します。

  • nginx.conf ファイルを変更して以下を追加します
add_header X-XSS-Protection "1; mode=block";
  • 設定ファイルを保存し、Nginx を再起動します。実装後にヘッダー テスト ツールを使用して検証できます。

ここで説明する OWASP 推奨のセキュア ヘッダーの実装にも興味があるかもしれません。

ModセキュリティWAFを実装する

OWASP コア ルール セットを使用して Web アプリケーション ファイアウォール ModSecurity を実装することで、セキュリティ層を追加します。

あるいは、Nginx サーバーの前で SUCURI のようなクラウドベースのセキュリティを使用することを検討してください。

Nginxを最新の状態に保つ

最後になりましたが、多くのパフォーマンス強化、セキュリティ修正、新機能が追加されているため、Nginx を最新の状態に保つ必要があります。

これが Nginx の安全性を保つのに役立つことを願っています。

次に、 高パフォーマンスを実現する Nginx を最初から構築する 方法を学ぶことに興味があるかもしれません。

「 Nginx Web サーバーのセキュリティと強化ガイド」についてわかりやすく解説!絶対に観るべきベスト2動画

Nginx(エンジンエックス)入門 | 人気のWebサーバーを15分で解説!
【Linux技術動画】Webサーバの負荷分散?Nginxでロードバランサーの説明・構築動画 ※約20分

Nginx セキュリティのベスト プラクティス。

Nginx は業界で最も急速に成長している Web サーバーであり、現在市場シェアで第 2 位の地位を占めています。

2004 年に初めてリリースされて以来、優れた評判を獲得し、最もアクセス数の多い上位 100 万のサイトで使用されています。

nginx市場シェア-1
nginx市場シェア-1
nginx市場シェア-1

それには理由があります。Nginx は 非常に高速 です。

この記事では、実稼働環境で Nginx を保護するための重要なガイドのいくつかについて説明します。それでは始めましょう。

Nginx Web サーバーのセキュリティと強化ガイド
Nginx Web サーバーのセキュリティと強化ガイド

SSL/TLS

SSL証明書の実装

Web セキュリティの最初のステップは、https を使用して Web アプリケーションにアクセスし、通信に暗号化層を追加できるように SSL を実装することです。

  • OpenSSL を使用して 2048 ビットおよび sha-2 で CSR を生成する
openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr
  • 上記のコマンドは、現在の作業で直接 CSR とキー ファイルを生成します。 .csr と .key ファイル名を変更することを忘れないでください。

認証局によって署名された CSR を取得し、署名された証明書を取得したら、以下のように Nginx にそれらを実装できます。

  • Nginxサーバーにログインする
  • ssl.conf ファイルがある conf フォルダーに移動します。

注: Linux でのデフォルトのインストールでは、このファイルは /etc/nginx/conf.d の下にあります。

  • ファイルを編集して以下を追加します。これにより、Nginx が 443 ポートでリッスンできるようになります。
 server {
listen       443 ssl;
   server_name bestflare.com;
   ssl                 on;
   ssl_certificate     /opt/cert/bestflare.pem;
   ssl_certificate_key /opt/cert/bestflare.key;
   }

注: 証明書とキー ファイルのパスを変更することを忘れないでください。

  • 設定を保存し、Nginx を再起動します。 SSL 証明書が正常に実装されました。

SSL/TLSの最適化

SSL があるからといって完全に安全であるというわけではないため、Web セキュリティの専門家として、Web サーバーを保護するための構成を適用する必要があります。

まず、Web サイトに対して SSL スキャン を実行して、スコアと重大な脆弱性を見つけることをお勧めします。

ssl-labs-評価-c
ssl-labs-評価-c
ssl-labs-評価-c

したがって、現在の SSL Labs の評価は 「C」 であり、目標は「A」にすることです。

弱いSSL/TLSプロトコルを無効にする

SSL 3、TLS 1.0、および TLS 1.1 には脆弱性があるため、強力な TLS 1.2 プロトコルのみを許可します。

  • ssl.conf ファイルを編集し、server ブロックに以下を追加します
ssl_protocols       TLSv1.2;
  • ssl.conf ファイルを保存し、Nginx を再起動します。

弱い暗号スイートを無効にする

弱い暗号スイートはログジャムのような脆弱性を引き起こす可能性があるため、強力な暗号のみを許可する必要があります。

  • ssl.confファイルのserverブロックに以下を追加します。
 ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
  • ファイルを保存してNginxを再起動します

チェーン証明書のインストール

チェーン証明書がないことも全体的な評価に影響し、Chrome などの最新のブラウザで閲覧するとエラーが表示される場合があります。当局からチェーン証明書を取得する必要があります。ほとんどの場合、Web サイトまたは Google で見つけることができます。

  • 以下のようにWebサイト証明書にチェーン証明書の内容を追加します。私の例では、/opt/cert/bestflare.pem になります。

証明書チェーン
証明書チェーン
証明書チェーン

  • ファイルを保存してNginxを再起動します

TLS 用の安全な Diffie-Hellman

ディフィー・ヘルマンは、信じられていたほど安全ではありません。最近リストに追加されたベスト プラクティスの 1 つは、Diffie-hellman を保護することです。これを行うには、一意の DH グループを生成し、ssl.conf ファイルに ssl_dhparam を追加します。

  • OpenSSL を使用して一意の DH グループを生成する
openssl dhparam -out dhparams.pem 4096
  • 数分かかり、現在の作業ディレクトリに dhparams.pem ファイルが生成されます。
  • dhparams.pem を証明書フォルダーにコピーします
  • ssl.confを変更し、serverブロックに以下を追加します。
 ssl_dhparam    /opt/cert/dhparams.pem;
  • ファイルを保存してNginxを再起動します

SSL/TLS の最適化にはこれで十分です。URL を再度テストして評価を確認してみましょう。

うおおお!これで、SSLLabs による評価が 「A」 であることがわかります。よくやった!

これが完全な ssl.conf です

# HTTPS server configuration
server {
   listen       443 ssl;
   server_name bestflare.com;
   ssl                 on;
   ssl_certificate     /opt/cert/bestflare.pem;
   ssl_certificate_key /opt/cert/bestflare.key;
   ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers   on;
   ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
   ssl_dhparam     /opt/cert/dhparams.pem;
}
Nginx Web サーバーのセキュリティと強化ガイド
Nginx Web サーバーのセキュリティと強化ガイド

情報漏洩

デフォルトの Nginx インストールでは、多くの機密情報が公開されるため、ハッカーが攻撃に備えるのに役立ちます。

PCI コンプライアンス環境で作業している場合、これは情報漏洩の脆弱性とみなされ、この項目を修正する必要があります。

情報漏洩を無効にするには、server_tokens off を使用する必要があります。これについては前回の記事で説明しました。 Nginxのサーバーヘッダーバナーからバージョンを削除する

Web アプリケーションのセキュリティ

デフォルトの Nginx 構成は完璧ではなく、多くの脆弱性がある可能性があるため、セキュリティを強化するために構成を強化しています。

不要なHTTPメソッドを無効にする

ほとんどの場合、Web アプリケーションで必要なのは HTTP リクエストの GET、HEAD、POST だけです。 TRACE または DELETE を許可すると、クロスサイト トラッキング攻撃が許可され、ハッカーが Cookie 情報を盗む可能性があるため、危険です。

  • nginx.confを変更し、serverブロックの下に以下を追加します。
 if ($request_method !~ ^(GET|HEAD|POST)$ ) 
{
return 405; 
}

ファイルを保存し、Nginx を再起動します。誰かが TRACE、DELETE、PUT、OPTIONS を使用しようとすると、「405 Not allowed」と表示されるようになります。

 Chandans-iMac:~ chandan$ telnet bestflare.com 80
Trying 128.199.100.162...
Connected to bestflare.com.
Escape character is '^]'.
TRACE / HTTP/1.1
Host: testing
HTTP/1.1 405 Not Allowed
Server: nginx
Date: Sat, 11 Jul 2015 06:04:34 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

クリックジャッキング攻撃

クリックジャッキング攻撃を防ぐために、HTTP ヘッダーに X-FRAME-OPTIONS を挿入できます。

これは、nginx.conf ファイルに以下を追加することで実現されます。

 add_header X-Frame-Options "SAMEORIGIN";

上記のヘッダーは、同じオリジンからのみリソースをロードするようにブラウザーに指示します。

X-XSS 保護

X-XSS 保護を備えた HTTP ヘッダーを挿入して、クロスサイト スクリプティング攻撃を軽減します。

  • nginx.conf ファイルを変更して以下を追加します
add_header X-XSS-Protection "1; mode=block";
  • 設定ファイルを保存し、Nginx を再起動します。実装後にヘッダー テスト ツールを使用して検証できます。

ここで説明する OWASP 推奨のセキュア ヘッダーの実装にも興味があるかもしれません。

ModセキュリティWAFを実装する

OWASP コア ルール セットを使用して Web アプリケーション ファイアウォール ModSecurity を実装することで、セキュリティ層を追加します。

あるいは、Nginx サーバーの前で SUCURI のようなクラウドベースのセキュリティを使用することを検討してください。

Nginxを最新の状態に保つ

最後になりましたが、多くのパフォーマンス強化、セキュリティ修正、新機能が追加されているため、Nginx を最新の状態に保つ必要があります。

これが Nginx の安全性を保つのに役立つことを願っています。

次に、 高パフォーマンスを実現する Nginx を最初から構築する 方法を学ぶことに興味があるかもしれません。

「 Nginx Web サーバーのセキュリティと強化ガイド」についてわかりやすく解説!絶対に観るべきベスト2動画

Nginx(エンジンエックス)入門 | 人気のWebサーバーを15分で解説!
【Linux技術動画】Webサーバの負荷分散?Nginxでロードバランサーの説明・構築動画 ※約20分