Sophos FirewallでIPv6の設定を行う(後半)

この記事で実現すること

Sophos Firewall配下のクライアントにIPv6アドレスを配布し、IPv6インターネットに接続します。また、SSL/TLSインスペクションを設定します。

XGのIPv6

IPv6は一般的に内部のホストに対してもパブリックIPアドレスを割り当てます。IPv6独自の工夫として、端末を特定されないために一時アドレスを割り当てます。一時アドレスは端末再起動時に変更され、外部からホストの特定を防ぐ目的があります。IPv4の枯渇が課題だったがために、到達性と安全面を考慮した設計と推察されます。

一方、Sophos FirewallのIPv6の考え方としてはNATを前提にします。内部ホストから外部に出ていくものはSNAT(Source NAT)、公開するホストはDNAT(Destination NAT)で外部から内部ホストに転送するという原則があります。LAN側のIPv6にはプライベートIPの考え方に近い、ユニークローカルアドレス(ULA)を用います。

ULAは、プライベート環境で自由に割り当てして良いというわけではなく、なるべく世界の中で一意にすべきという考え方です。企業向けとしては合併などがあった場合に重複しない事を前提としています。192.168.1.0/24のように、誰でも使って良いアドレスとは異なるのがIPv6のULAです。このULAは一定のルールに従い機械的に生成する必要があります。

XGのIPv6を構成するまで

以下の流れでXGのIPv6をセットアップします。

  1. ULAを生成
  2. XGのLAN側のIPアドレスにULAを設定
  3. LAN側ホストにIPv6を割り当てるためのDHCPv6、ルーターアドバタイズメント(RA)の設定
  4. Firewallルールの設定
  5. 固定IPv6アドレスの登録
  6. SSL/TLSインスペクションの設定

ULAを生成する

ULAの生成にはネットワークカードのMACアドレスが必要です。仮想環境で構築している方は仮想MACアドレスではなく、可能な限り衝突を避けるべく、物理マシンのMACアドレスを使ってください。

物理マシンに直接Firewallをインストールしている方は、Sophos Firewallの左ペインメニューのネットワークからインターフェースの”Port1(LAN)”を選択し、詳細設定をクリックするとMACアドレスが確認出来ます。

仮想環境の場合、ESXiを例に挙げると、以下のようにLAN側物理MACアドレス(当方の環境では、vmnic1)にMACアドレスがあります。

ULAの生成は以下の通り過去記事にありますので、上記MACアドレスをコピーし、過去記事「IPv6のUnique Local Addressを生成する」を参考にULAを求めて下さい。
結果として、以下のような情報が得られるので、First IPv6 Addressのfdから始まるULAを控えてください。

1
First IPv6 Address-> fd00:beef:cafe::1/64

LAN側にULAを設定

XGの左ペインメニューのネットワークインターフェースにある、IPv6設定のチェックボックスをチェックします。次に、IPv6 プレフィックスの項目に生成したULAを貼り付け、/64の部分を削除してください。画面を見てもらえると解りますが、IPv6のサブネット/64は画面上で固定表示されています。

このアドレス体系は以下の通りです。

  1. IPv6の体系は128ビットで、ユニキャストアドレスは1つのセグメントが64ビットとなります。XGでも64ビットで扱います。
  2. 48ビットのULAに16ビットの内部サブネット0000を加え、64ビットプレフィックスを定義しています。別のサブネットにするのであれば、ここを0001などとしていきます[1]
  3. IPv6における、デフォルトルーターは、リンクローカルアドレスの1とするのが一般的です(fe00::1)。これに倣い、XG自身のIPv6アドレスの後半64ビットのインターフェース識別子は0000:0000:0000:0001としています。
  4. ::は、IPv6アドレスの0000が続く部分を省略できるものです。(例)fd00:beef:cafe:0000:0000:0000:0000:0001/64の連続する0部分を省略し、fd00:beef:cafe::1/64としています。

保存ボタンをクリックし、LAN側のインタフェースにIPv6を割り当てます。

RAおよびDHCPv6の設定

DHCPv6の設定

クライアントにIPv6のアドレスを配布します。SSL/TLSインスペクションが行えるクライアントは固定IP範囲を明示的に割り当てます。XGの左ペインメニューからネットワークDHCPと進み、サーバーの”追加”ボタンをクリックします。次にIPv6のタブをクリックし、以下の画面の通り入力していきます。

  • DHCPの名前は、IPv6のDHCPと分かるよう命名してください。
  • インターフェースは"Port1"を選択してください。すでに割り当てられているFirewallのIPv6アドレスが表示されます。
  • ダイナミックIPリースは、自動割り当てするIPv6アドレスの範囲を入力します。IPv4は10進数で表示する事が多いですが、IPv6は16進で表示する事になるので、ログを見た時に解りやすいIPアドレス体系となるような構成にされる事をお勧めします。
  • スタティックIPのDUIDマッピングは後ほど入力します。一旦は空のままにしておいてください。
  • DNSサーバーは、FirewallのLAN側IPv6アドレスを指定して下さい。内部ホストの名前解決のために必要です。

RAの設定

クライアントにデフォルトゲートウェイの通知を行うため、RAの設定を行います。DHCPで明示的にIPv6アドレスを指定しないクライアントはRAにより自身のIPv6アドレスを自動生成しつつ、ゲートウェイの情報を受け取ります。RAでは、マネージドフラグ(Mフラグ)、アザーフラグ(Oフラグ)という言葉が登場します。

  • Mフラグ DHCPv6によって明示的に割り当てたステートフルなIPv6アドレス(ON)にする(※IPv4のDHCPと同じ)か、RAによってPrefixが通知され、クライアントは自分のMACアドレスから生成するステートレスIPアドレスにする(OFF)かを決めます
  • Oフラグ IPアドレス以外の情報をDHCPv6サーバやRAから取得する(ON)、取得しない(OFF)

IPv6において最近のトレンドとしては、IPv6の取得にDHCPv6を使わずRAから構成する(Mフラグ=OFF、Oフラグ=ON)が定番です。長いIPv6アドレスの管理は大変なので、この設定が一番楽な管理方法です。しかし、私のXGに関する記事ではSSL/TLSインスペクションを最も重要視しています。クライアントでIPv6アドレスが生成されると、FirewallでCA証明書が登録されている端末か否かの判断が行えません。よってMフラグ=ONとし、FirewallがIPv6アドレスを管理する、ステートフルなIPv6アドレスとする必要があります。OフラグがOFFの場合はDNSの情報は手動設定であり(但しサーバー、クライアント共にRDNSSに対応していれば可能)、DHCPv6は無用という解釈です。

Sophos Firewallでの結論としては、ステートフルなDHCPv6で全てを管理するため、Mフラグ=ON、Oフラグ=ONとなります。やや管理者寄りの理論です[2]。また、IPv6では上述した通り、一時IPv6アドレスというものが存在します(XG上では自律)。これを認めると、クライアントが再起動の度にIPアドレスが変わり、SSL/TLSインスペクションを迂回されてしまいますからこの一時アドレスの設定もOFFにします。XGの左ペインメニューのネットワークから、IPv6ルーターアドバタイズを選択し、”追加”ボタンをクリックし、以下の図のように登録していきます。

  • インターフェースは、"Port1"を選択します
  • マネージドフラグにチェックします
  • アザーフラグにチェックします
  • デフォルトゲートウェイにチェックします
  • アドバタイズ設定のプレフィックスプレフィックスには、今回作成した、ULA(例)`fd00.beef.cafe::`を入力します。また、一時アドレスは使わないので自律のチェックを外します
  • 保存をクリックし、設定を完了させます

この段階でクライアントのIPを取り直すと、IPv6に関してはULAが1つだけ割り振られているはずです。

ファイアウォールルール設定

ここまでの設定で、クライアントはIPv6アドレスが割り振られています。インターネットにIPv6で接続するためには、Firewallルールの設定が必要となります。XGの左ペインメニューのルールとポリシーで”IPv6”をクリックします。

ファイアウォールルールの追加

ファイアウォールルールの追加から新しいファイアウォールルールをクリックします。

ここでの設定内容は、「XG Firewall v18のルールを作成する」でIPv4について設定した内容と変わりません。”To Internet”というルールを作りましたが、同じ内容になります。

  • ルール名はここでは”To_Internet_IPv6”とします。
  • 送信元ゾーンには、”LAN”を設定します。VPNを使う方は”VPN”も加えてください。宛先ゾーンは”WAN”を指定します。
  • IPv4でもリンクNATは使いませんでしたが、IPv6においても利用しません。

セキュリティの”Webフィルタリング”をクリックし、詳細メニューをオープンします。

  • Webポリシーは”Default Policy”を選択します(任意)
  • “HTTPおよび復号化したHTTPSをスキャン”をチェックします
  • “FTPのマルウェアをスキャン”をチェックします
  • QUICプロトコルのブロックは任意選択です
    Googleのサービスで利用されています。私はチェックしています。Google自体は問題ないですがそのプロトコルを利用した悪質なサイトがFirewallを回避するリスクを減らすという意味で選択しています
  • その他のセキュリティ機能でアプリケーションコントロールを選択します
    私は”Block very high risk(Risk Level 5) apps”を選択しています
  • IPSは”lantowan_general”を選択します
  • 保存ボタンをクリックします

NATルールの設定

ルールとポリシーNATルールから"IPv6"をクリックします。ここでは、既にIPv6の自動設定された情報が"Default SNAT IPv6"という名前で登録されています。ルールを開いて、ルールのステータスのトグルスイッチをOnにしてください。最後に"保存"をクリックしてください。この段階ではSSL/TLSインスペクションの設定は出来ていませんが、IPv6で接続可能な状態になっています。

テストのために、ipv6.google.comが正しく表示出来るか確認してください。

固定IPアドレスの登録

端末にルート証明書を導入できる端末(Windows、macOS、Linux、iOS)に対してSSL/TLSインスペクションを行いますので、DHCPv6では、該当端末が常に固定のIPv6アドレスを持つための設定を行います。XGの左ペインのネットワークDHCPから、”IPv6リース”の状況をみると、実際にIPv6のアドレスが割り当てられている一覧が確認できます。ここの”DUID”が端末固有情報であるため、この値を控えて、DHCPv6の設定にIPv6とDUIDのペアを登録していく事になります。ここでは、DUIDの値をメモしてください。残念ながら以下の通りDUIDの文字列が長すぎて、表記が見切れます。マウスをポイントしてポップアップされたDUIDをメモする必要があります。

再び、DHCPの設定画面で、IPv6 DHCP Serverを選択します。以下のように、スタティックIPのDUIDマッピングの項目にDUIDとIPv6のセットを登録してください。

SSLインスペクションでは、IPアドレスの範囲を明確に設定し、IoTなどSSL/TLSインスペクション対象外の端末が含まれないように注意してください。

SSL/TLSインスペクションの設定

IPv6のSSL/TLSインスペクションの設定を行います。まずは、IPv4で対応した時と同じように、SSL/TLSインスペクションの対象範囲のIPホストを登録します。XGの左ペインメニューのホストとサービスから、IPホストのタブで、追加ボタンをクリックします。

上記の通り、SSL/TLSインスペクションのためのIPv6の範囲を”CA_Client_IPv6”として登録します。16進数のアドレス表記ですが、ここでもIPv4のアドレス体系に合わせておくと、ログを確認した時の視認性が上がります。続いて、XGの左ペインメニューのルールとポリシーからSSL/TLSインスペクションルールに進み、”IPv6”をクリックします。「XG Firewall v18のSSL/TLSインスペクションの設定」で、このSSL/TLSインスペクションルールを一度作成しています。ここにIPv6の設定を加える事になります。

上記のように、送信元ネットワークとデバイスに、今回作成した、IPv6のホスト群である、”CA_Client_IPv6”を選択して追加します。

これでIPv6に関する設定は完了です。IPv6についても、SSL/TLSインスペクションの対象となり、IPSなど多くのコンテンツフィルタが可能となりました。一度IPv4でXGのルート証明書を端末にインストールしてあれば、再度インストールする必要はありません。SSL/TLSインスペクションのための端末へのインストールについては、「XG Firewall v18のSSL/TLSインスペクションの設定」を参照してください。

動作確認

IPv6サイトをブラウザ等で閲覧後、XGのログのログビューアを開き、プルダウンから、SSL/TLSインスペクションを選択します。

上記の通り、同じホストでもIPv4とIPv6の通信が混在している事、またSSL/TLSインスペクションの対象/対象外についてもログの内容を見て確認できます。

[1]
ULAの48ビットに対するネットワークアドレスとして(例)fd00:beef:cafe:0000を使うため、業務上実際に使う64ビットプリフィックスは(例)fd00:beef:cafe:0001::/64から開始するのが一般的です。今回はホームユーザー向けの一例として出来るだけ簡素化する事を目的とし、短い文字列で済むようにサブネットに0000を設定にしています。そういう私も自分の環境では、Prefixの後半16ビットは0001以降の数字を使っています。

[2]
DHCPv6とRAの戦いというものがあって、RA派は合理化を目指す方向です。ネットワーク管理者がIPアドレスの管理をすべきでサーバー管理者がやるべきでないという論調です。DHCPv6派はクライアントが勝手にアドレスを決めるのは困るという理論です。Sophosには頑張ってもらって、もう少し簡単に証明書が入っている端末を区別できるように期待したいところです。