VMware ESXi 3.5環境にHome Serverを構築する
VMware ESXi 3.5 Update 3環境にCentOS 5でHome Serverを構築します。
CentOS 5をインストールする
CentOS 5を設定する
NTPサーバをインストールする
ルータを設定する
ファイアウォールを設定する
Dynamic DO!でドメインを取得する
ダイナミックDNSのIPアドレスを自動更新する
WebサーバApacheをインストールする
FTPサーバvsftpdをインストールする
サイトデータをアップロードする
CentOS 5をインストールする
CentOS 5のインストール
VMware ESXi 3.5 Updata 3の環境にCentOS 5をインストールします。
VMware ESXi 3.5 Update 3にCentOS 5をインストールする
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
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
#
ルータを設定する
Home Serverを公開するには、ルータを操作し、必要なポートを開放し、外部からのアクセスを許可する必要があります。
ブロードバンドルータにより設定方法が異なります。
La Fonera+ DD-WRT
La Fonera+ DD-WRTブロードバンドルータを使う
WHR-HP-AMPG DD-WRT
WHR-HP-AMPG DD-WRTブロードバンドルータを使う
Corega BAR SW-4P HG
ブロードバンドルータCorega BAR SW-4P HGを使う
Planex MZK-W04NU
無線LANルータPlanex MZK-W04NUを使う
ファイアウォールを設定する
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
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アドレスが入ります。
- パスワードを入力して「更新」をクリックします。
登録内容の変更
登録内容を変更する場合は、「ログイン」してから行います。
ダイナミック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最終更新日時をチェックし、更新が正しく行われていることを確認します。
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/ |
アイコンファイル
|
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 |
ファイル転送のログを記録
|
サイトデータをアップロードする
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モード チェック
|
・テスト開始ボタンをクリックし、接続テストを行います。
サイトデータのアップロード
サイトエディタでアップロードボタンをクリックし、サイトデータをアップロードします。