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 | ethtool -G nic0 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 | ethtool -K nic0 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 | Pause parameters for nic1: |
永続化済み設定。
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 | CPU: 4 core |
Proxmox Firewall
Sophos VM の各 NIC では Proxmox Firewall を OFF。
確認箇所。
1 | VM |
Firewall VM の前段で Proxmox Firewall が挟まると、切り分けが複雑化するため OFF
まとめ
Proxmoxもこういったネットワークチューニング次第で十分に速度を出せます。
AMD Ryzen 9 7900 (12C/24T)とAMD Ryzen 5 5600G (6C/12T)とで計測しましたが、大きく値に変化はありませんので、CPU性能よりは省電力を目指す方が良さそうです。