外部IPアドレスひとつのVPSで複数の Jail を起動して SSH アクセス等々
By takagiwa on Tuesday, January 15 2019, 20:13 - FreeBSD - Permalink
Qiita の @furandon_pig さんの記事、さくらVPSでFreeBSD+Jailを動かして仮想的にVPSが複数使えているような環境を作ってみる について、もう少しいじってみたもの。
個人的には qjail でお手軽 Jail 派のため、それも絡めた結果。
あとは一応 pf の内容も無知ながらもう少し手を入れてみた。
環境は同じく さくらのVPS 。OS は VIMAGE を待っていたので FreeBSD 12.0-RELEASE 。ただし VIMAGE は使わない。
% su # pkg # pkg install qjail # rehash # qjail install
でとりあえず qjail の準備。
/etc/rc.conf は
hostname="(ホスト名)" keymap="jp.kbd" ifconfig_vtnet0="(グローバルな IPv4 アドレス)" defaultrouter="(IPv4 デフォルトゲートウェイ)" ifconfig_vtnet0_ipv6="(IPv6 アドレス)" ipv6_defaultrouter="(IPv6 デフォルトゲートウェイ)" sshd_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="AUTO" # (1) ifconfig_lo0="inet 127.0.0.1" ifconfig_lo0_alias0="inet 192.168.0.254 192.168.0.255 netmask 255.255.255.0" ifconfig_lo0_alias1="inet 192.168.0.10" # (2) pf_enable="YES" pf_rules="/etc/pf.conf" pflog_enable="YES" pflog_logfile="/var/log/pflog"
とりあえず Jail 一個だけの設定で (1) 。(2) では flags を指定していないけれど必要に応じて。
最初の方でポート番号をリストアップしているけれど、必要なサービスがあればそのポート番号を追加していく。
/etc/pf.conf は
# SSH Others tcp_pass = "{ 22 1024:65535}" udp_pass = "{ 22 1024:65535}" ext_if = "vtnet0" int_if = "lo0" table <private> const { 192.168.0.0/24 } set block-policy drop set loginterface $ext_if scrub in all # (3) nat to jail nat on $ext_if inet from ($int_if) to ! <private> -> ($ext_if) rdr pass on $ext_if proto tcp from any to ($ext_if) port 2210 -> 192.168.0.10 port 22 block all pass quick on lo0 all antispoof log quick for $ext_if inet pass in quick on $ext_if inet proto icmp from any icmp-type echoreq keep state pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_pass flags S/SA keep state pass in on $ext_if inet proto udp from any to ($ext_if) port $udp_pass keep state pass out quick on $ext_if proto tcp all modulate state flags S/SA pass out quick on $ext_if proto { udp icmp } all keep state
(3) で、NAT と、あとは外のポート 2210 から Jail のポート 22 にアクセスできるよう設定。
この状態で Jail を作る。
# qjail create -4 192.168.0.10 -n lo0 (Jail 名) # qjail start # qjail console (Jail 名) >adduser >echo sshd_enable="YES" >> /etc/rc.conf >service sshd start
qjail create で最初インタフェース指定しないときうまくいかなかったように思う。
とりあえず adduser で SSH するユーザーを追加する。
sshd_enable を加えるコマンドがどこかにあったと思う。
そして sshd を起動。
この状態で、外部の IPv4 アドレスのポート 2210 に SSH すると Jail に直接入れる。
あとは HTTP を通したいときは Nginx のリバースプロキシを通すなどする。HTTPS の証明書はリバースプロキシのところで行い、Jail に対するアクセスは HTTP のまま。