OpenVZ · 3 min read · Jan 17, 2026
OpenVZのデプロイに関するいくつかのヒント
OpenVZのデプロイに関するいくつかのヒント
私はOpenVZに大きく依存しています。この記事では、OpenVZのデプロイに関する私の個人的な経験を共有したいと思います。読者はすでにOpenVZのインストール方法と基本を知っていると仮定します。この記事では、コマンドラインを介したOpenVZの使用に関するいくつかのヒントを説明します。GUIを好む場合は、WebVZのインストール方法を参照してください。
ここで説明するセットアップは、次のガイドラインに従います:
- 実サーバーには最小限のソフトウェアがインストールされています(私は最小インストールのdebian Etchを使用しています)を出発点とします。デプロイに応じて追加のアプリケーションがインストールされます。
- 実サーバーはできるだけ安全であるべきです。一方で、シンプルでセットアップ/メンテナンスが簡単であることを望んでいます。したがって、妥協を選びました:私はdebianで簡単にデプロイできるものだけに依存し、openwall、selinux、grsecurityなどの追加のセキュリティ対策には手を出しません。
- 必要な各サービスは別々のコンテナにデプロイされ、互いに干渉しないようにします。
- 実サーバーとコンテナの侵入検知は、OSSECを使用して実サーバー上にデプロイされます。
- ファイアウォール(iptables)は実サーバーで行われ、コンテナはサービスのみを実行します。
- 実サーバーとコンテナにアクセスし、メンテナンスする唯一の手段としてsshに依存しています。
基本的なセキュリティ
OVZコンテナをデプロイする前に、実サーバーの設定をいくつか変更して、より安全にします:
- rootパスワードを無効にします。
- すべてをsudoできるadmin-userというユーザーを追加します。このユーザーにはシンプルなパスワードがあります。
- 実サーバーにsshできるssh-userというユーザーを追加します。このユーザーのsshキーをアップロードした後、.ssh/authorized_keysの行を次のように変更します:
command="/bin/su - admin-user" ssh-rsa AAAA...そして、/etc/pam.d/suを変更して、このユーザーのみがsuできるようにします:auth required pam_wheel.so group=ssh-user - 実サーバーからファイルをコピーするために、別のユーザーsftp-userを作成し、MySecureShellをインストールします。
- sshd_configを変更して、- ssh-userとsftp-userのみが接続できるようにします。
- パスワード認証を無効にします(ssh-userとsftp-userのsshキーをアップロードした後)。
- sshdは非標準ポートで実行されます。
上記のスキームは次のように機能します:実サーバーに接続するには、ssh-userとして接続します。次に、admin-userのパスワードを入力する必要があります。誰かがssh-userのsshキーを取得した場合でも、サーバーにアクセスするためにはadmin-userのパスワードを知っている必要があります(/bin/su - adminの失敗は、OSSECによって即座にメールアラートを生成します)。
サーバーからファイルをコピーするには、sftp-userアカウントを使用してsftpを使用します。このユーザーのsshキーを取得した場合、彼は自分の$HOMEの下のファイルにしかアクセスできないため、それほど大きな問題ではありません。
OpenVZコンテナの作成
すべてのコンテナのテンプレートを作成する方が快適だと思いますので、新しいコンテナが必要なときは、単にテンプレートからクローンを作成します。実サーバーとコンテナには、安定したdebianのみを使用します。したがって、最初のステップはテンプレートを作成し、自分の好みに合わせて調整することです:
新しいコンテナを作成します:
vzctl create 2002 --ostemplate debian-4.0-amd64-minimal一部の基本パラメータを設定します:
vzctl set 2002 --ipadd 192.168.100.2 --nameserver 1.2.3.4 --hostname host2 --saveコンテナを起動します:
vzctl start 2002コンテナに入ります:
vzctl enter 2002私はすべてを最小限に保ち、必要に応じて追加します。debianでパッケージをインストールするのは非常に簡単なので、必要なパッケージをインストールするのにほとんど労力がかかりません。したがって、テンプレートに対して次の変更を行います:- aptitudeを実行し、Options/Dependency handling/Install Recommended packages automaticallyのチェックを外します。
テンプレートに不要なパッケージを削除します:
bsdmainutils ed groff-base info iptables libconsole libgdbm3 man-db manpages nano netcat openssh-client openssh-server quota ssh traceroute/etc/apt/sources.listを編集して、自分の好みに合わせます。
その後、テンプレートを停止します:
vzctl stop 2002
新しいコンテナが必要なときは、次のようにスクリプトvz-cloneを使用します:
#!/bin/bash
# openvz VEをクローンするスクリプト
set -e
if [ -z "$2" ]; then
echo "Usage: $0 "
exit 1
fi
cfg="/etc/vz/conf/$1.conf"
newcfg="/etc/vz/conf/$2.conf"
if [ ! -e $cfg ]; then
echo $cfg not found!
exit 1
fi
VEID=$1
. $cfg
veprivate="$VE_PRIVATE"
VEID=$2
. $cfg
newveprivate="$VE_PRIVATE"
if [ -e $newcfg ]; then
echo $newcfg already exists!
exit 1
fi
if [ -e $newveprivate ]; then
echo $newveprivate already exists!
exit 1
fi
if vzlist | fgrep -w -q $1
then
vzctl stop $1
fi
echo "Cloning $cfg to $newcfg"
cp -a $cfg $newcfg
echo "Cloning $veprivate to $newveprivate"
mkdir -p $newveprivate
cd $veprivate
tar cf - . | (cd $newveprivate && tar xf -)
echo "Do not forget to edit $newcfg (you need to edit at least HOSTNAME and IP_ADDRESS)"
echo "Also do not forget to make an alias" 使用法:
sudo sh vz-clone 2002 2010Cloning /etc/vz/conf/2002.conf to /etc/vz/conf/2010.conf
Cloning /vz/private/2002 to /vz/private/2010
Do not forget to edit /etc/vz/conf/2010.conf (you need to edit at least HOSTNAME and IP_ADDRESS)
Also do not forget to make an alias/etc/vz/vz.confに応じて、上記のパスは異なる場合があります。私は以下の設定を使用しています:
VE_ROOT=/vz/root/$VEID
VE_PRIVATE=/vz/private/$VEID次に、/etc/vz/conf/2010.confを編集し、例えばHOSTNAMEをhost10、IP_ADDRESSを192.168.100.10に変更し、新しいコンテナの準備が整います。また、新しいコンテナのエイリアスも作成しますが、これは次のセクションで説明します。
OpenVZコンテナの操作
OVZコンテナは番号で識別されます。私はそれらを名前/エイリアスで参照する方が簡単だと思うので、例えば2010がdnsサービスを実行しているコンテナのIDであることを覚えておく必要はありません。それに加えて、vzctl、vzlist、vzquotaなどの異なるコマンドとそのパラメータを覚えておく必要がないようにしたいと思います。そこで、いくつかの簡単なスクリプトを作成して自分を助けます。
- まず、エイリアスのリストを作成します /etc/vz-aliases:
# openvz VEのエイリアス 2001 test 2002 template 2010 dns 2020 ldap 2030 mail 2040 web ... - IDとエイリアスの間を変換するために、次のようなスクリプト /usr/local/bin/vz-get-aliasを作成し、vz-get-veidへのシンボリックリンクを作成します:
#!/bin/sh vz_alias_file="/etc/vz-aliases" case $0 in *vz-get-alias) cat $vz_alias_file | egrep "^[[:space:]]*$1[[:space:]]" | awk '{print $2}' ;; *vz-get-veid) cat $vz_alias_file | egrep "[[:space:]]$1[[:space:]]*$" | awk '{print $1}' ;; esac - 次に、OVZコンテナを操作するための頻繁なコマンドを/usr/local/bin/vz-cmd-genericというスクリプトにまとめます:
#!/bin/sh set -e ## vz-listを最初に処理します。これはID/エイリアスを必要としません。 case $0 in *vz-list) sedfile=`mktemp` cat /etc/vz-aliases | egrep '^[0-9]' | \ sed 's/\([0-9]*\) *\([a-zA-Z0-9-]*\)/s,\1 .*,\&\2/' > $sedfile sudo vzlist "$@" | sed 's/ $//' | \ sed -f $sedfile | \ sed '1s/$/ALIAS/' exit ;; esac ## 他のコマンドはIDまたはエイリアスを必要とします。 if [ -z "$1" ]; then echo "Usage: $0そして、すべてのコマンドvz-start、vz-stop、vz-execなどをこのスクリプトvz-cmd-genericへのシンボリックリンクとして作成します。| [ ]" exit 1 fi veid=`/root/bin/vz-get-veid $1` if [ -z "$veid" ]; then veid=$1 fi shift case $0 in *vz-start) sudo vzctl start $veid ;; *vz-restart) sudo vzctl restart $veid ;; *vz-stop) sudo vzctl stop $veid ;; *vz-enter) sudo vzctl enter $veid ;; *vz-exec) sudo vzctl exec $veid "$@" ;; *vz-edit) sudo vi /etc/vz/conf/$veid.conf ;; *vz-quota-ls) sudo vzquota stat $veid ;; *vz-ubc) sudo head -2 /proc/user_beancounters sudo cat /proc/user_beancounters | egrep -A23 "^[[:space:]]+${veid}:" ;; esac
使用法は次のように簡単です:
- 実行中のすべてのコンテナをリストするには:
vz-listVEID NPROC STATUS IP_ADDR HOSTNAME ALIAS 2010 15 running 192.168.100.10 host10 dns 2020 8 running 192.168.100.20 host20 ldap 2030 23 running 192.168.100.30 host30 mail 2040 11 running 192.168.100.40 host40 web - すべてのコンテナをリストするには(実行中でないものも含む):
vz-list -aVEID NPROC STATUS IP_ADDR HOSTNAME ALIAS 2002 - stopped 192.168.100.2 host2 template 2010 15 running 192.168.100.10 host10 dns 2020 8 running 192.168.100.20 host20 ldap 2030 23 running 192.168.100.30 host30 mail 2040 11 running 192.168.100.40 host40 web - コンテナを起動/停止/再起動するには:-
vz-start dns vz-stop dnsvz-restart dns- コンテナ内でコマンドを実行するには:
vz-exec dns aptitude update - コンテナのUBCを確認するには:
vz-ubc dns - コンテナのクォータを確認するには:
vz-quota-ls dns - エイリアスの代わりにIDを使用することも可能です:
vz-ubc 2010
異なる実サーバー間でエイリアスを一意に保つことも良いことです。これにより、/etc/vz-aliasesを衝突なしに共有できます。
この記事はすでにかなり長くなっているので、ここで止めましょう。次の部分では、OSSECを使用した侵入検知のデプロイ方法、コンテナのUBCパラメータを監視および設定する方法などの問題について議論します。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。