ネットワークセグメントは、仮想サーバー用に独立させます。(192.168.101.0/24)
仮想サーバー(内部 LAN)からインターネットへの通信を許可します。
iptables -A FORWARD -i virbr0 -o eth0 -s 192.168.101.0/24 -p tcp --sport 1024:65535 -j ACCEPT
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
Domain0 以外から仮想サーバーへの通信は許可しません。
仮想サーバーは外部へ直接公開しません。
# # CentOS インストール時の『仮想化』パッケージ群を yum でインストールします # yum groupinstall Virtualization # # カーネルが更新された場合、デフォルトの起動カーネルが Xen 対応カーネルになるようにします # vi /etc/sysconfig/kernel : DEFAULTKERNEL=kernel-xen # # GRUB で Xen 対応カーネルがデフォルト起動するようにします # vi /boot/grub/menu.lst : default=0 : # # 再起動します # reboot※DEFAULTKERNEL の設定を行うことにより、カーネルが更新された場合でも /boot/grub/menu.lst の default 設定が Xen 対応カーネルを指すように自動的に書き換えられます。
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0となっており、NAT ルーターおよび DHCP サーバーの機能を併せ持っています。
# # 念のため、デフォルトインターフェースの設定内容をバックアップしておきます # mkdir -p /home/xen/libvirt # バックアップ先を作成します # cp /etc/libvirt/qemu/networks/default.xml /home/xen/libvirt/ # # デフォルトインターフェースのネットワーク定義を削除します # virsh net-destroy default # ネットワークを停止します # virsh net-autostart default --disable # 自動起動設定を解除します # virsh net-undefine default # ネットワーク定義を削除します # # 新しいネットワークの定義ファイルを作成します # vi /home/xen/libvirt/virtnet.xml <network> <name>virtnet</name> <bridge name="virbr0" /> <ip address="192.168.101.11" netmask="255.255.255.0" /> </network> # # 新しいネットワーク定義を登録して起動します # virsh net-define /home/xen/libvirt/virtnet.xml # ネットワーク定義を登録します # virsh net-autostart virtnet # 自動起動設定を行います # virsh net-start virtnet # ネットワークを起動します
# vi /usr/local/sbin/firewall.sh : # 外部I/Fのネットワーク情報 : # 内部I/Fのネットワーク情報 : # 仮想I/Fのネットワーク情報 VIRIF="virbr0" VIRIP=$(ifconfig $VIRIF | grep inet | cut -d ":" -f 2 | cut -d " " -f 1) VIRMASK=$(ifconfig $VIRIF | grep Mask | cut -d ":" -f 4) VIRLAN=$VIRIP'/'$VIRMASK : # --- (INPUTチェイン) --- : # 内部LANからのパケットを許可 : # 仮想LANからのパケットを許可 iptables -A INPUT -i $VIRIF -s $VIRLAN -j ACCEPT : # --- (OUTPUTチェイン) --- : # 内部LANへのパケットを許可 : # 仮想LANへのパケットを許可 iptables -A OUTPUT -o $VIRIF -d $VIRLAN -j ACCEPT : # --- (FORWARDチェイン) --- : # 内部LANの非特権ポートから外部への転送を許可 : # 仮想LANの非特権ポートから外部への転送を許可 iptables -A FORWARD -i $VIRIF -o $EXTIF -s $VIRLAN -p tcp --sport $UNPRIVPORTS -j ACCEPT : # firewall.sh # 設定を反映させます
# # NFSがインストールされていなければ、インストールします # yum -y install nfs-utils # # DVDマウント用ディレクトリを作成します # mkdir /mnt/dvd # # ゲストマシンから参照されるディレクトリを作成します # mkdir /home/exports # chmod 777 /home/exports # # NFSの定義を行います # vi /etc/exports /mnt/dvd 192.168.101.0/24(ro) # ゲストマシンから参照のみで許可しています /home/exports 192.168.101.0/24(ro) # vi /etc/hosts.deny : portmap: ALL # リモートによる NFS 関連サービスの使用を禁止します lockd: ALL mountd: ALL rquotad: ALL statd: ALL # vi /etc/hosts.allow : portmap: 192.168.101.0/255.255.255.0 # 仮想サーバーからの NFS 関連サービスの使用は許可します lockd: 192.168.101.0/255.255.255.0 rquotad: 192.168.101.0/255.255.255.0 mountd: 192.168.101.0/255.255.255.0 statd: 192.168.101.0/255.255.255.0 # # NFSサービスの(再)起動を行います # service portmap restart # chkconfig nfs on # service nfs restart
# umount /dev/dvd # 念のためアンマウントします # mount -r -t iso9660 /dev/dvd /mnt/dvd
# # ハードディスクの物理パーティションは /dev/sda4 として作成しています。 # fdisk -l Disk /dev/sda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 3053 24418800 8e Linux LVM /dev/sda3 3054 7917 39070080 8e Linux LVM /dev/sda4 7918 19457 92695050 8e Linux LVM # # 物理ボリュームを作成します # pvcreate /dev/sda4 # # ボリュームグループを作成します # # (例)VgVirtual という名称で、物理ボリューム /dev/sda4 上に作成します # vgcreate VgVirtual /dev/sda4 # # ゲストマシンインストール先の論理ボリュームを作成します # # (例)LvMySQL という名称で、ボリュームグループ VgVirtual 上に 15G のサイズで作成します # lvcreate -n LvMySQL -L 15G VgVirtual # lvdisplay /dev/VgVirtual/LvMySQL --- Logical volume --- LV Name /dev/VgVirtual/LvMySQL VG Name VgVirtual LV UUID jShZdV-3U1v-Kk6J-Ii7h-aYwQ-xV1A-L8eAR8 LV Write Access read/write LV Status available # open 0 LV Size 15.00 GB Current LE 3840 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:7
$ # Domain0 からゲストマシン actmysql に SSH でログインします $ # なお、DNS サーバーを運用していますので、IP アドレスではなくホスト名を使用しています $ # (注)まだ、パスワード認証になっています $ ssh root@actmysql.server.localnet The authenticity of host 'actmysql.server.localnet (192.168.101.101)' can't be established. RSA key fingerprint is … Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'actmysql.server.localnet,192.168.101.101' (RSA) to the list of known hosts. root@actmysql.server.localnet's password: ゲストマシン actmysql の root ログインパスワード # # ゲストマシン上での su コマンドの使用を root ユーザーと wheel グループユーザーに限定します # vi /etc/pam.d/su : # Uncomment the following line to require a user to be in the "wheel" group. #auth required pam_wheel.so use_uid auth required pam_wheel.so use_uid # コメントを外します : # # ゲストマシン上にログインユーザーを作成します # mkdir /home/users/ # users グループ用のホームディレクトリを作成しています # useradd -g users -d /home/users/user1 user1 -G wheel # passwd user1 # ログインパスワードを設定しておきます Changing password for user user1. New UNIX password: ログインパスワード Retype new UNIX password: ログインパスワード(再入力) passwd: all authentication tokens updated successfully. # # ログインユーザーのホームディレクトリに .ssh ディレクトリを作成します # mkdir /home/users/user1/.ssh # chown user1.users /home/users/user1/.ssh # chmod 700 /home/users/user1/.ssh # exit # ゲストマシンから出ます Connection to actmysql.server.localnet closed.
$ # Domain0 のユーザーで SSH の鍵セットを作成します $ # 既に作成している場合、新たに作成する必要はありません $ ssh-keygen -t rsa -C "SSH Connection User - domain0" Generating public/private rsa key pair. Enter file in which to save the key (/home/users/domain0/.ssh/id_rsa): [Enter] Created directory '/home/users/domain0/.ssh'. Enter passphrase (empty for no passphrase): 鍵のパスフレーズ Enter same passphrase again: 鍵のパスフレーズ(再入力) Your identification has been saved in /home/users/domain0/.ssh/id_rsa. Your public key has been saved in /home/users/domain0/.ssh/id_rsa.pub. The key fingerprint is: … SSH Connection User : domain0 $ # ゲストマシンのログインユーザーに公開鍵を渡します $ scp .ssh/id_rsa.pub user1@actmysql.server.localnet:.ssh/ The authenticity of host 'actmysql.server.localnet (192.168.101.101)' can't be established. RSA key fingerprint is …. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'actmysql.server.localnet,192.168.101.101' (RSA) to the list of known hosts. user1@actmysql.server.localnet's password: ゲストマシンのログインユーザー user1 のログインパスワード id_rsa.pub 100% 414 0.4KB/s 00:00
$ # ゲストマシンへログインします $ ssh user1@actmysql.server.localnet $ # 渡された公開鍵を登録します $ cd .ssh $ cat id_rsa.pub >> authorized_keys $ rm id_rsa.pub $ # OpenSSH の設定を変更します $ su - パスワード:root ログインパスワード # vi /etc/ssh/sshd_config : OpenSSH運用 を参考に定義ファイルの編集を行います : # service sshd restart # SSH デーモンを再起動します # exit $ # Domain0 の SSH ユーザーに戻ります $ exit Connection to actmysql.server.localnet closed. $ # パスワード認証でログインできなくなっています $ mv .ssh/id_rsa .ssh/id_rsa.bak $ ssh user1@actmysql.server.localnet Permission denied (publickey,gssapi-with-mic). $ # 秘密鍵でログインします $ mv .ssh/id_rsa.bak .ssh/id_rsa $ ssh user1@actmysql.server.localnet Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ
$ # Domain0 からゲストマシンにログインします $ ssh user1@actmysql.server.localnet Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ $ su - パスワード:root ログインパスワード # # パッケージを最新にします # rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 # yum -y update # 手動で最新にします # reboot # 再起動します Connection to actmysql.server.localnet closed.
$ # Domain0 からゲストマシンにログインします $ ssh user1@actmysql.server.localnet Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ $ su - パスワード:root ログインパスワード # # パッケージの自動更新設定を行います # yum -y install yum-updatesd # 自動更新パッケージをインストールします # vi /etc/yum/yum-updatesd.conf : パッケージの自動更新設定 を参考に定義ファイルの編集を行います : # service yum-updatesd start # yum の自動更新を開始します # # その他必要なパッケージをインストールします # yum -y install sudo # 別ユーザーでのコマンド実行 # yum -y install screen # 仮想端末管理ソフト # yum -y install wget # ダウンロードマネージャ # # sudo コマンドの使用を wheel グループユーザーに許可します # visudo : ## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL %wheel ALL=(ALL) ALL # コメントを外します ## Same thing without a password : # exit $ exit # ゲストマシンからログアウトします Connection to actmysql.server.localnet closed.
$ # Domain0 からゲストマシンにログインします $ ssh user1@actmysql.server.localnet Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ $ su - パスワード:root ログインパスワード # # ファイアーウォールのスクリプトを作成します # vi /usr/local/sbin/firewall.sh #!/bin/sh # ========================================================================================== # File : firewall.sh # Author : System House ACT # # 仮想サーバーのファイアウォールの設定を行う # # Copyright 2010 System House ACT All rights reserved. # ========================================================================================== # --------------------------------------------------------------------------- (変数定義) --- # 仮想サーバーのネットワーク情報 VIRIF="eth0" VIRIP=$(ifconfig $VIRIF | grep inet | cut -d ":" -f 2 | cut -d " " -f 1) VIRMASK=$(ifconfig $VIRIF | grep Mask | cut -d ":" -f 4) VIRLAN=$VIRIP'/'$VIRMASK # 非特権ポート UNPRIVPORTS="1024:65535" # ----------------------------------------------------------------------------- (初期化) --- # 全チェインを空にする iptables -F iptables -t nat -F iptables -t mangle -F # 全ユーザー定義チェインを削除する iptables -X iptables -t nat -X iptables -t mangle -X # 全チェインのカウンタをクリアする iptables -Z iptables -t nat -Z iptables -t mangle -Z # デフォルトポリシーをDROPに設定する iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # iptablesパラメータ LOGLIMIT="1/s" # ログマッチ許可 1回/秒 LOGBURST="3" # ログマッチ最大値 3回 # ----------------------------------------------------------------------- (ログチェイン) --- # DROPパケット iptables -N LOG-DROP iptables -A LOG-DROP -p all \ -m limit --limit $LOGLIMIT --limit-burst $LOGBURST \ -j LOG --log-prefix "iptables DROP " iptables -A LOG-DROP -f \ -m limit --limit $LOGLIMIT --limit-burst $LOGBURST \ -j LOG --log-prefix "iptables FRAGMENT DROP " iptables -A LOG-DROP -j DROP # ---------------------------------------------------------------------- (INPUTチェイン) --- # ローカルからのパケットを許可 iptables -A INPUT -i lo -j ACCEPT # 仮想サーバーセグメントからのパケットを許可 iptables -A INPUT -i $VIRIF -s $VIRLAN -j ACCEPT # ESTABLISHED/RELATED接続を許可 iptables -A INPUT -i $VIRIF -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -i $VIRIF -p tcp --dport $UNPRIVPORTS \ -m state --state RELATED -j ACCEPT iptables -A INPUT -i $VIRIF -p udp --dport $UNPRIVPORTS -m state --state RELATED -j ACCEPT iptables -A INPUT -j LOG-DROP # --------------------------------------------------------------------- (OUTPUTチェイン) --- # ローカルのパケットを許可する iptables -A OUTPUT -o lo -j ACCEPT # 仮想サーバーセグメントへのパケットを許可 iptables -A OUTPUT -o $VIRIF -d $VIRLAN -j ACCEPT # 非特権ポートからのTCP/UDPパケットを許可 iptables -A OUTPUT -o $VIRIF -s $VIRIP -p tcp --sport $UNPRIVPORTS -j ACCEPT iptables -A OUTPUT -o $VIRIF -s $VIRIP -p udp --sport $UNPRIVPORTS -j ACCEPT iptables -A OUTPUT -j LOG-DROP # ------------------------------------------------------------------------- (定義の保存) --- service iptables save # # 作成したスクリプトを実行します # chmod +x /usr/local/sbin/firewall.sh # /usr/local/sbin/firewall.sh # exit $ exit # ゲストマシンからログアウトします Connection to actmysql.server.localnet closed.
$ # Domain0 からゲストマシンにログインします $ ssh user1@actmysql.server.localnet Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ $ su - パスワード:root ログインパスワード # yum -y install nfs-utils # ネットワークファイルシステムユーティリティ # # 自動起動設定を行います # service portmap start # chkconfig nfs on # service nfs start # # 共有ディレクトリを作成します # mkdir /home/exports # chmod 777 /home/exports # # NFSの定義を行います # vi /etc/exports /home/exports gateway.server.localnet(ro) # Domain0 からのみ参照で許可しています # vi /etc/hosts.deny : portmap: ALL # リモートによる NFS 関連サービスの使用を禁止します lockd: ALL mountd: ALL rquotad: ALL statd: ALL # vi /etc/hosts.allow : portmap: gateway.server.localnet # Domain0 からの NFS 関連サービスの使用は許可します lockd: gateway.server.localnet rquotad: gateway.server.localnet mountd: gateway.server.localnet statd: gateway.server.localnet # NFSサービスの(再)起動を行います # service portmap restart # chkconfig nfs on # service nfs restart # exit $ exit # ゲストマシンからログアウトします Connection to actmysql.server.localnet closed.
System House ACT Weblog 内記事 : Xen による仮想サーバーの構築
トラックバックまたはコメントにてお寄せください。| -- Contents -- |
| Top |
| サーバー構築 |
| メールサーバー |
| ウェブサーバー |
| 開発環境(Linux) |
| 開発環境(Windows) |
| Eclipse |
| 製品情報 |
| BOINC(WCG) |
| Archives |
| Weblog |