VMware ESXi 3.5環境にHome Serverを構築する

VMware ESXi 3.5 Update 3環境にCentOS 5でHome Serverを構築します。

LinkIconCentOS 5をインストールする
LinkIconCentOS 5を設定する
LinkIconNTPサーバをインストールする
LinkIconルータを設定する
LinkIconファイアウォールを設定する
LinkIconDynamic DO!でドメインを取得する
LinkIconダイナミックDNSのIPアドレスを自動更新する
LinkIconWebサーバApacheをインストールする
LinkIconFTPサーバvsftpdをインストールする
LinkIconサイトデータをアップロードする

milk_btn_pagetop.png

 

CentOS 5をインストールする

CentOS 5のインストール

VMware ESXi 3.5 Updata 3の環境にCentOS 5をインストールします。
LinkIconVMware ESXi 3.5 Update 3にCentOS 5をインストールする

2010.09.15
milk_btn_pagetop.png

 

CentOS 5を設定する

一般ユーザの作成とパスワードの設定

一般ユーザを作成しパスワードの設定します。

# useradd ono
# passwd ono
Changing password for user ono.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
#

一般ユーザ環境への管理用コマンドパスの設定

~/.bashi_profileを編集して/sbinと/usr/sbinのパスを設定します。

$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
$ vi .bash_profile
$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/sbin:/usr/sbin

export PATH
$

ネットワークの設定

Home ServerになるESXi 3.5のバーチャルマシンに、固定のIPアドレスとホスト名を設定します。

IPアドレスの設定

固定のIPアドレスを設定します。

  • IP Address 192.168.1.10
  • Subnet Mask 255.255.255.0
  • Default Gateway 192.168.1.1

eth0のIP設定を変更します。

# cd /etc/sysconfig/network-scripts/
# vi ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=<IPアドレス>
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

ホスト名とゲートウェイアドレスの設定

ホスト名とゲートウェイアドレスを設定します。

# cd
# vi /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=<ホスト名>
GATEWAY=<ゲートウェイアドレス>

再起動して設定を反映させます。
# reboot

2010.09.18
milk_btn_pagetop.png

 

NTPサーバをインストールする

NTPサーバをインストールして時刻合わせを行います。

ntpのインストール

ntpパッケージをインストールします。
# yum -y install ntp

ntpの起動

ntpdデーモンを起動します。
# /etc/init.d/ntpd start

システム起動時にntpdデーモンが実行されるようにします。

# chkconfig ntpd on
# chkconfig ntpd --list
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

設定ファイル/etc/ntp.confで指定されたNTPサーバと通信を始め、システムの時刻を合わせます。

動作確認

ntpqコマンド通信状態を確認します。

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 doga.jp         133.243.238.164  2 u   29   64   17   21.369   10.881  23.776
*sylph.white-voi 150.26.2.66      2 u   30   64   17   13.271    2.513   0.457
+felixx.tsn.or.j 133.243.238.243  2 u   28   64   17   15.741    1.112   0.773
 LOCAL(0)        .LOCL.          10 l   25   64   17    0.000    0.000   0.001
#

dateコマンドで時刻の確認を行います。
# date
2010年 9月 18日 土曜日 18:39:27 JST
#

2010.09.18
milk_btn_pagetop.png

 

ルータを設定する

Home Serverを公開するには、ルータを操作し、必要なポートを開放し、外部からのアクセスを許可する必要があります。

ブロードバンドルータにより設定方法が異なります。

La Fonera+ DD-WRT
LinkIconLa Fonera+ DD-WRTブロードバンドルータを使う

WHR-HP-AMPG DD-WRT
LinkIconWHR-HP-AMPG DD-WRTブロードバンドルータを使う

Corega BAR SW-4P HG
LinkIconブロードバンドルータCorega BAR SW-4P HGを使う

Planex MZK-W04NU
LinkIcon無線LANルータPlanex MZK-W04NUを使う

追加 2011.11.07
追加 2011.04.06
milk_btn_pagetop.png

 

ファイアウォールを設定する

iptablesを利用し、ファイアウォールを設定します。

ファイアウォール設定スクリプトを作成します。
# touch /usr/local/bin/iptables.sh
# chmod 700 /usr/local/bin/iptables.sh
# vi /usr/local/bin/iptables.sh 

#!/bin/bash

#
# LANインターフェースを設定します
#
LAN_IF="eth0"

#
# LANのIPアドレスを取得します
#
LAN_IP="`/sbin/ifconfig $LAN_IF | grep "inet addr" | cut -d ":" -f 2 | cut -d " " -f 1`"

#
# LANのネットワークアドレスを取得します
#
LAN_NET="`netstat -rn | grep $LAN_IF | grep 255.255.255.0 | cut -d " " -f 1`"
#
# LANのネットマスクを取得します
#
LAN_MASK="`/sbin/ifconfig $LAN_IF | grep Mask | cut -d ":" -f 4`"

#
# ブロードキャストアドレスを取得します
#
LAN_BCAST="`/sbin/ifconfig $LAN_IF | grep "inet addr" | cut -d ":" -f 3 | cut -d " " -f 1`"

#
# ローカルネットワークアドレスを取得します
#
LAN=$LAN_NET"/"$LAN_MASK

#
# FTP接続モージュールをロードします
#
modprobe ip_conntrack_ftp

#
# すべてのルールをクリアします
#
/etc/init.d/iptables stop

#
# デフォルトポリシーを設定します
# 受信、通過パケットはすべて破棄します
# 送信パケットはすべて許可します
#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#
# ループバックアドレスからのパケットを許可します
#
iptables -A INPUT -i lo -j ACCEPT

#
# ローカルネットワーク内からのアクセスを許可します
#
iptables -A INPUT -s $LAN -j ACCEPT

#
# 内部から行ったアクセスに対する外部からの応答アクセスを許可します
#
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# フラグメント化されたパケットはログに記録し破棄します
#
iptables -N fragment
iptables -A fragment -j LOG --log-prefix '[iptables FRAGMENT] '
iptables -A fragment -j DROP
iptables -A INPUT -f -j fragment

#
# ブロードキャストアドレス、マルチキャストアドレス宛パケットは破棄します
#
iptables -A INPUT -d $LAN_BCAST -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP

#
# NetBIOS関連パケットの流出を防止します
#
iptables -N net-bios
iptables -A net-bios -j LOG --log-prefix '[iptables NETBIOS] '
iptables -A net-bios -j DROP
iptables -A INPUT -s ! $LAN -p tcp -m multiport --dports 135,137,138,139,445 -j net-bios
iptables -A INPUT -s ! $LAN -p udp -m multiport --dports 135,137,138,139,445 -j net-bios
iptables -A OUTPUT -d ! $LAN -p tcp -m multiport --sports 135,137,138,139,445 -j net-bios
iptables -A OUTPUT -d ! $LAN -p udp -m multiport --sports 135,137,138,139,445 -j net-bios

#
# Ping of Death攻撃対策をします
#
iptables -N ping-death
iptables -A ping-death -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A ping-death -j LOG --log-prefix '[iptables PING DEATH] '
iptables -A ping-death -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j ping-death

#
# SYNフラッド攻撃対策をします
# SYN Cookieを有効にします
#
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#
# Smurf攻撃対策をします
# Broadcat Pingを禁止します
#
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#
# IDENT/AUTH(113ポート)をRejectします
#
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

#
# FTPサーバ(21番ポート)へのアクセスを許可します
#
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

#
# PASV用ポート(4000-4002)へのアクセスを許可します
#
iptables -A INPUT -p tcp --dport 4000:4002 -j ACCEPT

#
# LAN内からSSH(22番ポート)への接続を許可します
#
iptables -A INPUT -s $LAN -p tcp --dport 22 -j ACCEPT

#
# 外部からSSH(22番ポート)への接続を許可します
#
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#
# WebサーバHTTP(80番ポート)へのアクセスを許可します
#
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#
# WebサーバHTTPS(433番ポート)へのアクセスを許可します
#
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#
# メールサーバSMTP(25番ポート)へのアクセスを許可します
#
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT

#
# メールサーバPOP(110番ポート)へのアクセスを許可します
#
#iptables -A INPUT -p tcp --dport 110 -j ACCEPT

#
# メールサーバIMAP(143番ポート)へのアクセスを許可します
#
iptables -A INPUT -p tcp --dport 143 -j ACCEPT

#
# 設定ルール外のアクセスはログに記録して破棄します
#
iptables -A INPUT -j LOG --log-prefix '[iptables INPUT DROP] '
iptables -A INPUT -j DROP
iptables -A FORWARD -j LOG --log-prefix '[iptables FORWARD DROP] '
iptables -A FORWARD -j DROP

#
# システムの再起動時にも設定内容が有効になるように保存します
#
/etc/rc.d/init.d/iptables save

#
# iptablesを再起動します
#
/etc/init.d/iptables restart


ファイアウォール設定スクリプトを実行します。
# /usr/local/bin/iptables.sh

パケットフィルタテーブルの詳細を表示します。
# iptables -n -L -v

2010.10.01
milk_btn_pagetop.png

 

Dynamic DO!でドメインを取得する

Dynamic DO!で提供しているダイナミックDNSサービスを利用します。

Dynamic DO!
http://ddo.jp/

サブドメインDDNS登録操作

  • http://ddo.jp/にアクセスします。
  • 「ddo.jp サブドメイン DDNS無料登録 」に希望サブドメイン名 (英小文字、数字、'-'のみ 6~16文字)を入力します。
  • 「無料登録」をクリックします。
  • 利用規約を確認し、パスワード、メールアドレスを入力し、「利用規約を熟読し、同意する」をチェックし、「登録内容確認」をクリックします。
  • 登録内容を確認し、「登録」をクリックします。
  • メールアドレス確認用URLにアクセスします。

IPアドレス更新

  • http://ddo.jp/にアクセスします。
  • 「無料サービスのIP更新」をクリックします。
  • 「IPアドレスの更新(無料用)」の「登録ドメイン」にサブドメイン名を入力します。
  • 「IPアドレス」には自動でIPアドレスが入ります。
  • パスワードを入力して「更新」をクリックします。

登録内容の変更

登録内容を変更する場合は、「ログイン」してから行います。

2009.08.23
milk_btn_pagetop.png

 

ダイナミックDNSのIPアドレスを自動更新する

wget -O - 'http://free.ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード' をcronに登録し、定期的に動作させることでIPアドレスの自動更新が可能になります。

crontabの設定

毎時12分と42分に自動更新を行うようにします。

# crontab -e
12,42 * * * * /usr/bin/wget -O - 'http://free.ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード' > /dev/null

確認

Dynamic DO!.jp http://ddo.jp/ にアクセスしログインします。
表示画面左下に表示されるIP最終更新日時をチェックし、更新が正しく行われていることを確認します。

2010.12.29
milk_btn_pagetop.png

 

WebサーバApacheをインストールする

WebサーバApacheをインストールします。

Apacheのインストール

Apacheをインストールします。
# yum -y install httpd

Apacheの設定

httpd.conf設定ファイルを編集します。
# vi /etc/httpd/conf/httpd.conf

設定内容

  • ServerTokens OS → ServerTokens Prod
    • サーバ情報の表示を最小限にします。
  • ServerAdmin root@localhost → ServerAdmin webmaster@itlife.ddo.jp
    • エラーページ等に表示される管理者メールアドレスを指定します。
  • #ServerName www.example.com:80 → ServerName itlife.ddo.jp:80
    • コメントを外します。
    • サーバ名を指定します。
  • Options Indexes FollowSymLinks → Options ExecCGI FollowSymLinks
    • CGIを許可します。
  • ServerSignature On → ServerSignature Off
    • Apacheのバージョンを表示しないようにします。
  • AddDefaultCharset UTF-8 → #AddDefaultCharset UTF-8
    • コメントアウトします。
  • #AddHandler cgi-script .cgi → AddHandler cgi-script .cgi .pl
    • コメントを外します。
    • CGIスクリプトに.plを追加します。

設定ファイルのリロード操作

設定ファイルの変更後、設定ファイルをリロードすれば、変更した設定が有効になります。

# /etc/rc.d/init.d/httpd reload

テストページの削除

# rm -f /etc/httpd/conf.d/welcome.conf
# rm -f /var/www/error/noindex.html

Perlのリンク設定

/usr/local/bin/perlから/usr/bin/perlにリンクを張ります。

# ln -s /usr/bin/perl /usr/local/bin/perl

Perlのパスを確認します。
# whereis perl
perl: /usr/bin/perl /usr/local/bin/perl /usr/share/man/man1/perl.1.gz

ドキュメントルート所有者変更

ドキュメントルートの所有者を作成し、ドキュメントルートの所有者を変更すします。

ドキュメントルート所有者の作成

ドキュメントルート所有者(www)を作成しパスワードの設定します。

# useradd www
# passwd www
Changing password for user ono.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
#

ドキュメントルート所有者変更

ドキュメントルートの所有者(www)を変更します。
# chown www:www /var/www/html/

ドキュメントルートの所有者の変更確認を行います。
# ls -la /var/www/

# chown www:www /var/www/html/
# ls -la /var/www/
合計 28
drwxr-xr-x  6 root root 4096  9月 18 23:05 .
drwxr-xr-x 21 root root 4096  9月 18 23:05 ..
drwxr-xr-x  2 root root 4096  8月 31 01:37 cgi-bin
drwxr-xr-x  3 root root 4096  9月 22 10:27 error
drwxr-xr-x  2 www  www  4096  8月 31 01:37 html
drwxr-xr-x  3 root root 4096  9月 18 23:05 icons
#

Apacheの起動

httpdを起動します。
# /etc/rc.d/init.d/httpd start

httpdの自動起動を設定します。
# chkconfig httpd on 

httpdの自動起動設定を確認します。
# chkconfig httpd --list

Apacheアクセス確認

テストページを作成します。
# vi /var/www/html/index.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello!</title>
<body>
Hello!
</body>
</html>

Hello! が表示されることを確認します。
http://サーバ名/

CGIの確認

CGIでテストページを作成します。
# vi /var/www/html/hello.cgi

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";
print "<title>Hello!</title>\n";
print "</head>\n";
print "<body>\n";
print "Hello!\n";
print "</body>\n";
print "</html>\n";

hello.cgi のパーミッションを変更します。
# chmod 755 /var/www/html/hello.cgi 

Hello! が表示されることを確認します。
http://サーバー名/hello.cgi

確認用ファイルをすべて削除します。
# rm -f /var/www/html/*

Apacheのディレクトリ構造

/etc/rc.d/init.d/httpd
Apacheの起動用スクリプト
/etc/httpd/conf/httpd.conf
設定ファイル
/usr/sbin/httpd
HTTPデーモン(Apacheの本体)
/var/log/httpd/access_log
アクセス全般のログを記録
/var/log/httpd/error_log
エラー発生時のログを記録
/var/www/cgi-bin/
CGIスクリプト
/var/www/html/
Webサイトのドキュメントルート
/var/www/icons/
アイコンファイル

2010.09.23
milk_btn_pagetop.png

 

FTPサーバvsftpdをインストールする

Webサーバへのファイル転送用にFTPサーバvsftpdをインストールします。

vsftpdのインストール

# yum -y install vsftpd

vsftpd.confの設定

設定ファイル/etc/vsftpd/vsftpd.confを編集します。

変更内容

  • anonymous_enable=NO
    • YESをNOにします。
    • anonymousログインを禁止します。
  • xferlog_enable=YES
    • YESのままとします。
  • xferlog_file=/var/log/vsftpd.log
    • コメントを外します。
    • ログの出力先を /var/log/vsftpd.log にします。
  • xferlog_std_format=NO
    • NOにします。
    • vsftpd独自フォーマットでログを出力するようにします。
  • ascii_upload_enable=YES
    • コメントを外します。
    • アスキーモードでのアップロードを許可します。
  • ascii_download_enable=YES
    • コメントを外します。
    • アスキーモードでのダウンロードを許可します。
  • ftpd_banner=Welcome to blah FTP service.
    • コメントを外します。
    • FTPログイン時にソフト名とバージョンが表示されないようにします。
  • chroot_list_enable=YES
    • コメントを外します。
    • ホームディレクトリより上層へのアクセスを許可するユーザのリストを有効にします。
  • ls_recurse_enable=YES
    • コメントを外します。
    • ディレクトリごと削除できるようにします。

追加する行

次の行を設定ファイルの最後に追加します。

  • chroot_local_user=YES
    • ホームディレクトリより上層へのアクセスを許可します。
  • use_localtime=YES
    • タイムスタンプ時間を日本時間にします。
  • pasv_enable=YES
    • パッシブFTPを有効にします。
  • pasv_addr_resolve=YES
    • PASVモード接続先IPアドレスをホスト名から取得します。
  • pasv_address=itlife.ddo.jp
    • PASVモード接続先IPアドレスが牽けるホスト名を指定します。
  • pasv_min_port=4000
    • PASVモード接続時の最小ポート番号を指定します。
  • pasv_max_port=4002
    • PASVモード接続時の最大ポート番号を指定します。

アクセス制限ユーザの登録

ホームディレクトリより上層へのアクセスを許可するユーザを登録します。
# echo [ユーザ名] >> /etc/vsftpd/chroot_list

FTPサーバへのアクセスを禁止するユーザを登録します。
# echo [ユーザ名] >> /etc/vsftpd/ftpusers

vsftpdの起動

vsftpdを起動します。
# /etc/rc.d/init.d/vsftpd start

vsftpdの自動起動を設定します。
# chkconfig vsftpd on

vsftpdの自動起動設定の確認をします。
# chkconfig --list vsftpd 
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off 

ポート開放

FTP用ポートの開放

ルータ側の設定でポート21番を開放にします。

PASV接続用ポートの開放

ルータ側の設定でPASV接続用ポート(4000~4002)を開放にします。

アクセス制限

vsftpdへアクセスできるホストを制限します。

サーバ自身からvsftpdへのアクセスを許可します。
# echo "vsftpd:127.0.0.1" >> /etc/hosts.allow

内部LAN(例:192.168.1.xxx)からvsftpdへのアクセスを許可します。
# echo "vsftpd:192.168.1." >> /etc/hosts.allow

vsftpdへの全てのアクセスを禁止します。
# echo "vsftpd:ALL" >> /etc/hosts.deny

vsftpdのディレクトリ構造

/etc/rc.d/init.d/vsftpd
vsftpdの起動用スクリプト
/etc/vsftpd/vsftpd.conf
vsftpdの設定ファイル
/etc/vsftpd/ftpusers
FTP接続を禁止するユーザを記述するファイル
/usr/sbin/vsftpd
FTPデーモン
/var/ftp
AnonymousFTP用ディレクトリ
/var/log/xferlog
ファイル転送のログを記録

2010.09.23
milk_btn_pagetop.png

 

サイトデータをアップロードする

BiND FOR WEBLiFE 3.5からHome Serverにサイトデータをアップロードします。

シンボリックリンク作成

BiND FOR WEBLiFE 3.5は/home/wwwに対してアップロードするようになっています。
/homeに/var/www/htmlへのシンボリックリンクを作成します。

# ln -s /var/www/html /home/www

BiND FOR WEBLiFE 3.5の設定

・サイトエディタ → 設定ボタンをクリックし、プロパティ設定画面を表示させます。
・サイト設定タブをクリックします。

サイトURL
http://itlife.ddo.jp/tabi/
FTPホスト
<Home ServerのIPアドレス>
ユーザーID
<FTPユーザID>
パスワード
<FTPパスワード>
サーバディレクトリ
/tabi/
オプション設定
ポート番号 21
PASVモード チェック

・テスト開始ボタンをクリックし、接続テストを行います。

サイトデータのアップロード

サイトエディタでアップロードボタンをクリックし、サイトデータをアップロードします。

milk_btn_pagetop.png