更新日: "2009年07月11日"

おうちサーバのあれこれ

私のおうちサーバ(変なネーミングですが、意味は分かりますよね。)は、FreeBSD を使っています。
ここでは、設定等のメモを書いていこうと思います。

ここでは、FreeBSD-4.X-Release を前提にしています。
2008年06月05日時点での最新の 6.3-Release 7.0-Release とは
設定等が大幅に違う部分がありますので、注意してください。

サーバ利用に使うプログラムのマニュアル等を置いてます。
apache

[TOP] [戻る]
目次

1. FreeBSD のインストール

Release 版しかインストールしたことがないので、何も書けません。(^^;
-Stable や -Current を入れてみたいのですが、make するにはちょっと厳しいマシンスペックなのです。
実は、make の仕方がよく分からないというのが正直なところです。

1.1 DOS Partition からインストール

たいてい、雑誌に付録の CD-ROM からインストールするのですが、最近は DVD になってしまって、DVD ドライブを持ってない私は困ってしまいました。
そこで、FTP サイトからダウンロードして、CD-R を焼いていたのですが、焼くのも面倒になったので、DOS Partition からインストールしました。

前置きが長くなりましたが、やり方は簡単で、
C:\freebsd
にダウンロード一式を置いてやれば OK です。

1.2 PXE を利用したインストール

FDD も CDD/DVDD もないPCにインストールする場合、色々選択肢はあります。
1.HDを入れ替える。
2.PXEを利用する。

1.のパターンを今まで使っていましたが、母艦となるPCのHDがS-ATAになってしまい、HDを入れ替えられなくなってしまいました。
そこで、PC を LAN からブートできる場合のうち、よくある PXE を利用してインストールします。

1.2.1 準備及び確認事項

1.インストールするPC(以降クライアントPC)でPXE が動作するようにBIOSを設定

起動順位をHDDよりLANの方を先にしておきます。

2.クライアントPCのMACアドレスをメモします。

これは、PXEの動作時に表示されます。例) MAC 00:00:21:98:3B:12

3.FreeBSD のCDまたはISOイメージを準備

ISOイメージをCDに焼いても、そのままでもOKです。
ISOイメージのままの場合、下記のように、ISOイメージをマウントする必要があります。

FreeBSD 4.X系のCDのISOイメージは ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/ISO-IMAGES/ にあります。

ちなみに、4.11のdisc1はgnomeとkdeの2種類ありますが、
ウィンドーマネジャーが違うだけなので、
X11を使うのでなければ、どちらでもOKです。

また、disc2はブートCDではなく、主にpackagesが入っているだけなので、
インストールには、上記disc1を使います。

4.ルーターの設定
ルーターのDHCPは無効にしておきます。

1.2.2 サーバーPCの設定

母艦となるPC(サーバーPC)には
1.tftp
2.DHCP
3.NFS
が動作している必要があります。

1.2.2.1 tftpの設定

tftpの設定は割と簡単で
/etc/inetd.conf で
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /cdrom/boot
のように、tftp の行を生かしてやります。

kill -HUP `cat /var/run/inetd.pid` すると inetd が再起動します。

/etc/hosts.allow で許可するのをよく忘れるのですが、
tftpd : localhost : allow
tftpd : 127.0.0.1 : allow
tftpd : 192.168.0.0/225.225.225.0 : allow
tftpd : ALL : deny
で良いはずですが、うまくいかなかったので、
インストールする間まで、
ALL : ALL : allow 
の一行にしています。ただし、これはセキュリティ上非常に危険なので、インストールが終れば、すぐに元に戻します。

1.2.2.2 NFSの設定

/etc/rc.conf で
nfs_server_enable="YES"
portmap_enable="YES"
とします。

/etc/exports で
/cdrom -network 192.168.0.0 -mask 255.255.255.0
とします。

1.2.2.3 DHCPのインストールと設定

1.2.2.3.1 DHCPのインストール

/usr/ports/net/isc-dhcp3-server でインストール
FreeBSD 4.X系で /etc/rc.subr がないとエラーが出れば、
/usr/ports/sysutils/rc_subr をインストールして、
ln -s /usr/local/etc/rc.subr /etc/rc.subr
とリンクを張ってやればよいです。

1.2.2.3.2 DHCPの設定

/etc/dhcpd.conf を下記のようにします。
server-identifier	192.168.0.10; ←(*1)
default-lease-time		3600;
max-lease-time 			7200;
ddns-update-style 		none;

subnet 192.168.0.0 netmask 255.255.255.0 {
	range 192.168.0.100 192.168.0.150; ←(*2)
	option routers 192.168.0.1;
	option subnet-mask 255.255.255.0;

	host pxeboot {
		hardware ethernet 00:00:21:98:3B:12; ←(*3)
		fixed-address 192.168.0.101; ←(*4)
		filename "pxeboot"; ←(*5)
		option root-path "192.168.0.10:/cdrom"; ←(*6)
	}
}
(*1) server-identifier サーバーPCのIP;
(*2) range DHCPで割り当てるIPの範囲;
(*3) hardware ethernet クライアントPCのMACアドレス;
(*4) fixed-address DHCPでクライアントPCに割り当てるIP;
(*5) filename "pxeboot";FreeBSDのCDにあるブートファイル、通常"pxeboot"のままです。
(*6) option root-path "サーバーPCのIP:/cdrom";

/etc/rc.conf で
dhcpd_enable="YES"
dhcpd_conf="/etc/dhcpd.conf"
dhcpd_ifaces="ed0" ←サーバーPCのネットワークアダプタ

1.2.2.3.3 DHCPの起動

/usr/local/etc/rc.d/isc-dhcpd.sh start
で起動します。

1.2.3 FreeBSDのインストール開始

1-a.CDを使う場合

サーバーPCにFreeBSDのCDをセットして、
#mount /cdrom
**注意** CDをセットしたままサーバーPCを再起動すると、サーバーPCにFreeBSDのインストーラーが起動してしまいます。

1-b.ISOイメージを使う場合
まず、kernel に擬似ディスクデバイス「vn」が組込まれている必要があります。
つまり、kernelコンフィグファイルに
pseudo-device vn
が記載されて、kernelが構築されているということです。

ちなみに、kernel の再構築は、kernelコンフィグファイルを
/usr/src/sys/i386/conf/TFTP とすると、
# cd /usr/src/sys/i386/conf
# config TFTP
# cd ../../compile/TFTP
# make depend
エラーが出ないことを確認して、
# make
# make install
ここで、再起動すれば、新しいkernelでたちあがります。

やっと本題のISOイメージのマウントですが、
# vnconfig -c /dev/vn0 ISOイメージ
# mount -t cd9660 -o ro /dev/vn0 /cdrom
です。

アンマウントは
# umount /cdrom
# vnconfig -u /dev/vn0
です。

2.1.2.1 準備及び確認事項で準備したように、クライアントPCのBIOSで、LANがHDDより先にブートするように設定して起動します。
3.すると、めでたくクライアントPCでFreeBSDのインストーラーが起動しますが、インストールメディアの設定では、NFSを選択し、192.168.0.10(サーバーPCのIP):/cdrom とします。

トラブル FreeBSD 6.x系でのインストール
1.ネットワークブートが始まり、DHCPでIPアドレスが割り当てられ、
2.TFTPでPXEのブートコード(pxeboot)がサーバからダウンロードされ,
3.pxebootが動き、NFSでカーネルが読み込まれ、
4.FreeBSD 6.x のブート画面がでても、
5.インストーラではなく、ログインプロンプトが出て、
6.強引に /usr/sbin/sysinstallを動かして、
7.そのままインストールを試みしてみても、
8.読み込み専用でディレクトリを作れないというメッセージが出て、
9.強引に進めても当然うまくいかない。

この場合、
http://www.wheel.gr.jp/~dai/freebsd-cft4/freebsd62r.html
を参考にさせていただきました。

まとめると、
4.FreeBSD 6.x のブートメニューが出た段階でローダプロンプトを表示させます。
まず、ブートメニューの [6.Escape to loader prompt} を選択。
「OK」プロンプトのところでboot -aと入力。
しばらく、デバイスの検出に時間がかかりますが、それが終わると、
mountroot>
というプロンプトが出て、ルートデバイスをどれにするかを尋ねらるので、
ufs:/dev/md0c と入力。
すると、インストーラが起動し、国の選択画面になり、
おなじみのsysinstall画面がでてきて、めでたしめでたし。

2. /etc/rc.conf

設定のメインになるのは /etc/rc.conf です。
今はこんな感じです。
apm_enable="YES"
defaultrouter="xxx.xxx.xxx.xxx"
hostname="yumichan.xxx.xxx"
ifconfig_ed0="inet xxx.xxx.xxx.xxx  netmask 255.255.255.0"
pccard_enable="YES"
pccardd_flags=" -z -i 3"
kern_securelevel_enable="NO"
keymap="jp.106x"
linux_enable="YES"
moused_enable="NO"
nfs_reserved_port_only="YES"
sshd_enable="YES"
xntpd_enable="YES"
tcp_drop_synfin="YES"
sendmail_enable="YES"
sendmail_flags="-bd"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

2.1 apm_enable

apm_enable="YES"

APM を有効にします。ただ、これだけではダメで、私が知っているのは、カーネル
(/usr/src/sys/i386/conf/GENERIC が雛型) で、
device apm0 at nexus? disable flags 0x20

device apm0 at nexus? flags 0x20
にして、カーネルの再構築をします。

2.2 ifconfig_ed0

ifconfig_ed0="inet xxx.xxx.xxx.xxx netmask 255.255.255.0"

Note PC なので、ed0 になってます。

2.3 pccardd_flags

pccardd_flags=" -z -i 3"

PC カードの設定が完了するまでは、ネットワークの設定が行なわれないように
-z オプションをつけてます。

2.4 keymap

keymap="jp.106x"

インストール時の設定で Japanese 106 を選ぶと
keymap="jp.106"
になってしまいました。

editor は Emacs を使うので、Control キー と CapsLock キー を入れ換えるために
keymap="jp.106x"
にしてます。

2.5 xntpd_enable

xntpd_enable="YES"

タイムサーバの設定をします。

さらに、ntp サーバ では、
/etc/ntp.conf で、
server 133.100.9.2 #clock.nc.fukuoka-u.ac.jp
server 133.100.11.8 #clock.tl.fukuoka-u.ac.jp
driftfile /etc/ntpd.drift
として、

ntp クライアント では、
server ntpサーバの IP アドレス prefer
driftfile /etc/ntpd.drift
として、サーバ、クライアント 共に
/etc/ntpd.drift という空ファイルを作っておきます。

2.6 tcp_drop_synfin

tcp_drop_synfin="YES"

SYN FIN の Packet が一対になった不正なアクセスを遮断します。

カーネルで、
options TCP_DROP_SYNFIN
も必要です。

他に不正アクセス対策として、
/etc/sysctl.conf に
net.inet.tcp.blackhole=1
net.inet.tcp.log_in_vain=1
net.inet.udp.log_in_vain=1
としておきます。

2.7 sendmail

sendmail_enable="YES"
sendmail_flags="-bd"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
sendmail はセキュリティホールがよく見つかるのと、cf の設定がよく分からないので、代わりに、Postfix を使ってます。

3. /etc/ftpchroot

FTP サーバで、ホームディレクトリより上を見せないようにするには、
/etc/ftpchroot
に、ユーザ名を書くか、@グループ名を書けばいいです。


4. /etc/ftpusers

FTP login させないユーザ名を書きます。


5. apache の設定

apache の設定ファイル httpd.conf の主なものは以下の通りです。
ただし、あくまで設定の一部です。


DocumentRoot "/home/apache"
<Directory "/home/apache">
    Options FollowSymLinks Indexes Includes MultiViews
</Directory>

AccessFileName .htaccess

<IfModule mod_alias.c>
    ScriptAlias /cgi-bin/ "/home/apache/cgi-bin/"
    <Directory "/home/apache/cgi-bin">
        Options ExecCGI
    </Directory>
</IfModule>

<IfModule mod_mime.c>
pp    AddHandler cgi-script .cgi
    
    AddType text/html .shtml
    AddHandler server-parsed .shtml
</IfModule>

ErrorDocument 404 /missing.html
ErrorDocument 401 /auth.html
ErrorDocument 403 /forbidden.html
ErrorDocument 500 /internalservererror.html

5.1 DocumentRoot

DocumentRoot "/home/apache"

ドキュメントルート の設定です。
Options で、
FollowSymLinks : サーバはシンボリックリンクに従う
Indexes : ディレクトリの一覧を可能にする
Includes : SSI を許可する
MultiViews : コンテントネゴシエーションにおけるマルチビューを許可する
です。

5.2 AccessFileName

AccessFileName .htaccess

アクセス制御ファイルの設定です。

5.3 ScriptAlias /cgi-bin/

ScriptAlias /cgi-bin/ "/home/apache/cgi-bin/"

で、CGI を置くディレクトリを設定し、
    <Directory "/home/apache/cgi-bin">
        Options ExecCGI
    </Directory>
で、CGI の実行許可をします。

5.4 AddHandler cgi-script

AddHandler cgi-script .cgi

CGI ファイルの拡張子の設定です。

5.5 AddHandler server-parsed

AddType text/html .shtml
AddHandler server-parsed .shtml

SSI の設定をします。
上の場合、.shtml ファイルが SSI になります。

5.6 ErrorDocument 404

ErrorDocument 404 /missing.html

エラーメッセージを指定します。
上の場合、ドキュメントルート直下のファイルになります。

[TOP] [戻る]
http://www.yumi-chan.com/
Last Modified: Wed, 24 Jun 2009 23:57:52 +0900