2011年05月

CentOS 5.6

CentOS 5.6 による自宅サーバ構築の個人的なメモです。

ネットワーク経由でインストール

作るCDは、boot用のCD1枚のみです。

FFFTP を使って、理研のサイト
理研 FTP

から
boot.iso

の boot.iso をダウンロードして CD に焼く。
そして、この CD からブートします。んで、…

ブート画面でEnter
boot.iso

「Japanese」選択
boot.iso

OK
boot.iso

「jp106」選択
boot.iso

「FTP」選択
boot.iso

「Enable IPv4 support」「Manual configuration」選択
「Enable IPv6 support」は選択しない
boot.iso

「IPアドレス」「ネットマスク」「デフォルトゲートウェイ」「ネームサーバ」を入力
「ネットマスク」はプリフィックスで。
boot.iso

FTPサイト名:「ftp.riken.jp」
CentOS ディレクトリ:「/Linux/centos/5.6/os/i386/」を入力
boot.iso

グラフィカルインストーラ起動
「次」
boot.iso

「選択したドライブ上のすべてのパーティションを削除してデフォルトレイアウトを作成します。」を選択
「次」
boot.iso

警告
「はい」
boot.iso

ホスト名入力
「次」
boot.iso

「システムクロックで UTC を使用」のチェックをはずす
「次」
boot.iso

root のパスワード設定
「次」
boot.iso

「Desktop - Gnome」のチェックをはずし、「今すぐカスタマイズする」を選択
「次」
boot.iso

「デスクトップ環境」を選択し、全てのチェックをはずす
boot.iso

「アプリケーション」を選択し、全てのチェックをはずす
boot.iso

「開発」を選択し、「開発ツール」のみチェック
boot.iso

「サーバー」を選択し、全てのチェックをはずす
boot.iso

「ベースシステム」を選択し、「ベース」のみチェック
そして、「オプションパッケージ」
boot.iso

「firstboot-tui」のチェックをはずして「閉じる」
boot.iso

「仮想化」を選択し、全てのチェックをはずす
boot.iso

「クラスタリング」を選択し、全てのチェックをはずす
boot.iso

「クラスタストレージ」を選択し、全てのチェックをはずす
boot.iso

「言語」を選択し、「日本語のサポート」」のみチェック
「次」
boot.iso

「次」
で、インストール開始
boot.iso

インストール完了
メディアを取り出して「再起動」
boot.iso

ちなみに、グラフィカルインストーラの画面コピーは「Shift」+「PrtSc」でとれます。取得に成功すると、画面中央にダイアログが出て、/root/anaconda-screenshots/ に png 形式で保存されます。


《 参考サイト 》
CentOS5インストール - CentOSで自宅サーバー構築

Poderosa を使って SSH サーバへリモート接続 (パスワード方式)

SSH サーバへは、外部から接続はしないので「パスワード方式」で済ませています。もちろん、ポート(22番)も開けていません。
Microsoft .NET Framework Version 2.0」と「Poderosa」をインストールし、とりあえず root でログインします。
Poderosa

Poderosa の設定内容は、Poderosa をインストールしたディレクトリの中にある「options.conf」というファイルに保存され、このファイルをコピーすることで別のコンピュータへ設定を引き継ぐことができます。なので、設定内容は特にメモっておきませんが、下記《 参考サイト 》と同様にしています。


《 参考サイト 》
WindowsからSSHサーバーへリモート接続(Poderosaパスワード方式ログイン編) - CentOSで自宅サーバー構築

管理者用ユーザを作成する

管理者用のユーザ名を haruka とすると…、
一般ユーザ haruka 作成

[root@server ~]# useradd haruka
[root@server ~]# passwd haruka

haruka だけが root になれるようにする
haruka を wheel グループに追加

[root@server ~]# usermod -G wheel haruka

コメントアウト解除

[root@server ~]# vi /etc/pam.d/su

‥‥‥‥
#Xauth    required    pam_wheel.so use_uid
‥‥‥‥

《 参考サイト 》
CentOS5初期設定 - CentOSで自宅サーバー構築

yum の初期設定を行う

yum-updatesd 停止

[root@server ~]# /etc/rc.d/init.d/yum-updatesd stop

yum-updatesd 削除

[root@server ~]# yum -y remove yum-updatesd

fastestmirror プラグインインストール

[root@server ~]# yum -y install yum-fastestmirror

インストール済パッケージの一括アップデート

[root@server ~]# yum -y update

yum-cron インストール

[root@server ~]# yum -y install yum-cron

パッケージ自動更新起動

[root@server ~]# /etc/rc.d/init.d/yum-cron start

パッケージ自動更新自動起動設定

[root@server ~]# chkconfig yum-cron on


《 参考サイト 》
CentOS5初期設定 - CentOSで自宅サーバー構築

SELinux の無効化

SELinux 状態確認→ Enforcing (有効)

[root@server ~]# getenforce
Enforcing

SELinux 無効化

[root@server ~]# setenforce 0

SELinux 状態確認→ Permissive (無効)

[root@server ~]# getenforce
Permissive

システム起動時に SELinux を無効化
SELinux 設定ファイル編集

[root@server ~]# vi /etc/sysconfig/selinux

変更

SELINUX=disabled


《 参考サイト 》
CentOS5初期設定 - CentOSで自宅サーバー構築

ファイアウォール停止

ルーターでブロックするためファイアウォールを停止する

[root@server ~]# /etc/rc.d/init.d/iptables stop

ファイアウォール自動起動解除

[root@server ~]# chkconfig iptables off


《 参考サイト 》
CentOS5初期設定 - CentOSで自宅サーバー構築

CPAN からネットワーク経由で Perl モジュールをインストール

今までは cpan2rpm を利用していたのですが、うまくいかない事が多かったので、今回は Perl の MCPAN コマンドからインストールしました。

最初の環境設定はほとんどデフォルトにしましたので、ほぼ「Enter」です。(青文字のみ入力)

[root@server ~]# perl -MCPAN -e shell

/usr/lib/perl5/5.8.8/CPAN/Config.pm initialized.


CPAN is the world-wide archive of perl resources. It consists of about
100 sites that all replicate the same contents all around the globe.
Many countries have at least one CPAN site already. The resources
found on CPAN are easily accessible with the CPAN.pm module. If you
want to use CPAN.pm, you have to configure it properly.

If you do not want to enter a dialog now, you can answer 'no' to this
question and I'll try to autoconfigure. (Note: you can revisit this
dialog anytime later by typing 'o conf init' at the cpan prompt.)

Are you ready for manual configuration? [yes] Enter


The following questions are intended to help you with the
configuration. The CPAN module needs a directory of its own to cache
important index files and maybe keep a temporary mirror of CPAN files.
This may be a site-wide directory or a personal directory.



First of all, I'd like to create this directory. Where?

CPAN build and cache directory? [/root/.cpan] Enter


If you want, I can keep the source files after a build in the cpan
home directory. If you choose so then future builds will take the
files from there. If you don't want to keep them, answer 0 to the
next question.



How big should the disk cache be for keeping the build directories
with all the intermediate files?

Cache size for build directory (in MB)? [10] Enter


By default, each time the CPAN module is started, cache scanning
is performed to keep the cache size in sync. To prevent from this,
disable the cache scanning with 'never'.

Perform cache scanning (atstart or never)? [atstart] Enter


To considerably speed up the initial CPAN shell startup, it is
possible to use Storable to create a cache of metadata. If Storable
is not available, the normal index mechanism will be used.

Cache metadata (yes/no)? [yes] Enter


The next option deals with the charset your terminal supports. In
general CPAN is English speaking territory, thus the charset does not
matter much, but some of the aliens out there who upload their
software to CPAN bear names that are outside the ASCII range. If your
terminal supports UTF-8, you say no to the next question, if it
supports ISO-8859-1 (also known as LATIN1) then you say yes, and if it
supports neither nor, your answer does not matter, you will not be
able to read the names of some authors anyway. If you answer no, names
will be output in UTF-8.

Your terminal expects ISO-8859-1 (yes/no)? [yes] Enter


If you have one of the readline packages (Term::ReadLine::Perl,
Term::ReadLine::Gnu, possibly others) installed, the interactive CPAN
shell will have history support. The next two questions deal with the
filename of the history file and with its size. If you do not want to
set this variable, please hit SPACE RETURN to the following question.

File to save your history? [/root/.cpan/histfile] Enter
Number of lines to save? [100] Enter


The CPAN module can detect when a module that which you are trying to
build depends on prerequisites. If this happens, it can build the
prerequisites for you automatically ('follow'), ask you for
confirmation ('ask'), or just ignore them ('ignore'). Please set your
policy to one of the three values.

Policy on building prerequisites (follow, ask or ignore)? [ask] Enter


The CPAN module will need a few external programs to work properly.
Please correct me, if I guess the wrong path for a program. Don't
panic if you do not have some of them, just press ENTER for those. To
disable the use of a download program, you can type a space followed
by ENTER.

Where is your gzip program? [/bin/gzip] Enter
Where is your tar program? [/bin/tar] Enter
Where is your unzip program? [/usr/bin/unzip] Enter
Where is your make program? [/usr/bin/make] Enter
Warning: links not found in PATH
Where is your links program? [] Enter
Where is your wget program? [/usr/bin/wget] Enter
Warning: ncftpget not found in PATH
Where is your ncftpget program? [] Enter
Warning: ncftp not found in PATH
Where is your ncftp program? [] Enter
Where is your ftp program? [/usr/kerberos/bin/ftp] Enter
Where is your gpg program? [/usr/bin/gpg] Enter
What is your favorite pager program? [/usr/bin/less] Enter
What is your favorite shell? [/bin/bash] Enter


Every Makefile.PL is run by perl in a separate process. Likewise we
run 'make' and 'make install' in processes. If you have any
parameters (e.g. PREFIX, LIB, UNINST or the like) you want to pass
to the calls, please specify them here.

If you don't understand this question, just press ENTER.

Parameters for the 'perl Makefile.PL' command?
Typical frequently used settings:

    PREFIX=~/perl       non-root users (please see manual for more hints)

Your choice:  [] Enter
Parameters for the 'make' command?
Typical frequently used setting:

    -j3              dual processor system

Your choice:  [] Enter
Parameters for the 'make install' command?
Typical frequently used setting:

    UNINST=1         to always uninstall potentially conflicting files

Your choice:  [] UNINST=1


Sometimes you may wish to leave the processes run by CPAN alone
without caring about them. As sometimes the Makefile.PL contains
question you're expected to answer, you can set a timer that will
kill a 'perl Makefile.PL' process after the specified time in seconds.

If you set this value to 0, these processes will wait forever. This is
the default and recommended setting.

Timeout for inactivity during Makefile.PL? [0] Enter


If you're accessing the net via proxies, you can specify them in the
CPAN configuration or via environment variables. The variable in
the $CPAN::Config takes precedence.

Your ftp_proxy? Enter
Your http_proxy? Enter
Your no_proxy? Enter
You have no /root/.cpan/sources/MIRRORED.BY
  I'm trying to fetch one
LWP not available
CPAN: Net::FTP loaded ok
Fetching with Net::FTP:
  ftp://ftp.perl.org/pub/CPAN/MIRRORED.BY


Now we need to know where your favorite CPAN sites are located. Push
a few sites onto the array (just in case the first on the array won't
work). If you are mirroring CPAN to your local workstation, specify a
file: URL.

First, pick a nearby continent and country (you can pick several of
each, separated by spaces, or none if you just want to keep your
existing selections). Then, you will be presented with a list of URLs
of CPAN mirrors in the countries you selected, along with previously
selected URLs. Select some of those URLs, or just keep the old list.
Finally, you will be prompted for any extra URLs -- file:, ftp:, or
http: -- that host a CPAN mirror.

(1) Africa
(2) Asia
(3) Central America
(4) Europe
(5) North America
(6) Oceania
(7) South America
Select your continent (or several nearby continents) [] 2
Sorry! since you don't have any existing picks, you must make a
geographic selection.

(1) Bangladesh
(2) China
(3) Hong Kong
(4) India
(5) Indonesia
(6) Israel
(7) Japan
(8) Kazakhstan
(9) Pakistan
(10) Republic of Korea
(11) Russia
(12) Saudi Arabia
(13) Singapore
(14) Taiwan
(15) Thailand
(16) Turkey
Select your country (or several nearby countries) [] 7
Sorry! since you don't have any existing picks, you must make a
geographic selection.

(1) ftp://ftp.dti.ad.jp/pub/lang/CPAN/
(2) ftp://ftp.jaist.ac.jp/pub/CPAN/
(3) ftp://ftp.kddilabs.jp/CPAN/
(4) ftp://ftp.nara.wide.ad.jp/pub/CPAN/
(5) ftp://ftp.riken.jp/lang/CPAN/
(6) ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
(7) ftp://ftp.u-aizu.ac.jp/pub/CPAN/
(8) ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
Select as many URLs as you like (by number),
put them on one line, separated by blanks, e.g. '1 4 5' [] 6 1 3

Enter another URL or RETURN to quit: [] Enter
New set of picks:
  ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
  ftp://ftp.dti.ad.jp/pub/lang/CPAN/
  ftp://ftp.kddilabs.jp/CPAN/


commit: wrote /usr/lib/perl5/5.8.8/CPAN/Config.pm
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')

cpan>

Jcode インストール

cpan> install Jcode

MIME::Base64 インストール

cpan> install MIME::Base64

ちなみに、再度はじめから環境設定をしたい場合は、

cpan> o conf init


《 参考サイト 》
CPAN Sites - www.cpan.org

RPMforge リポジトリ導入

yum-priorities インストール

[root@server ~]# yum -y install yum-priorities

標準リポジトリ設定ファイル編集

[root@server ~]# vi /etc/yum.repos.d/CentOS-Base.repo

追加

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=1

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=1

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=1

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

RPMforge リポジトリ導入
RPMforge の GPG キーダウンロード

[root@server ~]# wget http://apt.sw.be/RPM-GPG-KEY.dag.txt

GPG キーインストール

[root@server ~]# rpm --import RPM-GPG-KEY.dag.txt

ダウンロードしたファイルを削除

[root@server ~]# rm -f RPM-GPG-KEY.dag.txt

RPMforge リポジトリダウンロード

[root@server ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm

RPMforge リポジトリインストール

[root@server ~]# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.i386.rpm

rpmforge-release アップデート

[root@server ~]# yum -y update rpmforge-release


《 参考サイト 》
RPMforgeリポジトリ導入(RPMforge) - CentOSで自宅サーバー構築
RPMforge EPEL Remiリポジトリインストール | CentOSサーバー構築マニュアル

Clam AntiVirus インストール

[root@server ~]# yum -y install clamd

clamd 設定ファイル編集

[root@server ~]# vi /etc/clamd.conf

root 権限で動作するようにする(コメントアウト

#User clamav

clamd 起動

[root@server ~]# /etc/rc.d/init.d/clamd start

clamd 自動起動設定

[root@server ~]# chkconfig clamd on

ウィルス定義ファイル更新機能の有効化

[root@server ~]# sed -i 's/Example/#Example/g' /etc/freshclam.conf

ウィルス定義ファイル最新化

[root@server ~]# freshclam

ウィルススキャン実行スクリプト作成

[root@server ~]# vi clamscan

#!/bin/bash

PATH=/usr/bin:/bin

# clamd update
yum -y update clamd > /dev/null 2>&1

# excludeopt setup
excludelist=/root/clamscan.exclude
if [ -s $excludelist ]; then
    for i in `cat $excludelist`
    do
        if [ $(echo "$i"|grep \/$) ]; then
            i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
            excludeopt="${excludeopt} --exclude-dir=^$i"
        else
            excludeopt="${excludeopt} --exclude=^$i"
        fi
    done
fi

# signature update
freshclam > /dev/null

# virus scan
CLAMSCANTMP=`mktemp`
clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \

# report mail send
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root
rm -f $CLAMSCANTMP

ウィルススキャン実行スクリプトへ実行権限付加

[root@server ~]# chmod +x clamscan

/proc ディレクトリをスキャン対象外にする

[root@server ~]# echo "/proc/" >> clamscan.exclude

/sys ディレクトリをスキャン対象外にする

[root@server ~]# echo "/sys/" >> clamscan.exclude

ウィルススキャン実行スクリプトを毎日自動実行されるディレクトリへ移動

[root@server ~]# mv clamscan /etc/cron.daily/


《 参考サイト 》
アンチウィルスソフト導入(Clam AntiVirus) - CentOSで自宅サーバー構築

NTP サーバ構築

NTP サーバインストール

[root@server ~]# yum -y install ntp

ntp 設定ファイル編集

[root@server ~]# vi /etc/ntp.conf

内部からの時刻同期を許可(追加
時刻同期先 NTP サーバを変更

# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server -4 ntp.nict.jp
server -4 ntp.jst.mfeed.ad.jp
server -4 プロバイダの NTP サーバ名

一度、手動で時刻を合わせる

[root@server ~]# ntpdate ntp.nict.jp

NTP サーバ起動

[root@server ~]# /etc/rc.d/init.d/ntpd start

NTP サーバ自動起動設定

[root@server ~]# chkconfig ntpd on

NTP サーバへの時刻同期状態確認

[root@server ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-a2.nict.go. .NICT.           1 u  143 1024  377    9.044   -0.436   0.835
+ntp3.jst.mfeed. 210.173.160.86   2 u   30 1024  377    8.201    0.926   0.108
 orion.asahi-net 130.69.251.23    2 u 122m 1024  200    9.498    0.864   0.045
 LOCAL(0)        .LOCL.          10 l   64   64  377    0.000    0.000   0.002

ntpq が出力する項目の意味

remote:タイムサーバ名と、そのサーバがどのような立場にあるかを表示します。
refid:remote がどこから時刻を同期しているかを表します。不明の場合は 0.0.0.0 を示します。
st:サーバの階層を示す stratum 番号が表示されます。一般に、この番号が大きくなるほど、時間の信頼性が薄らいでいきます。
t:階層の種類です。( l: local, u: unicast, m: multicast, b:broadcast )
when:remote から最後にパケットを受け取ってからの時間です。
poll:ポーリング間隔を表示します。
reach:到達可能レジスタデータを8進数で示すそうです。
delay:時間の遅延見積もりをミリ秒単位で表示します。
offset:remote との時刻のずれをミリ秒単位で表示します。
jitter:remote の分散 (ばらつき) をミリ秒単位で表示するそうです。

サーバの状態を表す記号
remote で示されたサーバ名の先頭には、そのサーバをどのように認識しているかを示す記号が付加されています。

「   」:距離が遠いために使用しないサーバです。
「 x 」:falseticker 検査で捨てられたサーバです。
「 . 」:参照サーバが多いために使用しないサーバです。
「 - 」:クラスタリング検査で捨てられたサーバです。
「 + 」:いつでも使用可能なサーバです。
「 # 」:同期距離は遠いものの参照可能なサーバです。
「 * 」:同期中のサーバです。
「 o 」:同期中のサーバです。(同期は PPS 信号から間接的に行なう)


《 参考サイト 》
NTPサーバー構築(ntpd) - CentOSで自宅サーバー構築

DNS サーバ構築 ( BIND )

今回は再構築のため、以下の環境条件は整っていますので、この段階で内部および外部向け DNS サーバを構築しています。
・固定IPアドレス : ASAHI ネットの固定 IP アドレスオプションを利用。
・独自ドメイン : VALUE DOMAIN で取得済み。及び、ネームサーバの変更済み
・セカンダリ DNS : マイハマネットにて利用登録済み。

BIND インストール

[root@server ~]# yum -y install bind bind-chroot caching-nameserver

BIND 設定ファイルコピー

[root@server ~]# cp /var/named/chroot/etc/named.caching-nameserver.conf /var/named/chroot/etc/named.conf

BIND 設定ファイル所有グループ変更

[root@server ~]# chgrp named /var/named/chroot/etc/named.conf

BIND 設定ファイル編集

[root@server ~]# vi /var/named/chroot/etc/named.conf

追加
forwarders には、プロバイダから通知された DNS サーバの IP アドレス(プライマリ及びセカンダリ)を指定

//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver 
// (as a localhost DNS resolver only). 
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on 
// caching-nameserver package upgrade.
//
options {
	#listen-on port 53 { 127.0.0.1; };
	#listen-on-v6 port 53 { ::1; };
	version "unknown";
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";

	// Those options should be used carefully because they disable port
	// randomization
	// query-source    port 53;	
	// query-source-v6 port 53;

	allow-query     { localhost; localnets; };
	allow-query-cache { localhost; localnets; };
	forwarders{
		xxx.xxx.xxx.xxx;
		xxx.xxx.xxx.xxx;
	};
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
	category lame-servers { null; };
};
view localhost_resolver {
	match-clients 	   { localhost; };
	match-destinations { localhost; };
	recursion yes;
	include "/etc/named.rfc1912.zones";
	include "/etc/named.wave440.com.zone";
};

view "internal" {
	match-clients { localnets; };
	match-destinations { localnets; };
	recursion yes;
	include "/etc/named.rfc1912.zones";
	include "/etc/named.wave440.com.zone";
};

view "external" {
	match-clients { any; };
	match-destinations { any; };
	recursion no;
	include "/etc/named.wave440.com.zone.wan";
};

wave440.com の内部向けゾーン定義ファイル作成

[root@server ~]# vi /var/named/chroot/etc/named.wave440.com.zone

zone "wave440.com" {
        type master;
        file "wave440.com.db";
};
zone "1.168.192.in-addr.arpa" {
        type master;
        file "1.168.192.in-addr.arpa.db";
};

wave440.com の外部向けゾーン定義ファイル作成

[root@server ~]# vi /var/named/chroot/etc/named.wave440.com.zone.wan

allow-transfer には、セカンダリネームサーバ( ns1.maihama-net.com 及び ns2.maihama-net.com )の IP アドレスを設定

zone "wave440.com" {
        type master;
        file "wave440.com.db.wan";
        allow-query { any; };
	allow-transfer {
		123.50.202.226;
		198.104.58.211;
	};
	notify yes;
};

IPv4 のみ有効にする

[root@server ~]# echo OPTIONS="-4" >> /etc/sysconfig/named

ルートゾーン( named.ca )最新化

[root@server ~]# dig . ns @198.41.0.4 > /var/named/chroot/var/named/named.ca

ルートゾーン自動更新スクリプト作成

[root@server ~]# vi named.root_update

#!/bin/bash

new=`mktemp`
errors=`mktemp`

dig . ns @198.41.0.4 > $new 2> $errors

if [ $? -eq 0 ]; then
    sort_new=`mktemp`
    sort_old=`mktemp`
    diff_out=`mktemp`
    sort $new > $sort_new
    sort /var/named/chroot/var/named/named.ca > $sort_old
    diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
    if [ $? -ne 0 ]; then
        (
         echo '-------------------- old named.root --------------------'
         cat /var/named/chroot/var/named/named.ca
         echo
         echo '-------------------- new named.root --------------------'
         cat $new
         echo '---------------------- difference ----------------------'
         cat $diff_out
        ) | mail -s 'named.root updated' root
        cp -f $new /var/named/chroot/var/named/named.ca
        chown named. /var/named/chroot/var/named/named.ca
        chmod 644 /var/named/chroot/var/named/named.ca
        /etc/rc.d/init.d/named restart > /dev/null
    fi
    rm -f $sort_new $sort_old $diff_out
else
    cat $errors | mail -s 'named.root update check error' root
fi
rm -f $new $errors

スクリプトへ実行権限付加

[root@server ~]# chmod 700 named.root_update

スクリプトを毎月自動実行されるディレクトリへ移動

[root@server ~]# mv named.root_update /etc/cron.monthly/

内部向け正引きゾーンデータベース作成

[root@server ~]# vi /var/named/chroot/var/named/wave440.com.db

$TTL	86400
@	IN	SOA	wave440.com.	root.wave440.com.(
				2011051501	; Serial
				28800		; Refresh
				14400		; Retry
				3600000		; Expire
				86400 )		; Minimum
	IN NS		wave440.com.
	IN MX 10	wave440.com.
@	IN A		192.168.1.50
*	IN A		192.168.1.50

内部向け逆引きゾーンデータベース作成

[root@server ~]# vi /var/named/chroot/var/named/1.168.192.in-addr.arpa.db

$TTL	86400
@	IN	SOA	wave440.com.	root.wave440.com.(
				2011051501	; Serial
				28800		; Refresh
				14400		; Retry
				3600000		; Expire
				86400 )		; Minimum
	IN NS		wave440.com.
50	IN PTR		wave440.com.

外部向け正引きゾーンデータベース作成

[root@server ~]# vi /var/named/chroot/var/named/wave440.com.db.wan

xxx.xxx.xxx.xxx は、サーバのグローバル IP アドレス

$TTL	86400
@	IN	SOA	ns1.wave440.com.	root.wave440.com.(
				2011051501	; Serial
				7200		; Refresh
				7200		; Retry
				2419200		; Expire
				86400 )		; Minimum
	IN NS		ns1.wave440.com.
	IN NS		ns1.maihama-net.com.
	IN NS		ns2.maihama-net.com.
	IN MX 10	wave440.com.
ns1	IN A		xxx.xxx.xxx.xxx
@	IN A		xxx.xxx.xxx.xxx
www	IN A		xxx.xxx.xxx.xxx
ftp	IN A		xxx.xxx.xxx.xxx
mail	IN A		xxx.xxx.xxx.xxx
server	IN A		xxx.xxx.xxx.xxx
wave440.com. IN TXT "v=spf1 ip4:xxx.xxx.xxx.xxx ~all"

BIND 起動

[root@server ~]# /etc/rc.d/init.d/named start

BIND 自動起動設定

[root@server ~]# chkconfig named on

※ルータの設定で、53番ポートへの UDP と TCP のアクセスをサーバに転送するようにする

サーバ自身の問合せ先 DNS サーバを自分自身に変更

[root@server ~]# echo "nameserver 127.0.0.1" > /etc/resolv.conf

※ルータの DHCP 設定で DNS サーバの IP アドレスを Linux サーバの IP アドレスに変更する

※Linux サーバ⇒クライアントの順に再起動し、問合せ先 DNS サーバの変更を反映させる


《 参考サイト 》
VALUE DOMAIN:バリュードメイン ネームサーバーの変更の操作手順
DNSサーバー構築(BIND) - CentOSで自宅サーバー構築
intoDNS: checks DNS and mail servers health

Web サーバ構築 ( Apache )

httpd インストール

[root@server ~]# yum -y install httpd

php53 , php53-mbstring , php53-mysql インストール

[root@server ~]# yum -y install php53 php53-mbstring php53-mysql

httpd 設定ファイル編集

[root@server ~]# vi /etc/httpd/conf/httpd.conf

エラーページ等でOS名を表示しないようにする(変更

ServerTokens Prod

エラーページ等に表示される管理者メールアドレスを指定(変更

ServerAdmin webmaster@wave440.com

サーバ名を指定(変更とコメントアウト解除

#XServerName www.wave440.com:80

CGI , SSI の許可と .htaccess の許可(変更

<Directory "/var/www/html">
‥‥‥
    Options Indexes FollowSymLinks
    ↓
    Options Includes ExecCGI FollowSymLinks
‥‥‥
    AllowOverride None
    ↓
    AllowOverride All

長すぎる URI (414エラー) はログに記録しない(変更

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

worm からのアクセスをログに記録しない(追加
内部からのアクセスをログに記録しない(追加
自ホストからのアクセスをログに記録しない(追加
上記以外のアクセスをログに記録する(追加

#
# For a single logfile with access, agent, and referer information
# (Combined Logfile Format), use the following directive:
#
SetEnvIf Request_URI "default\.ida" no_log
SetEnvIf Request_URI "cmd\.exe" no_log
SetEnvIf Request_URI "root\.exe" no_log
SetEnvIf Request_URI "Admin\.dll" no_log
SetEnvIf Request_URI "NULL\.IDA" no_log

SetEnvIf Remote_Addr 192.168.1 no_log
SetEnvIf Remote_Addr 127.0.0.1 no_log
CustomLog logs/access_log combined env=!no_log

エラーページ等で Apache のバージョンを表示しないようにする(変更

ServerSignature Off

icons ディレクトリのファイル一覧を表示しないようにする(削除

#
Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

#

文字コード UTF-8 指定でなければコメントアウト

#AddDefaultCharset UTF-8

CGI スクリプトに .pl を追加(追加とコメントアウト解除

#XAddHandler cgi-script .cgi .pl

テストページ削除

[root@server ~]# rm -f /etc/httpd/conf.d/welcome.conf
[root@server ~]# rm -f /var/www/error/noindex.html

/usr/local/bin/perl から /usr/bin/perl へリンクをはる

[root@server ~]# ln -s /usr/bin/perl /usr/local/bin/perl

確認

[root@server ~]# whereis perl

ドキュメントルート所有者変更(所有者 haruka の場合)

[root@server ~]# chown haruka. /var/www/html/

確認

[root@server ~]# ll /var/www/

Webサーバ起動

[root@server ~]# /etc/rc.d/init.d/httpd start

自動起動設定

[root@server ~]# chkconfig httpd on

ルータのポート80番を OPEN する


《 参考サイト 》
Webサーバー構築(Apache) - CentOSで自宅サーバー構築

PHP 設定ファイル編集

[root@server ~]# vi /etc/php.ini

変更追加

PHP タグの <?php を <? と省略して使用できるようにする
short_open_tag = Off で省略形を使用するとソースが表示されてしまったりします

short_open_tag = Off
    ↓
short_open_tag = On

output_buffering = 4096
    ↓
output_buffering = Off

エラーが画面上に表示されるようにする

display_errors = Off
    ↓
display_errors = On

;default_charset = "iso-8859-1"
    ↓ コメントアウト解除
default_charset = "UTF-8"

;date.timezone =
    ↓ コメントアウト解除
date.timezone = Asia/Tokyo

;mbstring.language = Japanese
    ↓ コメントアウト解除
mbstring.language = Japanese

;mbstring.internal_encoding = EUC-JP
    ↓ コメントアウト解除
mbstring.internal_encoding = UTF-8

;mbstring.http_input = auto
    ↓ コメントアウト解除
mbstring.http_input = UTF-8

;mbstring.http_output = SJIS
    ↓ コメントアウト解除
mbstring.http_output = UTF-8

;mbstring.encoding_translation = Off
    ↓ コメントアウト解除
mbstring.encoding_translation = On

;mbstring.detect_order = auto
    ↓ コメントアウト解除
mbstring.detect_order = auto

;mbstring.substitute_character = none;
    ↓ コメントアウト解除
mbstring.substitute_character = "?";

Web サーバ間通信内容暗号化 ( Apache + mod_SSL )

mod_ssl インストール

[root@server ~]# yum -y install mod_ssl

ディレクトリ移動

[root@server ~]# cd /etc/pki/tls/certs/

サーバ用証明書有効期限を1年から10年に変更

[root@server certs]# sed -i 's/365/3650/g' Makefile

サーバ用秘密鍵・証明書作成
入力及び Enter

[root@server certs]# make server.crt
umask 77 ; \
        /usr/bin/openssl genrsa -des3 1024 > server.key
Generating RSA private key, 1024 bit long modulus
....++++++
.........++++++
e is 65537 (0x10001)
Enter pass phrase:任意のパスワードを応答
Verifying - Enter pass phrase:任意のパスワードを応答(確認)
umask 77 ; \
        /usr/bin/openssl req -utf8 -new -key server.key -x509 -days 3650 -out server.crt -set_serial 0
Enter pass phrase for server.key:上記で応答したパスワードを応答
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Edogawa
Organization Name (eg, company) [My Company Ltd]:guitar site WAVE
Organizational Unit Name (eg, section) []:Enter
Common Name (eg, your name or your server's hostname) []:www.wave440.com
Email Address []:webmaster@wave440.com

サーバ用秘密鍵からパスワード削除
入力

[root@server certs]# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:サーバ用秘密鍵・証明書作成時のパスワード応答
writing RSA key

ApacheSSL 設定ファイル編集

[root@server certs]# vi /etc/httpd/conf.d/ssl.conf

変更

SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    ↓ 変更
SSLCertificateFile /etc/pki/tls/certs/server.crt

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    ↓ 変更
SSLCertificateKeyFile /etc/pki/tls/certs/server.key

コメントアウト解除

# General setup for the virtual host, inherited from global configuration
#XDocumentRoot "/var/www/html"

Apache 再起動

[root@server certs]# /etc/rc.d/init.d/httpd restart

ルータのポート443番を OPEN する


《 参考サイト 》
Webサーバー間通信内容暗号化(Apache+mod_SSL) - CentOSで自宅サーバー構築

FTP サーバ構築( vsftpd )

内部からのアクセスしかしないので、ルータのポート開放および SSL による暗号化通信の設定などはしていません。

vsftpd インストール

[root@server ~]# yum -y install vsftpd

vsftpd 設定ファイル編集

[root@server ~]# vi /etc/vsftpd/vsftpd.conf

変更コメントアウト解除および追加

匿名ユーザはログインさせない

anonymous_enable=NO

ローカルユーザーからのFTP接続を有効にする

local_enable=YES

ログの取得を行う

xferlog_enable=YES

vsftpd 形式で取得

xferlog_std_format=NO

FTP のすべての要求と応答を記録する

log_ftp_protocol=YES

アスキーモードでアップロード・ダウンロードを許可する

#Xascii_upload_enable=YES
#Xascii_download_enable=YES

FTP ログイン時にソフト名とバージョンが表示されないようにする

#Xftpd_banner=Welcome to blah FTP service.

デフォルトでホームディレクトリより上層へのアクセスを禁止する

chroot_local_user=YES

ホームディレクトリより上層へのアクセスを許可するユーザのリストの有効化

#Xchroot_list_enable=YES

ホームディレクトリより上層へのアクセスを許可するユーザのリスト

#Xchroot_list_file=/etc/vsftpd/chroot_list

ディレクトリを削除可能にする

#Xls_recurse_enable=YES

PAM 認証のサービス名指定

pam_service_name=vsftpd

アクセスユーザーリストファイルの使用

userlist_enable=YES

特定のユーザーアカウントにのみFTP接続を許可する

userlist_deny=NO

tcp_wrappers を使用( /etc/hosts.allow と /etc/hosts.deny による制限を行う)

tcp_wrappers=YES

タイムスタンプ時間を日本時間に合わせる

use_localtime=YES

パッシブモード接続を許可する

pasv_enable=YES

データコネクションと制御コネクションとが同じIPアドレスからの接続であるかのチェックをする

pasv_promiscuous=NO

パッシブモードの使用ポート範囲設定

pasv_min_port=50000
pasv_max_port=50030

ホームディレクトリより上層へのアクセスを許可するユーザ( haruka )の登録

[root@server ~]# echo haruka >> /etc/vsftpd/chroot_list

ログインを許可するユーザ( haruka )の登録

[root@server ~]# vi /etc/vsftpd/user_list

追加

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
#root
#bin
#daemon
#adm
#lp
#sync
#shutdown
#halt
#mail
#news
#uucp
#operator
#games
#nobody
haruka

ホームディレクトリより上層へのアクセスができないユーザのタイムスタンプを日本時間にする
タイムゾーン関連の情報ファイル /etc/localtime へアクセス出来ないので、各ユーザのホームディレクトリにコピーを作成する
【新規ユーザ対処】

[root@server ~]# mkdir /etc/skel/etc

[root@server ~]# cp /etc/localtime /etc/skel/etc/

【既存ユーザ対処】
localtimeセットアップスクリプト作成

[root@server ~]# vi localtimset

#!/bin/bash

for user in `ls /home`
do
   id $user > /dev/null 2>&1
   if [ $? -eq 0 ]; then
        grep $user /etc/vsftpd/chroot_list > /dev/null 2>&1
        if [ $? -ne 0 ] && [ ! -f /home/$user/etc/localtime ]; then
            mkdir -p /home/$user/etc
            cp /etc/localtime /home/$user/etc
            echo $user
        fi
   fi
done

localtimeセットアップスクリプト実行

[root@server ~]# sh localtimset

localtimeセットアップスクリプト削除

[root@server ~]# rm -f localtimset

vsftpd起動

[root@server ~]# /etc/rc.d/init.d/vsftpd start

vsftpd自動起動設定

[root@server ~]# chkconfig vsftpd on

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

[root@server ~]# echo "vsftpd:127.0.0.1" >> /etc/hosts.allow
[root@server ~]# echo "vsftpd:192.168.1." >> /etc/hosts.allow
[root@server ~]# echo "vsftpd:ALL" >> /etc/hosts.deny

※接続エラーについて※
入力

【成功】

C:¥>ftp 192.168.1.50
Connected to 192.168.1.50.
220 Welcome to blah FTP service.
User (192.168.1.50:(none)): ユーザ名
331 Please specify the password.
Password:(パスワード)
230 Login successful.

【tcp_wrappers ( hosts.allow , hosts.deny )による制限】

C:¥>ftp 192.168.1.50
Connected to 192.168.1.50.
421 Service not available.

【chroot_list ファイルが無い】

C:¥>ftp 192.168.1.50
Connected to 192.168.1.50.
220 Welcome to blah FTP service.
User (192.168.1.50:(none)): ユーザ名
331 Please specify the password.
Password:(パスワード)
500 OOPS: could not open chroot() list file:/etc/vsftpd/chroot_list
Login failed.

デフォルトで chroot_list ファイルが存在しません。登録するユーザがいなくても作成が必要です。

[root@server ~]# touch /etc/vsftpd/chroot_list

【user_list で拒否される】
Password 入力前に弾かれます

C:¥>ftp 192.168.1.50
Connected to 192.168.1.50.
220 Welcome to blah FTP service.
User (192.168.1.50:(none)): ユーザ名
530 Permission denied.
Login failed.

【PAM による認証サービスで拒否される( /etc/vsftpd/ftpusers )】
Password 入力後に弾かれます

C:¥>ftp 192.168.1.50
Connected to 192.168.1.50.
220 Welcome to blah FTP service.
User (192.168.1.50:(none)): ユーザ名
331 Please specify the password.
Password:(パスワード)
530 Login incorrect.
Login failed.

ちなみに、user_list → ftpusers の順でふるいわけが行われます。
また、user_list と ftpusers にデフォルトで登録されているユーザ名は同じものです。user_list の編集の際、デフォルトで登録されているユーザ名を全てコメントアウトし拒否としましたが、コメントアウトしなくとも ftpusers で拒否されます。但し、パスワード入力後に弾かれることとなります。


《 参考サイト 》
FTPサーバー構築(vsftpd) - CentOSで自宅サーバー構築
FTPサーバ vsftpdの設定(vsftpd.conf)
vsftpdの設定(vsftpd.conf)
FC4/vsftpd/3.vsftpd の設定変更方法や便利技 - Pocketstudio.jp Linux Wiki

- guitar site WAVE -