クラウドセキュリティネットワーク

NGINX WAFを試してみよう!

NGINX App Protect、通称 NAP(ナップ)の紹介です。WAFを体験してみませんか。

東京エレクトロンデバイスでエンジニアをやっている Nagaoka です。grasys 様とリレー形式のブログも最終回となりました。

さて、私からは、NGINX の WAFの導入方法に関してご説明します。

 

NGINXのWAFは、NGINX App Protect という名称で、F5 BIG-IP のWAF技術が この NGINX App Protect にも組み込まれています。既に 有償版である NGINX Plus をご利用ということであれば、Add-on という形で、NGINX App Protectの機能を有効にすることができます。その他に以下のような特徴があります。

・軽量で、CI/CDパイプライン上でのデプロイが容易
・旧ModSecurityに比べ圧倒的な高速パフォーマンス
・OWASP 10 対応
・使い慣れたKubernetes APIを使用してセキュリティポリシーと構成を管理などが可能

 

ここでは、お試しということで イチから NGINX App Protect の導入方法に関して紹介していきたいと思います。

なお、メーカーの公式サイトのインストール手順は以下になります。

NGINX App Protect WAF Administration Guide
https://docs.nginx.com/nginx-app-protect/admin-guide/install/

導入にはライセンスが必要となりますが、無料トライアルライセンスを活用します。

無料トライアルライセンス申し込み
https://cn.teldevice.co.jp/product/f5-nginx/

 


ステップ 0:事前準備

NGINX App Protect と NGINX Plus の両方が有効になるトライアルライセンスを事前に取得しておきます。必要なライセンスファイルは、以下の2つです。

・nginx-repo.crt
・nginx-repo.key

 


ステップ 1:インストール

Linux OS種類によってインストール方法が異なります。今回は、Ubuntu 20.04 を使ってWAF構築を進めていきます。

他のLinux OSでWAF導入を試したい場合には、公式サイト にインストール詳細が記載されていますので、そちらをご参照ください。

 

大まかなインストール手順は以下のとおりです。

  1. ライセンスファイルをコピーします
  2. NGINXのインストールに必要となるパッケージをインストールします
  3. リポジトリを登録します
  4. パッケージマネージャーのプロキシの設定ファイルをダウンロードします
  5. リポジトリを更新します
  6. NGINX App Protectをインストールします

 

それでは、順に実施してみます。

 

1. ライセンスファイルをコピーします

準備しておいたライセンスファイルを 導入対象の Linux に転送しておきます。転送後、2つのライセンスファイルを /etc/ssl/nginx/ ディレクトリにコピーします。

/etc/ssl/nginx というディレクトリを作成します。

$ sudo mkdir -p /etc/ssl/nginx

ファイルをコピーします。

$ sudo cp -p nginx-repo.crt /etc/ssl/nginx/
$ sudo cp -p nginx-repo.key /etc/ssl/nginx/

 

2. NGINXのインストールに必要となるパッケージをインストールします

$ sudo apt-get -y update
$ sudo apt-get -y install apt-transport-https lsb-release ca-certificates wget gnupg2

 

3. リポジトリを登録します

GPGキーを追加します。

$ sudo wget https://cs.nginx.com/static/keys/nginx_signing.key && sudo apt-key add nginx_signing.key

古いバージョンのNGINX Plusのリポジトリ と パッケージマネージャーの設定ファイル を既に存在する場合は削除します。

$ sudo rm /etc/apt/sources.list.d/nginx-plus.list
$ sudo rm /etc/apt/apt.conf.d/90nginx

NGINX Plusのリポジトリの追加

$ printf "deb https://pkgs.nginx.com/plus/ubuntu `lsb_release -cs` nginx-plus\n" | sudo tee /etc/apt/sources.list.d/nginx-plus.list

NGINX App Protectのリポジトリの追加

$ printf "deb https://pkgs.nginx.com/app-protect/ubuntu `lsb_release -cs` nginx-plus\n" | sudo tee /etc/apt/sources.list.d/nginx-app-protect.list

 

4. パッケージマネージャーのプロキシの設定ファイルをダウンロードします

$ sudo wget -P /etc/apt/apt.conf.d https://cs.nginx.com/static/files/90pkgs-nginx

 

5. リポジトリを更新します

$ sudo apt-get update

 

6. NGINX App Protectをインストールします

最新の NGINX App Protect をインストールします。このとき、NGINX Plus も同時にインストールされます。

$ sudo apt-get -y install app-protect

 


ステップ 2:インストールしたバージョンの確認

無事にインストールができましたら、インストールされたバージョンを確認します。

1. NGINX Plusのバージョンを確認

$ nginx -v

2. NGINX App Protectのバージョンを確認

$ cat /opt/app_protect/VERSION

表示例:

パッケージとしてインストールされたバージョンを確認できます。

$ sudo apt policy nginx-plus
$ sudo apt policy app-protect

表示例:

NGINX Plus は R27、NGINX App Protect は 3.954.0 がインストールされました。NGINX App Protect の 3.954.0 は NGINX App Protect WAF Release 3.11 のことです。詳細はメーカーのページで確認することができます。

NGINX App Protect WAF Release 3.11
https://docs.nginx.com/nginx-app-protect/releases/release-notes-3.11/

 


ステップ 3:Attack Signatureのインストール

続いて、Attack Signatureをインストールします。

Attack Signature とは、メーカーが用意した「攻撃パターン等のルールを集めたパッケージ」です。
Attack Signatureの更新は、NGINX App Protectよりも高頻度でリリースされるため、NGINX App Protectとは別の独自のパッケージでリリースされます。直近の1年間では月平均3.9回リリースされていました。

NGINX App Protectをインストールした時点で、Attack Signatureはインストールされていません。このパッケージは必ずインストールしておきましょう。

 

1. NGINX App ProtectのUpdatesリポジトリを追加します

$ printf "deb https://pkgs.nginx.com/app-protect-security-updates/ubuntu/ `lsb_release -cs` nginx-plus\n" | sudo tee /etc/apt/sources.list.d/app-protect-security-updates.list

2. NGINX App Protectのシグネチャサインキーをapt-keyに追加します

$ sudo wget https://cs.nginx.com/static/keys/app-protect-security-updates.key && sudo apt-key add app-protect-security-updates.key

3. リポジトリを更新します

$ sudo apt-get update

4. 最新のAttack Signatureパッケージをインストールします

$ sudo apt-get -y install app-protect-attack-signatures

 

インストールされたAttack Signatureパッケージを確認します。

$ sudo apt policy app-protect-attack-signatures

表示例:

2022.06.22のAttack Signatureパッケージがインストールされたことが分かります。

 

なお、Attack Signatureパッケージをインストールした際にログに以下のメッセージが表示されています。

In order for the signature update to take effect, NGINX must be reloaded.

インストールしたAttack Signatureパッケージを更新にするには、NGINX をリロードしなくてはいけない、と書かれてありますので、以下のコマンド実行で リロードします。

$ sudo nginx -s reload

ここで、NGINXサービスが起動されていない場合にはエラーとなります。この場合は以下のサービス起動のコマンドを実行してください。

$ sudo systemctl start nginx.service

 


ステップ 4:サービスの確認

ひと通りのインストール作業が終わりましたので、NGINX App Protect のサービスの稼働状況を確認します。

サービスとしては NGINX Plus と NGINX App Protect の 2つが動いているはずですので、その両方を確認します。

NGINX Plusのサービス稼働状況を確認します。

$ sudo systemctl status nginx.service

NGINX App Protectのサービス稼働状況を確認します。

$ sudo systemctl status nginx-app-protect.service

起動していない場合には、以下のコマンドで起動させます。

$ sudo systemctl start nginx.service

 


ステップ 5:設定と確認

無事、サービス起動も確認できましたところで、これから NGINX App Protect用の設定を追加していきます。設定を追加するまでは、WAFとして機能しません。confファイルに数行追加するだけで WAFを有効化できます。

1. nginx.confのメインコンテキストに NGINX App Protect WAFのモジュールをロードする設定を追加します

/etc/nginx/nginx.confファイルを編集します。事前にファイルのバックアップはしておいてください。

追加する設定は以下の 1行です。「 events { 」の行の前に挿入します。挿入する位置が、「 events { 」より後だとうまくいきません。

load_module modules/ngx_http_app_protect_module.so;

 

2. http/server/locationコンテキストに NGINX App Protect WAFを有効化する設定をします

/etc/nginx/conf.d/default.confファイルを編集します。事前にファイルのバックアップはしておいてください。

追加する設定は以下の 1行です。「 location / 」の行の後に挿入します。

app_protect_enable on;

3. NGINXサービスをリロードします

以下のコマンドを実行します。

$ sudo nginx -s reload

4. ブラウザで設定確認テスト

NGINX App Protectをインストールでき、WAFとしての設定も有効化できました。

それでは、早速、ブラウザからHTTPリクエストを投げて設定確認テストを実施してみましょう。

 

a) WAFが検知しない通常のHTTPリクエスト

NGINXが標準で用意している「ようこそ画面」が表示されました。設定どおりです。

 

b) WAFが検知するHTTPリクエスト 

NGINX App Protectでブロックされた画面が表示されました。設定どおりうまくいきました。

 

 


まとめ

NGINX App Protect は手順どおりに実施すれば問題なくインストールができます。有効化もconfファイルに数行の設定を追加するだけで、直ぐに攻撃通信をブロックすることが出来ます。NGINX App Protectでプリセットされているセキュリティルールを適用するだけであれば、これだけになります。ですが、実際の運用では 検知ログを確認したり、セキュリティポリシールールをチューニングしていかなくてはいけません。

今回は、NGINX App Protectの導入をどのような流れで実施するか、という観点で紹介しました。
検知ログの確認、および、セキュリティポリシーのチューニングに関しては、また別の機会に紹介したいと思います。

 

今後もNGINXに関連する記事を書いていきますので、何かご要望があればご連絡ください。

 


<<  grasys×F5×TED ブログ一覧  >>

4月27日   NGINX Plusの検証をした!(grasys様)

6 2日    grasys×F5×TEDが徹底解析! NGINX Plusの仕組みがよくわかる!TED

6月9日    NGINX Plusのインストール方法とLBの基本設定(grasys様)

6月16日   NGINX PlusでJWT認証をやってみた!(TED)

6月22日  NGINX PlusのLB機能:アクティブヘルスチェック&セッション維持 (grasys様)

6月30日 NGINX Controllerをインストールしてみた!(TED)

7月7日 NGINX PlusのLB機能:DNSディスカバリー  (grasys様)

7月14日  NGINX Plus Ingress Controller を触ってみた (TED)

7月25日 NGINX WAFを試してみよう! (TED)


【 株式会社grasys:https://www.grasys.io/ 】

大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

この記事に関連する製品・サービス

この記事に関連する記事