Sophos FirewallをESXiからProxmoxに移行

この記事で実現すること

これまで使ってきたESXiからいよいよProxmoxに移行します。私の環境で最も大切なVMはSophos Firewallですが、移行の過程、チューニングした項目を記録に残します。

Proxmox VEについて

前回、Proxmoxの紹介をしてから2年が経過しました。基本的なProxmoxのセットアップは以前からほとんど変わっていませんので以下のものを参照してください。vmの作り方についてもほぼ変わっていません。今の最新はv9.1.9です。

Sophos Firewallについて

Sophos Firewallの最新はv22.0.1 MR-1-Build490です。非常に安定しており、SSl/TLSインスペクションで脅威の対策をすることにおいてはホームユーザーとしては唯一無二のプロダクトだと考えてます。

移行のきっかけ

ESXi vSphere hypervisorですが、すでに個人向けにはパッチが提供されなくなったようです。昨年の4月から定期的に状況を確認していましたが、vmxnet3の脆弱性が発表されてからも動きがないので、いよいよProxmoxに移行することとしました。移行するならばESXiでできなかったクラスタ化にも取り組んでみたいと考えてます。

Sophosの移行方法

ESXiのストレージをproxmoxでマウントしてマイグレーションするという方法が多くのサイトで説明されています。ただし、ESXi稼働時代にはVMware ToolsがSophosに自動でインストールされていました。Ubuntuであればパッケージをremoveしてから移行ということも考えられますが、この辺りの影響がFirewallという目的を鑑みると一抹の不安があり、ちょっと遠回りですが、正攻法でSophosの機能を使って移行することにしました。

私の自宅のネットワーク構成は以下の通りです。現状に影響を与えず、セットアップを行なっていきます。

Sophos Port Zone / 用途 Proxmox NIC Proxmox Bridge VLAN Tag 備考
Port1 LAN / Default nic0 vmbr0 - 管理LAN / Default VLAN
Port2 WAN nic3 vmbr3 - au HGW側
Port3 Family nic1 vmbr1 - 家族用
Port4 Server nic2 vmbr2 - Server / NAS
Port5 Guest nic1 vmbr1 210 Guest
Port6 Edge nic1 vmbr1 130 Printer IoT

VLANが6つあります。NICはこれまで同様、X710の4Portを利用しており、FamilyにGuestとEdge(プリンターや無線TVなど)がタグ付きで流れてきます。
最初のセットアップはproxmoxのコンソールで実施できます。その際には、最低でもNICが2つなければセットアップができません。新規にFirewallをセットアップし、VLANを新旧で揃え、旧Firewallのバックアップから新Firewallへ戻すというのが計画になります。Sophos Firewall VM には 6 本の VirtIO NIC を割り当て、ESXi 時代の Port1〜Port6 の役割に合わせて Proxmox 側の bridge / VLAN tag を対応させます。

Proxmoxの設定

このように、nic0-nic3まではvmbr0ーvmbr3と相対するブリッジが存在しますのでセグメント毎に作成します。また、タグ付きでスイッチから流れてくるものはタグの指定をしておきます。

私は事前に旧FirewallのPort1〜Port6までがどのVLANかを事前に確認し、メモをとっておきました。これがズレると後で違うセグメントに異なるネットワークアドレスのパケットが流れたりして家中が大混乱になりそうと思ったからです。でも実はここまで厳格にやらなくても後で新旧で対応を変えられることがわかったのでここまでは不要だったかもしれません。

Sophos Network on ESXi Segment Proxmox Bgidge Tag mac Address
Port1 LAN vmbr0 BC:24:11:xx:xx:93
Port2 WAN vmbr3 BC:24:11:xx:xx:7D
Port3 Family vmbr 1 BC:24:11:xx:xx:8F
Port4 Server vmbr2 BC:24:11:xx:xx:A3
Port5 Guest vmbr 1 210 BC:24:11:xx:xx:25
Port6 Edge vmbr 1 130 BC:24:11:xx:xx:D8

Sophos Firewallのインストール

このブログで何度もSophosについては書いていますし、セットアップ自体は昔から変わっていません。今回の留意事項だけ記載しておきます。

Sophosのセットアップは今も変わらずUEFIには対応しておらず、SeaBIOSを選択してセットアップします。インストールはproxmox上のターミナルからまずは最低限のLAN、WAN(DHCP)の指定をし、ネットワークアドレスの設定など従来から変わらずTerminalからのセットアップ開始になります。その後モジュールがインストールされ、GUIでのセットアップに移行します。この時に一度リブートすることになりますが、旧環境と同じ環境でセットアップしたいため、LANについてはテスト用の専用VLANを作成し、そこにWindows端末を配置してセットアップをします。WANにはそのまま接続できるようにしてセットアップ中にInternetに接続できる状態にしておきます。
その他のVLANは全て作成しますが、Proxmox上で切断状態にしてパケットが流れないようにしておきます。

再起動後GUIのセットアップ

以下の画面のように進めていきます。移行用VLAN上に配置した端末からFirewallに接続してID・パスワードを入力して進みましたが、後で見直したらここで元の環境から環境を戻せそうです。セットアップ中は全然気づきませんでした。ちょっと遠回りしてしまいました。

セキュアストレージマスターキーは後でレストアしてしまうので仮のもので構いません。慎重な方は現行で設定しているものを入力してください。

ファイアウォールのライセンスは現在使っているIDをそのまま登録します。

そしてセットアップ完了後、admin/今回指定したパスワードでログインします。

新Firewallのネットワークの詳細画面で実際のMACアドレスが一致しているか確認します。

さて、私は遠回りしましたが、以下でバックアップからレストアします。

その後のハマりどころ

私は二要素認証を設定していましたが、戻した後のAdminのパスワードは新たにセットアップしたパスワードになっています。そして二要素認証をパスワードの後ろに6文字を続けて入力するのですが、この2要素認証は古いものを求められます。
私はここで散々詰まってしまいました。。。

検証

検証とはいっても、普段のルールが戻っているかどうかの確認です。現状と同じIPアドレスを保有しているので移行環境にあるLAN、DHCPで設定されたWAN以外はIPアドレスが重複してしまうので、まだこの段階ではProxmox上では切断したままです。インターネットにも無事接続できるか、仮のTest VLANに配置した端末からアクセスを行います。それが終わったら、いよいよESXi側のSophosを停止し、新Sophosも停止し、各VLANを接続した後、再度新Firewallを起動します。数年に亘り、大きなトラブルもなく稼働してくれたESXiに感謝です。

確認事項

Sophosのサイトには、Proxmoxでのインストールに関するドキュメントがあります。

また、KVMに関するページでは以下の記載があります。

”Proxmox 上で Sophos Firewall VM を実行するには、 Proxmox の VM 設定で「QEMU ゲストエージェントを使用する」をオフにする必要があります。”

Proxmox のパラメータ

VMの構成で気をつけるとしたら、ネットデバイスの設定で、Proxmox側のファイアウォールをオフにすることでしょうか。MACアドレスのなりすましや、L3レベルのフィルタ機能ですが、Sophosで十分管理できるので外して良いです。後はメモリを固定して使いたいので最初のVMの設定画面にも載せていますが、Balooningデバイスのチェックは外しておきます。

Proxmoxのチューニング

これは私の利用しているintel X710に限った話かもしれませんが、LAN内に速度差のある端末やAPがある場合は、フローコントロールの活用を検討してください。一般的なネットワークスイッチはフローコントロールがオンになっています。またバースト的な大量データの送受信のために、以下の項目は設定すべきでしょうか。特にRing Bufferは効果が大きいと思いますが環境によって変わるでしょうから、2048〜6144あたりで調整されることをお勧めします。

1. X710 Ring Buffer 拡張

確認コマンド。

1
ethtool -g nic0

初期値は RX/TX ともに 512。

X710 の最大値は RX/TX ともに 8160。

適用値。

1
2
3
4
ethtool -G nic0 rx 4096 tx 4096
ethtool -G nic1 rx 4096 tx 4096
ethtool -G nic2 rx 4096 tx 4096
ethtool -G nic3 rx 4096 tx 4096

永続化例。永続化は /etc/network/interfaces

1
post-up /usr/sbin/ethtool -G $IFACE rx 4096 tx 4096 || true

理由

  • 高速通信時の micro burst 耐性向上
  • NIC ring overflow による drop / retry 抑制
  • 最大値 8160 ではなく 4096 にすることで、遅延増加を抑えつつバースト耐性を確保

2. ntuple filters 無効化

確認コマンド。

1
ethtool -k nic0 | grep ntuple

初期状態。

1
ntuple-filters: on

適用。

1
2
3
4
ethtool -K nic0 ntuple off
ethtool -K nic1 ntuple off
ethtool -K nic2 ntuple off
ethtool -K nic3 ntuple off

永続化例。

1
post-up /usr/sbin/ethtool -K $IFACE ntuple off || true

理由

X710 の Flow Director / ntuple により、特定 flow が意図せず特定 queue に偏る可能性がある。

仮想化・Firewall VM・VPN系の通信では、NIC側の自動 steering より Linux / RSS 側に任せた方が安定することがある。

3. Flow Control

(環境に応じて) RX/TX ともに ON。※LAN内で端末の速度差がある場合に吸収してくれます。

確認。

1
ethtool -a nic1

確認結果例。

1
2
3
4
Pause parameters for nic1:
Autonegotiate: off
RX: on
TX: on

永続化済み設定。

1
post-up /usr/sbin/ethtool -A $IFACE tx on rx on 2> /dev/null

4. offload 設定

以下は基本的に ON 維持。

  • rx-checksumming
  • tx-checksumming
  • tcp-segmentation-offload / TSO
  • generic-segmentation-offload / GSO
  • generic-receive-offload / GRO
  • rx-vlan-offload
  • tx-vlan-offload
  • receive-hashing

Sophos VM 側設定

推奨設定

1
2
3
4
5
6
CPU: 4 core
NIC: VirtIO
Multiqueue: 4
SCSI: VirtIO SCSI single
Disk IO thread: ON
Proxmox Firewall: OFF

Proxmox Firewall

Sophos VM の各 NIC では Proxmox Firewall を OFF。

確認箇所。

1
2
3
4
VM
→ Hardware
→ Network Device
→ Firewall OFF

Firewall VM の前段で Proxmox Firewall が挟まると、切り分けが複雑化するため OFF

まとめ

Proxmoxもこういったネットワークチューニング次第で十分に速度を出せます。

AMD Ryzen 9 7900 (12C/24T)とAMD Ryzen 5 5600G (6C/12T)とで計測しましたが、大きく値に変化はありませんので、CPU性能よりは省電力を目指す方が良さそうです。