インフラエンジニア向けPaloalto Networks VM-Series for AWSを使ってみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちはコカコーラ好きのカジです。

今回は、私の昔から注目している次世代ファイアーウォールであるPaloalto Networks VM-SeriesがAWS上で利用できるため試してみました。 数点ハマりどころがあったので、紹介しています。

Paloalto Networks VM-Series for AWSとは

Paloalto Networks VM-Series for AWSとは、簡単に言うとファイアーウォール製品です。

Paloalto Networksの製品を知ったのは、6年前にここのホームページを見て知りましたが、ユーザ識別機能がとてもすごいと驚きました。

こんな人のためにブログを書いてみました。

  • Paloaltoのファイアーウォールを触ってみたいが、身近にVMware vSphere(ESXi)やXenServerなどのハイパーバイザーが無く、検証してみたい
  • オンプレミスで同じファイアーウォールを利用していて、クラウドでも同じものを利用したいという方に参考になれば幸いです。
  • あまりお金をかけず、検証するため、以下の内容で実施しました。

注意点

  • ライセンスは、AWS Marketplaceの15日間の試用版ライセンスでテストします。
  • 通信試験用のEC2サーバは12ヶ月の無料枠で作成できます。
  • Paloaltoは有料枠のEC2サーバ上に作成する必要があります。

ライセンスについて

  • ライセンス持ち込み型(BYOL):希望のモデルとサブスクリプションに応じたライセンスを購入します。
  • 従量課金型ライセンス :利用されるサブスクリプションにより2種類のバンドル版をAWS Marketplaceにご用意しています。

  • バンドル1:脅威防御

  • バンドル2:脅威防御、WildFire、URL フィルタリング (PAN-DB)、GlobalProtect

両方ともVM-300、プレミアムサポートあり

構成図

eth1=Paloalto上ではeth1/1、eth2=Paloalto上ではeth1/2となります。 kaji-paloalto-00

構築手順

VPCの構築は「VPC Wizard」でPrivate,Public+NATインスタンスのVPCを作成し、NATインスタンスを削除します。

AWS Marketplace から Launchします。 今回はBundle1を選択し、15日間試用期間で検証を行いました。 kaji-paloalto-01

kaji-paloalto-02

m3.xlargeを選択します。

kaji-paloalto-03

kaji-paloalto-05

作ったVPCと、Public側のサブネットを指定し、自動割り当てパブリックIPの有効化と、EBS最適化インスタンス(EBS-optimized instance)を指定します。

kaji-paloalto-04

Paloalto管理用のセキュリティグループは最低でも SSH, and HTTPS 今回は SSH, ICMP, HTTP, and HTTPSを有効にし、作成します。

kaji-paloalto-06

kaji-paloalto-07

追加セキュリティグループ

その他のセキュリティグループとして、2つ作成します。 Public サブネット用インターフェイスのセキュリティグループ:外部からファィアーウォールへの通信に必要な通信 今回の場合はPaloaltoの外部側インターフェイスeth1/1に利用します。 TCP:22 TCP:80 で作成しました。

kaji-paloalto-08

Private サブネット用インターフェイスのセキュリティグループ:Private サブネットのEC2からファィアーウォールへの通信に必要な通信 今回の場合はPaloaltoの外部側インターフェイスeth1/2に利用します。 TCP:22 TCP:80 で作成しました。

kaji-paloalto-09

追加インターフェイスの作成と割り当て

図のeth1/1とeth1/2用のENIを作成します。 それぞれ、IPアドレスを指定して作成します。10.0.x.10に指定します。 さきほどのセキュリティグループを割り当てます。

kaji-paloalto-10

kaji-paloalto-11

作成したENIを2つともPaloaltoのEC2インスタンスへ割り当てます。

kaji-paloalto-13

Public Subnet側のENIインターフェイスにElastc IPを割り当てます。 ついでに管理用のIPアドレスにもElastic IPを割り当てた方が便利かもしれません。

kaji-paloalto-14

「送信元/送信先の変更チェック(Source/Dest Check)を無効化

ネットワーク製品でおきまりの「送信元/送信先の変更チェック(Source/Dest Check)を無効化 さきほど作成したENIを2つとも実施します。

kaji-paloalto-15

kaji-paloalto-16

ルートテーブルの修正

VPCのルートテーブルを変更し、Private Subnetのルートテーブルを修正します。 ルーティング先を削除したNATインスタンスから、作成したPaloaltoのPrivate Subnetのインターフェイスへ変更します。 kaji-paloalto-18

Paloaltoの初期設定

Paloaltoの管理GUIのパスワード変更

sshでログインして、管理GUIのパスワードを設定します。 パスワード設定できると管理コンソールでアクセスできるはずです。

% ssh -i <ec2キーペア.pem> admin@<管理用インターフェイスのPublic IP/Elastic IP>
Welcome admin.
admin@PA-VM>
admin@PA-VM> configure
Entering configuration mode
[edit]
#管理GUIのパスワードを修正
admin@PA-VM# set mgt-config users admin password
Enter password   : <パスワードを入力>
Confirm password : <パスワードを入力>

[edit]
#設定を保存
admin@PA-VM# commit

..99%.....100%
Configuration committed successfully
[edit]
# ログアウト
admin@PA-VM# exit
admin@PA-VM> exit
Connection to xxx.xxx.xxx.xxx closed.

管理GUIにアクセスしインターフェイス設定

https://<管理用インターフェイスのPublic IP/Elastic IP> kaji-paloalto-19

Network > Interfaces > Ethernetで、アタッチしたネットワークインターフェイスを設定します。 この設定していないとLink Upせず、ハマりました。

ethernet1/1 > 設定 > 仮想ルーター : default

ethernet1/1 > 設定 > セキュリティゾーン : 新規ゾーン > Untrust

kaji-paloalto-20

kaji-paloalto-21

kaji-paloalto-22

同じように以下の設定も行います。

ethernet1/2 > 設定 > 仮想ルーター : default

ethernet1/2 > 設定 > セキュリティゾーン : 新規ゾーン > Trust

右上のCommitで保存します。(このコミットをよく忘れてしまい、ハマりますので注意ください。) リンク状態が緑に変化します。

kaji-paloalto-23

リモートメンテナンス用のNATポリシー設定

プライベートサブネットのEC2サーバをメンテナンスするためにNATポリシーを設定します。 Policies > NAT で設定します。

Desitination NATの設定

kaji-paloalto-24

kaji-paloalto-25

kaji-paloalto-26

kaji-paloalto-27

Source NATの設定

kaji-paloalto-28

kaji-paloalto-29

kaji-paloalto-30

kaji-paloalto-31

通信制御用のセキュリティポリシーの設定

Webサーバへのメンテナンス用アクセス許可ルール

名前:AllowManagement 以下の図の流れで作成します。

kaji-paloalto-32

kaji-paloalto-33

kaji-paloalto-34

kaji-paloalto-35

kaji-paloalto-36

WebサーバへのWebアクセス用許可ルール

同じように作成します。

  • 名前:AllowWebAccess
  • 送信元ゾーン:Untrust
  • 送信元アドレス:any
  • 宛先ゾーン:Trust
  • 宛先アドレス:any
  • アプリケーション:web-browsing

作成したら、右上のCommitで保存・設定反映を忘れないで行いましょう。

完了後の通信確認

Paloalto FirewallでNATされるため、Elastic IPアドレスを設定してないWebサーバへアクセスできるようになります。 通信できない場合は、Webサーバ側に設定したのSecurity GroupでSSHが空いていることを確認しましょう。

% ssh -i <ec2のキーペアー> ec2-user@<unstust eth1/1 interface Elastic IP>
The authenticity of host 'xxx.xxx.152.24 (xxx.xxx.152.24)' can't be established.
RSA key fingerprint is 40:d3:e1:b2:f5:da:60:8b:81:6b:25:d4:cc:41:fd:0f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx.xxx.152.24' (RSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
[ec2-user@ip-10-0-1-237 ~]$
[ec2-user@ip-10-0-1-237 ~]$

WebサーバのEC2でApacheを起動し通信可能なことを確認

% curl -v http://<unstust eth1/1 interface Elastic IP>
* Rebuilt URL to: http://xxx.xxx.152.24/
*   Trying xxx.xxx.152.24...
* Connected to xxx.xxx.152.24 (xxx.xxx.152.24) port 80 (#0)
> GET / HTTP/1.1
> Host: xxx.xxx.152.24
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< Date: Sun, 20 Sep 2015 07:10:09 GMT
< Server: Apache/2.2.31 (Amazon)
< Accept-Ranges: bytes
< Content-Length: 3839
< Connection: close
< Content-Type: text/html; charset=UTF-8
<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>Test Page for the Apache HTTP Server on Amazon Linux AMI</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <style type="text/css">
省略

ダイナミックアドレスグループ

PaloAltoは、Webサーバーの静的IPアドレスを入力する代わりに、動的なアドレスグループを使用できます。

ダイナミックアドレスグループを使用すると、サブネット内に追加のWebサーバの起動時にポリシーを更新する必要がないように、自動的に変化に適応するポリシーを作成することができます。

EC2インスタンスを保護するための動的アドレスグループを作成します。

IAMユーザを作成

PaloAlto用にIAMユーザを作成し、情報が記入されたファイルをダウンロードします。

その後ポリシーに「AmazonEC2ReadOnlyAccess」を割り当てます。

詳細な手順は文末に貼りましたので参照ください。

VM情報ソースで上記ユーザを登録

上記で作成した上記ユーザをPaloaltoへ登録し、AWSの情報を取得できるように設定します。

ただ、マニュアルと同じように設定しているにも関わらず、正常な状態にならず、かなりハマりました。

私の場合は、以下のエラーで正常な「緑」になりませんでした。 Paloaltoのエラーログを調べたら、以下のメッセージが出ていて、DNSで名前解決できていなかったのです。

vm-info-source Paloalto-VPC(vsys1): failed to connected to ec2.ap-northeast-1.amazonaws.com, status Couldn't resolve host 'ec2.ap-northeast-1.amazonaws.com'

DNS設定を確認

Device > Setup > Service > DNS 設定空っぽでした。 VPC内のEC2の/etc/resolv.confを確認し、DNSサーバのアドレスを確認し設定。

kaji-paloalto-42-VMDNS

設定後、忘れずにコミットして、さきほどの画面をが緑に変わったことを確認。

kaji-paloalto-43-VMInfomationSource

Webタグがついたインスタンスでダイナミックアドレスグループを作成

ダイナミックアドレスグループを作成

kaji-paloalto-44-DynamicAddress

kaji-paloalto-45-DynamicAddress

ちなみにWeb名前タグがあるアドレスグループも作成するとこんな感じです。すごいですね。

kaji-paloalto-46-DynamicAddress

kaji-paloalto-47-DynamicAddress

ダイナミックアドレスグループを利用したWebサーバから外部への通信許可ポリシーを作成

同じように作成します。

  • 名前:WebServer2Extrenal
  • 送信元ゾーン:Trust
  • 送信元アドレス:WebServer
  • 宛先ゾーン:Untrust
  • 宛先アドレス:any
  • アプリケーション:any

kaji-paloalto-52-DynamicAddress-Use-Policy

あと、「interzone-default」を編集して内部ゾーンの通信ログが出力されるようpolicyの修正を行います。

kaji-paloalto-55-interzone-default

作成したら、右上のCommitで保存・設定反映を忘れないで行いましょう。

ここで、Webサーバ側で、yum upateを行います。

Monitor > ログ > トラフィックで、yum updateした通信がログに残ります。

通常のファイヤーウォールだと、http/httpsと表示されますが、yumで通信したことがログに残ります。

kaji-paloalto-57-trafficlog

まとめ

PaloaltoのファイアーウォールはAWSのリソース情報を取得しポリシーが構築できる面白ファイアーウォールですね。 他にも、ユーザ識別でActive Directoryと連携しIPアドレスとユーザ名を自動マッピングしてくれる機能や、AWS上でのHA機能も可能なので深掘りしていきたいと思います。

ダイナミックアドレスグループでIAMでの連携が上手くいかず、無償期間のほとんどをその調査に使ってしまったので、検証用ライセンスを誰か提供してくれないかなぁと思っています。

参考元

[ESP for AWS] 次世代ファイアウォール VM-Seriesのご紹介 (パロアルトネットワークス)

Paloalto製品詳細

Set Up the VM-Series Firewall in AWS

List of Attributes Monitored on the AWS VPC

IAM ユーザ作成

PaloAlto用にIAMユーザを作成します。 kaji-paloalto-61

kaji-paloalto-62

情報が記入されたcsvファイルをダウンロードします。

kaji-paloalto-63

その後IAM PolicyにAmazonEC2ReadOnlyAccessを割り当てます。

kaji-paloalto-64

kaji-paloalto-65

kaji-paloalto-66