To content | To menu | To search

外部IPアドレスひとつのVPSで複数の Jail を起動して SSH アクセス等々

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 のまま。

Add a comment

HTML code is displayed as text and web addresses are automatically converted.

They posted on the same topic

Trackback URL : https://www.pseudomoon.jp/dotclear/index.php?trackback/89

This post's comments feed