1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FreeBSDにAppJailを導入して環境構築する

Posted at

AppJailの導入と環境構築

始めに

先日、JailにGEMINI CLIを入れて遊ぶを書いた際に「AppJailの導入とVirtual Network(NAT)の設定、appjail-dnsによるJailの名前解決が完了したことを前提とする。」と前置きした。しかし、そもそもAppJailの記事をQiitaで書いたのは私が初めてらしく、これでは前提から躓くので誰も試せない。丁度、新しいPCにFreeBSD環境をゼロから構築するので、ついでにAppJailの環境構築手順を記しておく。

目的

AppJailの紹介と最低限の使用方法までを解説する。AppJailのユーザが増えるとAppJailやAppJail Directorのユーザが増えて、日本語のノウハウが増える事を期待する。

AppJailについて

AppJailは、シェルスクリプトとCで書かれたFreeBSDのJail管理フレームワークである。ライセンスはBSD-3。Jail管理フレームワークは他にもあるが、それらとの差異はAppJail Handbook Comparingを見て欲しい。

AppJailの導入

AppJailはpkgでインストールする。appjailとappjail-develの2種あるが、appjail-develで問題はない。

pkg install appjail-devel

インストールしたら設定ファイル/usr/local/etc/appjail/appjail.confを編集してzfsの使用を指定する。

appjail.conf
ENABLE_ZFS=1

その後はサービスを起動する。

sysrc appjail_enable=YES

AppJail-DNSの設定

AppJail-DNSはJailの名前解決する機能で、これを設定するとホストやJailから他のJailのネットワークアドレスをJail名で取得可能になる。コツはAppJail Handbook DNSAppJail Handbook Packet Filterを同時に設定すること。

pkg install dnsmasq
sysrc pf_enable="YES"
sysrc pflog_enable="YES"
cat << "EOF" >> /etc/pf.conf
nat-anchor "appjail-nat/jail/*"
nat-anchor "appjail-nat/network/*"
rdr-anchor "appjail-rdr/*"
EOF
service pf restart
service pflog restart
sysrc gateway_enable="YES"
sysctl net.inet.ip.forwarding=1
sysrc appjail_dns_enable="YES"
sysrc dnsmasq_enable="YES"
sysrc dnsmasq_conf="/usr/local/share/appjail/files/dnsmasq.conf"
touch /var/tmp/appjail-hosts
service dnsmasq start
service appjail-dns start

Virtual Networkの追加

ネットワークajdnsを追加する。

sysrc cloned_interfaces="tap0"
sysrc ifconfig_tap0_name="ajdns"
sysrc ifconfig_ajdns="inet 172.0.0.1/32"
service netif cloneup
service netif start ajdns

設定ファイル/usr/local/etc/appjail/appjail.confでDNSを設定する。コメントアウトを外すだけで良い。

appjail.conf
DEFAULT_RESOLV_CONF=/usr/local/etc/appjail/resolv.conf

/usr/local/etc/appjail/resolv.confは以下の記載を追加する。

resolv.conf
nameserver 172.0.0.1

DHCPがあるので、以下の設定を/etc/dhclient.confに追加する。

dhclient.conf
supersede domain-name-servers 172.0.0.1;

リブートした後に、設定が正しく反映されたか確認する。

cat /etc/resolv.conf
# Generated by resolvconf
nameserver 172.0.0.1

Jailの起動

作成した環境でJailを起動する。最初は種となるFreeBSDを取得し、それを元にJailを作成する。

appjail fetch
appjail quick myjail start login

Jail内で正しくFreeBSD環境が構築された事を確認しておく。この段階ではネットワークがないため、外部とは通信することが不可能だ。ネットワーク設定を修正しても良いが、ここは一旦Jailを削除してから、ネットワークが使用可能なJailを作成する。

appjail stop hello
appjail jail destory hello
appjail quick hello \
    virtualnet=":<random>" \
    overwrite \
    start

正常にネットワークが設定された場合は、Jailの作成後にJail名で名前解決が可能になる。

ping -c 2 hello
PING hello (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=64 time=0.109 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.484 ms

以上の手順を理解すれば、Jailの作成、削除、名前解決による通信の容易化が可能になる。上の事例ではJailとホスト外部との通信は不可能だが、appjail quickにnatを追加すると、JailとホストのNATが使用可能になり先の記事で紹介したAIエージェントを安全に隔離することが可能だ。

終りに

AppJailを使用した環境構築だが、AppJailそのものが他機能であり本記事では最低限の紹介に過ぎない。特にエフェメラルコンセプトappjail-ephemeral(7)の思想により、Jailで提供するサービスの管理が容易になる。AppJail Directorを使用すれば、一つのJailだけでなくWebとデータベースをそれぞれのJailで作成したサービスを構築するのも可能だ。ユーザが増えると良いと思ふ。

御精讀ありがたうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?