次世代FirewallをHAでガッチガチに・前編

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

サーバーワークス大阪オフィスの久保です。

そういえば半年前にこの記事の前フリを書いていた気がするのですが、続編を書かないまま時の流れに身を委ねて今日に至ります。このままでは「ああ、あいつ結局本採用されんかったんやな」と言われそうなので、このあたりで生存をアピールしておきますよ。

とは言うものの、この半年の間にDirectory ServiceではMicrosoft ADがリリースされたりと、この記事を書き始めた頃とはかなり状況が変わってしまいました。ログ収集ツールの方も久保が寝かせている間にお借りした評価用ライセンスが期限切れになってしまいました…。どんだけ記事寝かせとんねん。ちなみに言うと、所属まで営業から技術に変わってしまいました。時の流れについていけてない…。

ということで、今回はPalo Altoに特化した記事にしてしまいます。タイトルが前回と違ってるんですが、まあ細かいことはいいじゃない。

おさらい

さて、ここでPaloAltoだ次世代Firewallだ、と言っていますが、IPアドレスとプロトコルやポート番号といったレイヤ4までのシグネチャを元に通信を制御する従来型ファイアウォールに対して、アプリケーションの中身まで見て制御することが出来るのが次世代Firewallの大きな特徴です(例えば、"HTTPSを許可/拒否"ではなく"Gmailは許可するけどGoogle Driveは拒否"といった制御ができる)。PaloAltoのPAシリーズ製品は、次世代Firewallの先駆け的な存在です。私もオンプレ時代に涙が出るほど構築しました。

構成

構成はこんな感じです。何ともオンプレ環境を彷彿とさせる構成図ですね。お前らしい、とか言わないの。subnet-externalがいわゆるPublic Subnet(Internet Gatewayへの経路を持っている)です。

diag

ポイントはサブネットは4つ

  • データプレーン(External/Internal)で2つ
  • 管理兼HA用(Helloパケット交換用)とHA用(アクティブセッション同期用)で2つ

作る必要があるという点です。

構築してみよう

Subnetの作成

上記の通り External・Internal・MGT/HA1・HA2の4サブネットを作成します。サブネットの大きさ(マスク長)についてはご自由に。

HA用のIAMロールの作成

Palo AltoのHA機能はENIの付け替えによって実現しています。このため、ENIの付け替えが出来るIAMロールをインスタンスに付与しておく必要があります。詳細はもう少し詰める方が良いと思いますが、最低限以下のようなポリシーを作ってロールにアタッチしておきます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1456474372000",
            "Effect": "Allow",
            "Action": [
                "ec2:AttachNetworkInterface",
                "ec2:DescribeInstances",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DetachNetworkInterface"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

インスタンスの起動

インスタンスの起動はAWS MarketPlaceから行います。最低限の機能しか使わないので、"VM-Series Next-Generation Firewall Bundle 1"を選択します。”Bundle 2”との違いはURLFilteringやWildFire(クラウド型Sandbox)の有無などです。起動の際には先程作ったIAMロールの割当をお忘れなく。御存知の通りEC2インスタンスへのIAMロールの割当は、インスタンスの起動時にしか出来ません。特に時間課金ライセンスのインスタンスを作った直後にロールの付け忘れに気づいた時の悲しさは格別です。

今回は冗長構成なので、インスタンスは2個起動しましょうね。

palo01

起動後にやること

インスタンスを起動したら以下の設定を行います。

Active/Passive(まだ決まっていないが)に対して行う作業

  1. 各インスタンスにEIPを付与する

    • 厳密には固定IPである必要はありませんが、管理IPが起動の度に変わるのは面倒ですので私はEIP派です。レガシー脳ですね。
  2. インスタンスにSSHでログインし、adminユーザのパスワードを変更する

    • インスタンス起動直後は管理ユーザ(admin)のログイン認証は公開鍵方式です。管理コンソールへのログインにはパスワードが必要なので、パスワードを設定しましょう。
    • 変更のコマンドは configure モードから "set mgt-config user admin password" です。
  3. マネジメントコンソールからインスタンスをシャットダウンする

Active側に対して行う作業

  1. ENIをさらに三個付与する

    • 用途はデータプレーン x2とHA(アクティブセッション同期)です。ENIを作成する際に、予め作っておいたサブネットにそれぞれ正しくアサインしましょう。

​Passive側に対して行う作業

  1. ENIをさらに一個付与する

    • 用途はHA(アクティブセッション同期)です。データプレーン用のインタフェースはActive側が握ることになるため、Passive側には作ってはいけません。

仕上げ

  1. インスタンスを起動する(二台とも)

上記の操作を実行し、管理コンソールにHTTPSでアクセス -> ログインすると、以下の様なダッシュボードが表示されます。

pa01

インタフェース設定

Network -> インターフェイスを選択すると、論理ポートの一覧とステータスが表示されます。これは既に構築済みの環境なのでethernet1/1-1/3がLinkUpしています(緑色表示)が、この時点では全てグレーアウトされているはずです。なお、MGT/HA1インタフェースについてはインタフェース一覧には表示されませんのでご注意下さい。

 pa1

データプレーン用インタフェースを設定します。この作業は上述の通りActive側のみに必要となります。詳細な方法は割愛しますが、概ね以下の手順です。

  1. インタフェースを選択(今回はethernet1/2がWAN側、1/3がLAN側とする)
  2. インタフェースをLayer3モードに設定する(通常のルーティングモード)
  3. インタフェースの所属するゾーンを設定する

    • ScreenOSに慣れ親しんだ私の様な人間は、"WAN側=Untrust、LAN側=Trust"と盲信していますので、今回はこれに従っています
    • つまりethernet1/2->Untrust、1/3->Trustとなります
  4. IPv4設定で、インタフェースアドレスをDHCP取得とする

これだけでは設定変更は保留されたままです。PaloAltoではCiscoのように設定を流したらすぐにメモリ上に反映(running-config)されるのではなく、あくまで保留状態になります。反映するには、必ず"commit"しましょう。ここまでの設定が正しければ、2つのインタフェースがLinkUPするはずです。

まとめ

さて、今回はデータプレーンの実装まで完了しました。HAを実装するための下準備ばかりですが、

  • 事前にインスタンスがENIのアタッチ/デタッチを行うための権限を持ったIAMロールをインスタンスに割り当てる
  • 2台構築する内、1台はインタフェースを合計4つ、もう1台は合計2つアタッチする

など、細かいところで忘れやすい段取りがありますのでご注意下さい。後編では、HAの設定と実際の動作をご紹介したいと思います。

それではごきげんよう。

AWS運用自動化サービス「Cloud Automator」