
仮想マシン操作フレームワーク
Mofosは、仮想マシンの作成、実行、管理を目的としたツールです。Libvirt/QEMU/KVMとPythonを利用しており、あらゆるLinuxディストリビューションと互換性があります。Qubes OS(https://www.qubes-os.org/)から強い影響を受けており、Mofosはその機能の多くを再現することを目指しています。
このツールはDebian上で、Debianベースの仮想マシンを使用して広範囲にテストされています。他のLinuxディストリビューションでも動作する見込みですが、追加の設定が必要になる場合があります。詳細は追って追加されます。
Mofosは、仮想マシンを安全に管理することに重点を置いたさまざまな機能を提供します。その内容は次のとおりです。
mofosマシンは、overlayfsを使用して結合された2つのディスクで構成されます。最初のディスクは下位レイヤーと呼ばれる読み取り専用のテンプレートディスクで、2番目のディスクは仮想マシンによって行われたすべての変更を保存します。このテンプレートディスクは複数の仮想マシン間で共有されます。その結果、新しい仮想マシンの作成には、変更データを保持するために既にパーティション分割された空のディスクのクローンを作成するだけで済みます。このアプローチにより、新しい仮想マシンを迅速に作成できる一方、テンプレートは独立して更新できます。テンプレートへの更新は、依存する仮想マシンが次回再起動したときに反映されます。
Linuxディストリビューションに応じて、Makefileを使用してdebパッケージを生成するか、ファイルを直接インストールできます。```
make deb
apt install ./mofos-VERSION.deb
`apt` インストール中に、さまざまな設定がプロンプト表示されます。通常はデフォルトのオプションを受け入れて問題ありません。注意が必要な唯一の設定は、mofos libvirt ネットワークで使用されるサブネットアドレスです(デフォルト: `192.168.90.0/24`)。
または
次の依存関係をインストールします:
- guestfs-tools
- libnotify-bin
- libvirt
- libvirt-clients
- libvirt-daemon
- make
- python3-click
- python3-click-completion
- python3-colorama
- python3-cryptography
- python3-dbus
- python3-jinja2
- python3-lxml
- python3-prettytable
- python3-pyroute2
- python3-tqdm
- qemu-system-common
- qemu-system-modules-spice
- socat
- spice-client-gtk
- sudo
- virtinst
- virt-install
- virtiofsd
- virt-manager
- virt-viewer```
make install_files
ディストリビューションによっては、/usr/lib/python3/dist-packages にコピーした Python ファイルが Python インタプリタによって検出されない場合があり、別の場所に配置する必要があります。たとえば、Fedora では、Python ファイルを /usr/lib/python3.11/site-packages にコピーする必要があります。
[!WARNING] 注意: Debian trixie 以降、
xpraはパッケージとして提供されなくなりました。カスタムリポジトリから手動でインストールする必要があります。詳細な手順は https://github.com/Xpra-org/xpra/wiki/Download#-for-debian-based-distributions を参照してください。
Mofos は QEMU/KVM システムセッションを使用するため、virsh コマンドが仮想マシンおよび関連リソースにアクセスできるように、環境変数 LIBVIRT_DEFAULT_URI を qemu:///system に設定します。```console
export LIBVIRT_DEFAULT_URI=qemu:///system
### セキュリティ上の考慮事項
QEMU/KVM システムセッションを使用すると、qemu インスタンスを専用ユーザー (`libvirt-qemu`) で実行し、各インスタンスに固有のセキュリティプロファイルを適用することで、ホストとゲスト仮想マシン間の分離が向上します。
ただし、デフォルトでは、通常のユーザーは `libvirtd` システムソケットとやり取りしてマシン、ネットワーク、その他のリソースを管理することはできません。アクセスするには、ユーザーは libvirt Unix グループのメンバーであるか、sudo を使用する必要があります。歴史的に、ローカル権限昇格の脆弱性は、libvirt グループのメンバーシップを悪用して root 権限を取得してきました。
これらのリスクを軽減するため、このリポジトリは、AppArmor を使用するシステム上の `libvirtd` プロセス向けに強化された AppArmor プロファイルを提供します。このプロファイルは、`libvirtd` がファイルを書き込める場所と実行できるプログラムを大幅に制限します。
さらに、`libvirt` グループのメンバーに許可される操作をより詳細に制御するための `polkit` ルールも含まれています。
AppArmor プロファイルは `deb` パッケージに含まれていますが、Makefile の `install_files` ターゲットではインストールされないため、別途インストールする必要があることに注意してください。
## Mofos の設定
Mofos が正しく機能するには、`$HOME/.config/mofos/config.toml` に配置された最小限の設定を含む構成ファイルが必要です。最小限の設定例は `/usr/share/mofos/config.minimal.toml` にあります。一方、より包括的な設定は `/usr/share/mofos/config.sample.toml` に文書化されています。
次のエラーは、構成ファイルが見つからなかったことを示しています:```
[-] Copy the sample configuration file from /usr/share/mofos/config.minimal.toml to ~/.config/mofos/config.toml
次のエラーは、現在のユーザーが libvirt グループのメンバーではないことを示しています:``` [-] libvirtError("authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'")
設定ファイルでカスタマイズする主な設定項目は次のとおりです:
- key (パス): 仮想マシンへのアクセスに使用する SSH 秘密鍵ファイルです。この目的のために専用の鍵を作成することをお勧めします。
- user (文字列): 仮想マシンへの SSH アクセスに使用するユーザー名です。
- root_password (ハッシュ値): 新しいテンプレートのインストール中に設定される、ハッシュ化された root パスワードです。
- root_ssh_pubkey (文字列): テンプレートのインストール中に root ユーザーのディレクトリにインストールされる公開 SSH キーです。
さらに、テンプレートのインストールには以下のパラメータを設定する必要があります:
- ntp
- dns (プロキシが提供されている場合はオプション)
- proxy
## テンプレートのインストール
### ファイアウォールの設定
インストールプロセスは PXE netboot に依存するため、アクティブなインターネット接続が必要です。以下のファイアウォールルールを設定する必要があります:```
sysctl net.ipv4.ip_forward=1
iptables -t nat -I POSTROUTING -s 192.168.90.0/24 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 192.168.91.0/24 -j MASQUERADE
または nftables を使う場合:``` sysctl net.ipv4.ip_forward=1 nft insert inet nat postrouting iifname "install-*" masquerade nft insert inet nat postrouting iifname "mof0" masquerade
`ip_forward` パラメータが 1 に設定されている場合、ネットワーク上の他のデバイスがホストをルーターとして使用できないように、FORWARD チェーンを設定する必要があります。
全体として、以下のルールが推奨されます:```
iptables -I INPUT -i mof0 -p udp --sport 68 --dport 67 -j ACCEPT -m comment --comment "mofos dhcp"
iptables -I INPUT -i mof0 -p udp --dport 69 -j ACCEPT -m comment --comment "mofos tftp"
iptables -I OUTPUT -o mof0 -j ACCEPT -m comment --comment "host -> mofos"
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i mof0 -j ACCEPT -m comment --comment "mofos ->"
iptables -t nat -I POSTROUTING -s 192.168.90.0/24 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 192.168.91.0/24 -j MASQUERADE
または nftables を使用する場合:```
table inet filter {
chain input {
type filter hook input priority 0; policy drop
iifname "install-*" ip daddr 255.255.255.255 udp sport 68 udp dport 67 accept comment "mofos dhcp"
iifname "mof0" ip daddr 255.255.255.255 udp sport 68 udp dport 67 accept comment "mofos dhcp"
iifname "install-*" udp dport 69 accept comment "mofos tftp"
}
chain forward {
type filter hook forward priority 0; policy drop
ct state established,related accept;
ct state invalid drop;
iifname "mof0" counter accept
iifname "install-*" counter accept
}
chain output {
type filter hook output priority 0; policy drop
oifname "mof0" counter accept
}
} table inet nat { chain postrouting { type nat hook postrouting priority 100 iifname "mof0" masquerade iifname "install-*" masquerade } }
It is recommended to restrict masquerade and forwarding rules based on your specific needs, to prevent mofos virtual machines from accessing the entire host network.
特定のニーズに基づいてマスカレードおよび転送ルールを制限し、mofos 仮想マシンがホストネットワーク全体にアクセスできないようにすることをお勧めします。
Isolation between virtual machines is automatically enforced by a libvirt hook, which requires nft to function properly.
仮想マシン間の分離は libvirt フックによって自動的に強制され、正しく機能するには nft が必要です。
### Install
### インストール
The first step is to build the initial layer: the template. By default, Mofos can install a Debian 12–based template.
最初のステップは初期レイヤーであるテンプレートを構築することです。デフォルトでは、Mofos は Debian 12 ベースのテンプレートをインストールできます。```
mofos template create debian-template
注: すべてのコマンドで、予期しない動作が発生した場合に詳細な技術情報を取得するために --debug オプションを使用できます。特にこのコマンドでは、--debug フラグを使用すると、インストールの進行状況を表示するグラフィカルウィンドウも強制的に表示されます。あるいは、virt-manager. を使用してインストールを監視することもできます。