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 2010
Cloning /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 | []" 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-start、vz-stop、vz-execなどをこのスクリプトvz-cmd-genericへのシンボリックリンクとして作成します。

使用法は次のように簡単です:

  • 実行中のすべてのコンテナをリストするには:vz-list
     VEID      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 -a
     VEID      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 dns
  • vz-restart dns
  • コンテナ内でコマンドを実行するには:vz-exec dns aptitude update
  • コンテナのUBCを確認するには:vz-ubc dns
  • コンテナのクォータを確認するには:vz-quota-ls dns
  • エイリアスの代わりにIDを使用することも可能です:vz-ubc 2010

異なる実サーバー間でエイリアスを一意に保つことも良いことです。これにより、/etc/vz-aliasesを衝突なしに共有できます。

この記事はすでにかなり長くなっているので、ここで止めましょう。次の部分では、OSSECを使用した侵入検知のデプロイ方法、コンテナのUBCパラメータを監視および設定する方法などの問題について議論します。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。