NGINX Plus R22を発表

NGINX | 2020年6月09日

NGINX Plus Release 22(R22)の提供開始をお知らせします。NGINX Open SourceをベースとするNGINX Plusは、ソフトウェアロードバランサー、コンテンツキャッシュ、Webサーバー、APIゲートウェイを一体化した唯一のソリューションです。本リリースでは、主に監視と認証を強化し、大規模環境で稼働するアプリケーションのきめ細かな制御とレジリエンスの向上を図っています。

NGINX Plus R22の新機能は次のとおりです。

動作に関する重要な変更

新機能の詳細

クライアント証明書のOCSP検証

NGINX Plusは相互TLSをサポートしています。相互TLSでは、クライアント証明書を使用して、接続するクライアントのIDを検証するとともに、暗号化された接続を確立します。相互TLSにより、クライアントのIDを高い信頼度で確認できますが、失効した証明書の管理が運用上の負担になる場合があります。オンライン証明書ステータスプロトコル(OCSP)は、提示されたクライアント証明書のステータスを検証することで、この問題を解決します。

NGINX Plusでは、OCSPを使用して、RFC 6960で定義されているX.509クライアント証明書の有効性を確認するように設定できます。

SSLクライアント証明書のOCSP検証を有効にするには、新しい「ssl_ocsp」ディレクティブを、証明書検証を有効にする「ssl_verify_client」ディレクティブと併せて指定します。

コード例を読み込み中…

NGINX Plus sends the OCSP request to the OCSP URI embedded in the client certificate unless you define a different URI with the ssl_ocsp_responderディレクティブで別のURIを定義しない限り、NGINX Plusはクライアント証明書に埋め込まれたOCSP URIにOCSPリクエストを送信します。

すべてのワーカープロセスで共有する単一のメモリゾーンにOCSPレスポンスをキャッシュするには、ゾーンの名前とサイズを定義するssl_ocsp_cacheディレクティブを指定します。OCSPレスポンス内のnextUpdate値で別の期間が指定されていない限り、レスポンスは1時間キャッシュされます。

クライアント証明書の検証結果は、OCSPの失敗理由を含め、$ssl_client_verify変数で確認できます。

クライアント証明書が信頼されていない場合、またはOCSPレスポンスが有効でない場合、TLSハンドシェイクは失敗します。ステータスコード「495 (SSL Certificate Error)」が返され、エラーログに重大度「error」のエントリが作成されます。

YYYY/MM/DD hh:mm:ss [error] 31222#0: *5 certificate status "revoked" in the OCSP response while requesting certificate status, responder: 127.0.0.1

OpenID Connectの機能強化

F5の「OpenID Connectリファレンス実装」は、NGINX Plusで新規および既存のアプリケーションにSSOを拡張し、複雑さとコストを最小限に抑えます。このリファレンス実装では、NGINX Plusの機能と「NGINX JavaScriptモジュール」(njs)を組み合わせて、認可エンドポイントとのコード交換を行い、IdPからIDトークンを受け取ります。IDトークン自体はNGINX Plusのキーバリューストアにキャッシュされ、不透明なセッショントークンがクライアントに送信されます。クライアントは有効なセッショントークンを提示して認証を受けます。NGINX Plusは、バックエンドアプリケーションへのアクセスを許可する前に、このセッショントークンを使用してIDトークンを検証します。

このリリースでは、OIDCリファレンス実装に多数の機能強化が加えられたほか、2つの重要な変更が行われています。

  1. この構成では、受信リクエストから適切な入力変数を複数のmapブロックに渡すことで、複数のIdPをサポートできるようになりました。この柔軟性の向上により、OIDCリファレンス実装のコードを変更する必要性が低減します。
  2. JavaScriptコードがモジュールとして実装されるようになり、すべてのnjsコードを1つのファイルで管理することなく、同じホスト上で他のnjsソリューションと共存できるようになりました。

設定例を次に示します。

コード例を読み込み中…

各mapブロックでは複数の値を指定できるため、複数のIdPと認証パラメーター(クライアントシークレット、JWKキーファイル、認可エンドポイント)をサポートできます。ここでは入力パラメーターとして$host変数を使用していますが、リクエストヘッダーから取得した任意の変数を指定できます。

NGINX Plus APIでは、監視とトラブルシューティングに役立つよう、OpenID Connectログインに関連するアクティビティを追跡できるようになりました。OpenID Connectのリファレンス実装について詳しくは、GitHubリポジトリを参照してください。

レート制限と接続数制限のリアルタイムダッシュボードグラフ

DDoS攻撃とブルートフォースによるパスワード推測攻撃は、アプリケーションに対する2つの重大な脅威です。NGINX Plusで一定期間内に各クライアントが送信できるリクエスト数を制限するレート制限により、これらの影響を軽減できます。

NGINX Plus R20では、NGINX Plus APIにリクエストレート制限と接続制限のリアルタイム監視機能が追加されました(エンドポイントは/api/version/http/limit_reqsおよび/api/version/http/limit_conns)。この情報はNGINX Plusのライブアクティビティ監視ダッシュボードに表示され、累積数は表形式、タイムスタンプ付きの数値はグラフ形式で確認できます。

  • リクエストレート制限のメトリクスは、[Limit Req]テーブル([HTTP Zones]タブ)に表示されます
  • 接続数制限のメトリクスは、[Limit Conn]タブの[TCP/UDP Zones]テーブルに表示されます

この表には、limit_req_zoneディレクティブとlimit_conn_zoneディレクティブで定義された各ゾーンの行が表示されます。チャートを表示するには、行の左端にあるチャートアイコンをクリックします。

展開したチャートは継続的に更新され、各時間間隔の値が積み上げ面グラフで表示されます。表示する情報は、次の方法でカスタマイズできます。

  • 表示する時間範囲を選択:1分、5分、または15分
  • チャートにカーソルを合わせると、特定の時点における正確な件数が表示されます
  • 凡例領域の統計タイプにカーソルを合わせると、グラフ内の該当する統計が強調表示されます
  • 凡例領域で統計タイプをクリックすると、表示と非表示を切り替えられます
  • チャートを左右にドラッグして、過去のデータを表示します

デフォルトのダッシュボード更新間隔である1秒の場合、各チャートには約30分間の履歴データが保存されます。ダッシュボードの更新間隔を長くする(更新頻度を下げる)と、利用できる履歴データの量が増えます。ダッシュボードのチャートは永続的ではないため、別のページに移動するか、タブを再読み込みすると、履歴データは失われます。

NGINX JavaScript Moduleの機能強化

The NGINX JavaScript moduleはNGINX Plusの機能を拡張し、トラフィックをよりきめ細かく制御する、複数のアプリケーションにまたがるJavaScript関数を統合する、セキュリティ脅威から防御するなど、幅広いユースケースに対応します。NGINX JavaScript moduleは0.4.1に更新され、次の機能が追加されました。

以下のコードと設定は、新しい「r.rawHeadersIn」オブジェクトを使用して、エラーが発生するたびにクライアントから送信されたヘッダー一式をそのままログに記録する方法を示しています。[編集者注 – これは、NGINX JavaScriptモジュールの数あるユースケースの1つにすぎません。完全な一覧については、「NGINX JavaScriptモジュールのユースケース」を参照してください。]

コード例を読み込み中…

コード例を読み込み中…

以下は、404レスポンスのログエントリ例です。

$ curl http://localhost/bogus
$ tail --lines=1 /var/log/nginx/access_json.log
{"response":{"timestamp":"YYYY-MM-DDThh:mm:ss+TZ_offset","status":404},"request":{"client":"127.0.0.1","uri":"/bogus","headers":[["Host","localhost:80"],["User-Agent","curl/7.64.1"],["Accept","*/*"]]}}

認証失敗時の遅延

パスワードのブルートフォース攻撃やクレデンシャルスタッフィングなどのタイミング攻撃を緩和するため、認証に失敗した際にNGINX Plusの応答を遅延させることができます。新しいauth_delayディレクティブでは遅延時間を指定でき、Auth Basic、Auth JWT、およびAuth Requestモジュールで処理される認証リクエストに適用できます。

NGINX Plusへのアップグレードまたはお試し

NGINX Plusをご利用の場合は、できるだけ早くNGINX Plus R22へアップグレードすることを強く推奨します。これにより、複数の追加修正や改善も適用され、サポートチケットを起票する必要が生じた際に、NGINXがより円滑にサポートを提供できるようになります。

NGINX Plusをまだお試しでない場合は、ぜひご利用ください。セキュリティ、負荷分散、APIゲートウェイのほか、強化された監視・管理APIを備え、充実したサポートを受けられるWebサーバーとしても活用できます。今すぐ30日間の無料トライアルを開始できます。NGINX Plusがアプリケーションの提供とスケーリングにどのように役立つか、ぜひお確かめください。


共有

著者について

Liam Crilly
Liam Crillyプロダクトマネジメント担当シニアディレクター

Liam Crillyのその他のブログ記事

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります