Sophos XG Firewall home edition を構築してみる

何番煎じになるかわからないですが、おうちNGFG(Next Generation Firewall)を作ってみようと思います。

## 構成（レシピ）
* Asus Vivo Mini (CPU Celeron 2 core, メモリー: 4GB)
* IO-data USB3.0対応 ETG5-US3 (※Vivo MiniにNICが一つしかなく、NICが2つ必要なため)
  * 事前に調べて、USBが対応しているようにだったで試してみます。<br /> 
  > "Some USB NICs may be visible and usable, some may not. "<br /> 
  Ref: [[sophos community] USB NIC on Sophos XG Home](https://community.sophos.com/sophos-xg-firewall/f/discussions/110066/usb-nic-on-sophos-xg-home
)
* USB メモリ (2つあれば、まかなえます。)
    * memtest86用
    * Sophos XG Firewall用
    * Proxmox VE用

## 事前確認
1. メモリの正常性を図るため、memtest86をおこなう。
2. Test selectionにて、13番目の項目(13 Hammer test)をオフにする。
    * memtest86の詳細はこちら：[PassMark Memtest86でメモリのエラーを確認する](https://www.sakura-pc.jp/pc/ct/mainte/memory/pm-memtest86.html)
3. 4周して問題なければ、正常に動作できる可能性が高い。

## 1回目のインストール
1. Sophos XG firewall のイメージを[ダウンロード](https://www.sophos.com/ja-jp/products/free-tools/sophos-xg-firewall-home-edition.aspx)する。
2. エラー防止のためRufusのDDモードでSophos XG firewall のイメージを焼きこむ。
3. 以下の通り、直接インストールした場合、USBのNICが認識できていないことが分かった。<br />
エラー内容: “Network Interfaces lower than minimum required: 2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/ba77795b-b927-c2f2-9617-8a09c472813d.png)

## 対策方法の調査
* 以下の話し合いによると、ハイパーバイザーproxmoxを使うとよいという記載がありました。

> I have the same setup on an old laptop (Asus) and their way that I did it was to install virtualization software, anyone software will do (except hyper-v) but I used Proxmox...

> You can then install the USB to Ethernet drivers into Proxmox and then install Sophos as a virtual machine...  Here is a link on USB to ethernet on Proxmox  (https://forum.proxmox.com/threads/use-additional-usb-nic-not-detected.40811/)

> I have a 500Mb internet connection and I notice zero slowdowns using Proxmox and Sophos as a VM. (laptop has 8gig RAM and I set Sophos to 6gig (Home Licence Limit)

https://community.sophos.com/sophos-xg-firewall/f/discussions/114678/setup-a-usb-to-network-interface-on-laptop-for-use-with-xg-firewall-home-edition

## 作戦の練り直し
* Proxmoxのインストール

https://blog.nishi.network/2020/08/12/proxmox-part1/

* Proxmoxにおいて、VMを作成
* Sophos XG firewallをVMにインストール

## 2回目のインストール
### Proxmoxのインストール 
1. Proxmoxのイメージをダウンロードする。
2. エラー防止のためRufusのDDモードでProxmox のイメージを焼きこむ。
3. Proxmoxをインストールする。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/c6f3285a-99a7-410c-6c67-2fdb52f8eb5c.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/d0b28844-0604-dec6-682b-6dce8d5d8ecf.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/9a09d757-7590-7fb7-05a0-68575bf33fa1.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/afeabef6-ffdd-a025-d274-0730eab5a90c.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/0a8fd11e-5054-40e0-87ef-12f9916dafd7.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/acce78a0-3c1e-1a9e-0b90-5675a19b733b.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/15fa4f25-8b50-fa0c-d977-e84c45d6276a.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/d29742e1-ad37-502b-1e80-12502a167f2e.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/e70ee35e-cc6e-153d-7f37-2672405d2a1f.png)

### ストレージの追加

https://www.diytechguru.com/2020/12/12/proxmox-lvm-directory/

```bash
root@proxmox01:~# wipefs -a /dev/mmcblk0
/dev/mmcblk0: 2 bytes were erased at offset 0x000001fe (dos): 55 aa
/dev/mmcblk0: calling ioctl to re-read partition table: Success
root@proxmox01:~# pvcreate /dev/mmcblk0
  Physical volume "/dev/mmcblk0" successfully created.
root@proxmox01:~# vgcreate vgrp /dev/mmcblk0
  Volume group "vgrp" successfully created
root@proxmox01:~# lvcreate -n lvol vgrp
  No command with matching syntax recognised.  Run 'lvcreate --help' for more information.
root@proxmox01:~# lvcreate -n lvol vgrp -L 128.0G
  Volume group "vgrp" has insufficient free space (30485 extents): 32768 required.
root@proxmox01:~# mkfs.ext4 /dev/vgrp/lvol
mke2fs 1.46.2 (28-Feb-2021)
The file /dev/vgrp/lvol does not exist and no size was specified.
root@proxmox01:~# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  pve    1   3   0 wz--n-  29.31g   3.62g
  vgrp   1   0   0 wz--n- 119.08g 119.08g
root@proxmox01:~# lvcreate -n lvol vgrp -L 119.0G
WARNING: LVM2_member signature detected on /dev/vgrp/lvol at offset 536. Wipe it? [y/n]: y
  Wiping LVM2_member signature on /dev/vgrp/lvol.
  Logical volume "lvol" created.
root@proxmox01:~# mkfs.ext4 /dev/vgrp/lvol
mke2fs 1.46.2 (28-Feb-2021)
Discarding device blocks: done
Creating filesystem with 31195136 4k blocks and 7798784 inodes
Filesystem UUID: a7b7ef6d-a943-49ec-b539-4f2ab11c743f
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

root@proxmox01:~# mkdir -p /mnt/lvol
root@proxmox01:~# mount /dev/vgrp/lvol /mnt/lvol
root@proxmox01:~# echo "/dev/vgrp/lvol /mnt/lvol ext4 defaults 0 2" >> /etc/fstab
```

* Webコンソールにおいて、Lvolのディレクトリを作成する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/cbb5f4bb-9693-16c8-c262-c785a18fb3b5.png)
* ディスク領域が増えたか確認する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/89f83601-b6eb-9d76-a142-e141fe3616d1.png)

-------
### Sophos XG firewall のVM作成
下記記事によると空のVMを作成後、Sophos XG firewallのKVMイメージをダウンロードすることで、Sophos XG firewall のVM作成ができる。

https://www.jhmelo.com/how-to-install-sophos-xg-in-proxmox-ve-for-lab-environment/

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/7pvgKc3WdEg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

1. 空のVMをWeb コンソール上で作成する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/66e3df62-1898-59ae-6467-8dafcef986ff.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/22a84a13-a672-bea5-a849-64209efbe97b.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/8ce77e8d-75ca-3bc9-8015-3d083ec89e23.png)
    * ※Storage は先ほど作った `lvol-dir` にする。FormatはRaw disk image にする。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/7f44d9a3-cdbb-08f4-af9c-e6405177679b.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/e4d6fd15-3aa6-1314-52cb-dce4254d5178.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/74cb8846-3e5f-3c78-0bcb-1705af6acf39.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/070df8e5-b4e8-10f8-02e4-ba962d5080bb.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/e302e735-6f1a-7dd9-3b3c-243e660b5e3a.png)
2. Hard diskを削除する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/c5c0cc69-920d-c601-5ead-e78044084979.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/58b7c387-9f4c-255e-45e7-2d1e5e34cdd4.png)
3. Nicを追加する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/c112cf8d-a5d9-a2f2-8aa0-37d9d7403bd0.png)
5. KVMのイメージをDonwloadする
    https://www.sophos.com/ja-jp/support/downloads/firewall-installers
    Download Virtual Installers: Firewall OS for KVM as VI-18.5.1_MR-1.KVM-326.zip
6. ディスクイメージをProxmoxに転送する。

    ```bash
    $ scp  ./* root@192.168.3.245:/var/lib/vz/template/qemu/
    root@192.168.abc.abc's password:
    AUXILIARY-DISK.qcow2                          100%   11MB  92.9MB/s   00:00
    PRIMARY-DISK.qcow2                            100%  448MB  59.8MB/s   00:07
    ```
7. 転送できたか確認する。
    
    ```bash
    root@proxmox01:~# ls -la /var/lib/vz/template/qemu
    total 469704
    drwxr-xr-x 2 root root      4096 Jan  1 02:11 .
    drwxr-xr-x 5 root root      4096 Jan  1 00:48 ..
    -rwxr-xr-x 1 root root  11206656 Jan  1 02:11 AUXILIARY-DISK.qcow2
    -rwxr-xr-x 1 root root 469762048 Jan  1 02:11 PRIMARY-DISK.qcow2
    ```
8. PRIMARY-DISK.qcow2 をインポートする。
    
    ```bash
    root@proxmox01:~# cd /var/lib/vz/template/qemu
    root@proxmox01:/var/lib/vz/template/qemu# qm importdisk 100 PRIMARY-DISK.qcow2 lvol-dir
    importing disk 'PRIMARY-DISK.qcow2' to VM 100 ...
    Formatting '/mnt/lvol/images/100/vm-100-disk-0.raw', fmt=raw size=17179869184 preallocation=off
    transferred 0.0 B of 16.0 GiB (0.00%)
    transferred 232.7 MiB of 16.0 GiB (1.42%)
    transferred 452.2 MiB of 16.0 GiB (2.76%)
    transferred 673.4 MiB of 16.0 GiB (4.11%)
    transferred 892.9 MiB of 16.0 GiB (5.45%)
    transferred 1.1 GiB of 16.0 GiB (6.80%)
    transferred 1.3 GiB of 16.0 GiB (8.14%)
    ...
    transferred 15.8 GiB of 16.0 GiB (98.68%)
    transferred 16.0 GiB of 16.0 GiB (99.89%)
    transferred 16.0 GiB of 16.0 GiB (100.00%)
    transferred 16.0 GiB of 16.0 GiB (100.00%)
    Successfully imported disk as 'unused0:lvol-dir:100/vm-100-disk-0.raw'
    ```
9. AUXILIARY-DISK.qcow2 をインポートする。    

    ```bash
    root@proxmox01:/var/lib/vz/template/qemu# qm importdisk 100 AUXILIARY-DISK.qcow2 lvol-dir
    importing disk 'AUXILIARY-DISK.qcow2' to VM 100 ...
    Formatting '/mnt/lvol/images/100/vm-100-disk-1.raw', fmt=raw size=85899345920 preallocation=off
    transferred 0.0 B of 80.0 GiB (0.00%)
    transferred 1.3 GiB of 80.0 GiB (1.63%)
    ...
    transferred 79.4 GiB of 80.0 GiB (99.19%)
    transferred 80.0 GiB of 80.0 GiB (100.00%)
    transferred 80.0 GiB of 80.0 GiB (100.00%)
    Successfully imported disk as 'unused1:lvol-dir:100/vm-100-disk-1.raw'
    root@proxmox01:/var/lib/vz/template/qemu#
    ```
10. ディスクを編集して追加ボタンを押して、Hard Diskとして使用する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/cba957c0-9ee7-f632-f9ee-cb2dbeb44ce3.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/f7f03eb1-da4e-2119-3295-7707f498387e.png)
11. VMのオプション設定において、Scsi0(lvol-dir:100/vm-100-disk-0.raw)を有効にしたうえで、起動順番を変更する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/b4aef186-82a0-1c81-3ad3-ae2f9dca0240.png)

## ESETの除外設定
シェルを起動するとundefined(Code:1006)が発生することや、noVNCでVNC経由で接続できないことがあるのでESETのIP除外の設定を行う。

https://renew-server.net/proxmoxveshell-undefined/

1. ProxmoxVEのアドレスを追加する。
    * ESETの詳細設定 > WEBとメールのタブ > プロトコルフィルタリング > 対象外のIPアドレス > 編集を選択
2. ShellやVNCがWeb から見えることを確認する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/00e50d9d-c874-89bb-763e-2617747a1986.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/39d2d730-096f-b8c7-5146-7d027f745b37.png)

## あとがき
いろいろ試行錯誤した結果、このCeleronではVMとして動かすと固まるため、動かすことが難しいことが分かった。そのため、Lenovoのi5 8GBの小さめのコンピューターを調達し再構築を行った。

一通り上記の設定を行った後、USB NICが認識しなかったため、以下のコマンドを利用して、NICが認識するようにしました。

```bash
modprobe g_ether
```

https://qiita.com/chromabox/items/d4368ccebb0f8822ce74

その後、Proxmoxにおいて、以下のようにVMホスト側を設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/b94ce3a2-47ef-cdc6-f292-2adaabb7eb71.png)

VM側では以下のように設定する。
* net0: vmbr1
* net1: vmbr0 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291673/d6380bbe-b900-6d7c-9658-6d0b14e4a55b.png)

<< 設定編へ続く(仮) >>

https://qiita.com/sahya/items/005f3f72567a958c0afd