Homeserver Install Guide ~ Gentoo Linuxで自宅サーバのすすめ
タモチャンドットコムの自宅サーバは今3世代目。2世代目から新しくサーバを立ち上げようと思ったのは単にハードディスクが調子が悪くなったからです。じゃあせっかくだからソフトウェアRAIDでいいからRAID1を組んで・・・。それで俺も安心、ということでした。
OSは何にしようか、というところで悩みました。最初はRedHatっぽいFedora Coreか、学生時代使っていたKONDARA
Linuxを引き継いだMOMONGA
LINUXか。旧ブログにその辺を書いたところK.O.や鬼軍曹(←大学時代の俺のLinux軍曹、いや先輩)がGentoo(ジェンツー、と読むらし
い)Linuxがお勧め、だと。
Gentoo Linuxとは何ぞや、と。立ち読みした(後に購入)「はじめてのGentoo
Linux(ソフトバンクパブリッシング・田中秀樹著)」によると、”日曜大工的OS”だとか、”インストールの難しさ=楽しみの源”だとかと書いてあ
る。もののホームページによると、「Portageは馬鹿RPMと違って超楽、でもコンパイルに時間がかかる。まして、OSのインストールなど少なくとも
3日はかかる。」あ、そう。そんなにおれはひまじゃないぞ。日曜だって場合によっては仕事してんだぞ、と思って会社で(こっそり)でたばかりの
Fedora Core 4のイメージを焼いたのだった
しかし、鬼軍曹にあおられてしまった・・・Fedoraにすることをブログで告げると「つまんねぇ」と。そのまま俺はアドレスバーにうったのだった。
http://www.gentoo.gr.jp/
と・・・
ここでは、Gentoo Linuxのインストールと自宅サーバの構築について解説します、といいたいところですが、公式ページはじめ他サイトで非常によくまとまっています。また、サーバの設定などは旧サーバとあまり変わりませんので、ここは詳しいところは他のサイトに譲って、構築ドキュメントとリンク集のような形にしたいと思っています。
Gentoo Linuxのインストール
まず、Gentoo Linuxをインストールするサーバ機のスペックを紹介します。
- Dell Dimension XPS T550改
- CPU : PentiumIII 550MHz
- Mem : 192MB
- HDD : 20GB × 2 (Software RAID1)
例によってかなりの低スペック。でも、自宅サーバならこれくらいでもかなり動きます
さて、Gentoo
Linuxのインストールをはじめるのですが、とりあえずインストールCDをダウンロードします。CDのみでインストールする方法と、インストールCDは
とっても小さい容量で、ネットワークを利用しながら、その都度必要なパッケージをダウンロードしながらインストールする方法があり、それぞれで必要なCD
が異なります。今回はネットワークを利用したインストール方法を採用します。2.c. GentooインストールCDをダウンロードして、CDに焼いて、ブートしますからイメージをダウンロードします。
インストールCDからブートすると・・・いきなりコマンドライン面が。いまどきコマンドうってインストールか・・・。とびびります。さらに、カーネル指定にキーマップを日本にしないとキーボード配列がおかしくて、非常に作業しづらくなります。
boot:gentoo dokeymap
>> Loading keymaps...
Please select a keymap from the following list by typing in the
appropriatename or number.
Hit Enter for the default "us/41" US English keymap.
...
<< Load keymap: jp
起動して、
livecd root#
が出たら準備完了。通常なら、1. Gentooをインストールするにしたがって行っていけば大丈夫、かと思います。
なお、Gentoo
Linuxは用途?目的?によってインストールの方法が若干異なります。インストールの段階がStage1,2,3とあり、どの段階からはじめることも可
能です。Stage1ががっつりカスタマイズ派、Stage3は簡単インストール派、みたいな感じです。2.b. GentooインストールCDを参考にしてください。ぼ
くはStage1から始めましたが、Stage2でなんだかんだとコンパイルしなければならず、恐ろしく時間がかかり、インストール完了まで本当に3日か
かりました。本当はそんなに時間がかからないのですが、コマンドうって放置、コマンドうって放置、ということを繰り返さないといけなくなるはずです。おそ
らくStage3でもいいでしょう・・・おそらく。
今回行ったイレギュラーな物としては、Software RAID1を組んだ、というところでしょうか。まず、Gentoo/x86 インストールの Tips & Tricksを参考にして、パーティションを切り、RAIDの設定を行います。
livecd linux # modprobe raid1
livecd linux # mknod /dev/md0 b 9 0 ←/dev/md0の作成
livecd linux # mknod /dev/md1 b 9 1
livecd linux # mknod /dev/md2 b 9 2
livecd linux # mdadm --create /dev/md0 --level=1 --raid-devices=2 \
/dev/hda1 /dev/hdb1 ←raid作成
livecd linux # mdadm --create /dev/md1 --level=1 --raid-devices=2 \
/dev/hda2 /dev/hdb2
livecd linux # mdadm --create /dev/md2 --level=1 --raid-devices=2 \
/dev/hda3 /dev/hdb3
livecd linux # mdadm --detail --scan > /etc/mdadm.conf
↑confファイルの書き出し
livecd linux # reiserfsck --check /dev/md0
↑ちゃんとできてるかをチェック。ここではreiserfs使用
livecd linux # reiserfsck --check /dev/md1
livecd linux # reiserfsck --check /dev/md2
livecd linux # mount /mnt/gentoo/ /dev/md2
livecd linux # mount /mnt/gentoo/boot /dev/md0
livecd linux # mkswap /dev/md1
livecd linux # swapon /dev/md1
livecd linux # cp /etc/mdadm.conf /mnt/gentoo/etc/mdadm.conf
↑confファイルのchroot後用コピー
livecd linux # mknod /mnt/gentoo/dev/md0 b 9 0
↑/dev/md0のchroot後用作成
livecd linux # mknod /mnt/gentoo/dev/md1 b 9 1
livecd linux # mknod /mnt/gentoo/dev/md2 b 9 2
そして、chroot。さらに、GRUBの設定を以下のように行います。まず、grub.confの設定です。
default 0
timeout 30
splashimage=(hd0,0)/grub/splash.xpm.gz
#通常起動用
title=Gentoo Linux 2.6.11-gentoo-r11
root(hd0,0)
kernel /kernel-2.6.11-gentoo-r11 root=/dev/md2
#hdbが破壊したとき用
title GentooLinux 2.6.11-gentoo-r11 raclass-critics-hda
root(hd0,0)
kernel /kernel-2.6.11-gentoo-r11 root=/dev/hda2
#hdaが破壊したとき用
title GentooLinux 2.6.11-gentoo-r11 raclass-critics-hdb
root(hd1,0)
kernel /kernel-2.6.11-gentoo-r11 root=/dev/hdb2
つぎにMBRにgrubをインストールします。
livecd linux # grub
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> quit
また、インストールの締めの部分でアンマウントするところがあるインストールの締めの部分でアンマウントするところがあるのですが、私がやったときになかなかうまくいきませんでした。なので、無理やりはずしました。
livecd linux # umount /mnt/gentoo/home /mnt/gentoo/boot /mnt/gentoo/proc
livecd linux # umount -d /mnt/gentoo
ネームサーバ BIND9
dns # emerge bind
で、インストール完了。RedHatからGentoo Linuxにそのまま設定ファイルを移動してもほぼ問題ありませんでした。ただ、辞書ファイルのディレクトリ名が/var/bind/になるので、その辺のメンテナンスが必要でしょう。参照:実用 BIND 9で作るDNSサーバ
あとは、
dns # rc-update add named default
とし、起動時に自動的にデーモンも起動するようにしてください。
FTPサーバ vsftpd
RedHatで構築時にはProFTPDでしたが、別なソフトウェアも試してみようということで今回はvsftpd(very secure ftpd)。名前がいいよね。とっても安全ってところが。
dns # emerge vsftpd
で、vsftpdをインストールします。そうすると、/etc/vsftpd/vsftpd.confなる設定ファイルが出現するので、それを編集します。特に注意すべきところを書きに記します。
# デーモンとして立ち上げるときは下記2行をYESとします。
background=YES
listen=YES
# anonymousを拒否するので、NOとします。
anonymous_enable=NO
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# タモチャンドットコムではパッシブモードを推奨なのでNO
connect_from_port_20=NO
# かわりに、下記を記述
pasv_enable=YES
pasv_address=192.168.0.20
listen_port=21
pasv_min_port=10020
pasv_max_port=10024
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# /etc/vsftpd/vsftpd.chroot_listに記述されているユーザ以外は、
# 自分のホームディレクトリ以上には移動できないようにする。
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
設定後、rc-updateを用いて、デーモンが起動時にも自動的に起動するようにします。
Webサーバ apache
apache2を導入しました。apache1.3でも良いのですが、何となく。
主な設定ファイルは/etc/apache2/httpd.confにあります。ちょっと前までは
/etc/apache2/conf/commonapache2.confだったのですが、アップグレードしたらhttpd.confを使うようになっ
たのでビックリです。設定の基本はOLDを参考にして頂くとして、apache2では日本語の文字化けがネックとなります。以下の部分をチェックします。
#790行くらい。
DefaultLanguage ja
#815行くらい。AddLanguageがたくさん並んでるが、jaを一番上に。
AddLanguage ja .ja
#850行くらい。jaを先頭に。
LanguagePriority ja en ca cs da de el eo es et fr he hr it ko
ltz nl nn no pl pt pt-BR
#870行くらい。ISO-8859-1をコメントアウト。
#AddDefaultCharset ISO-8859-1
#Charsetはhtmlファイルを優先にする。
AddDefaultCharset Off
#一番最後。バーチャルホストの設定は/etc/apache2/vhosts.d/vhosts.confに書く。
#
# Gentoo VHosts
#
# For Gentoo we include External Virtual Hosts Files.
# Please see vhosts.d/00_default_vhost.conf for the default virtual host.
#
Include /etc/apache2/vhosts.d/vhosts.conf
バーチャルホストの設定は別ファイルに書くので注意です。直に書いても良いと思いますが。
また、phpの設定を追加しました。/etc/apache2/httpd.confで、
#phpモジュールを読む
LoadModule php4_module modules/libphp4.so
#.phpの動作を宣言
AddType application/x-httpd-php .php
#index.phpがデフォルトページになるように
DirectoryIndex index.html index.html.var index.php
SSLを使いたい場合は、まずapache2がSSL対応になっていることが前提です。/etc/make.confのUSEフラグにsslを追加しておきます。
/etc/apache2/sslなるディレクトリを作成し、そこにサーバの秘密鍵と証明書要求(CSR)を作成します。/etc/apache2/sslに移動して、まずはserver.keyというサーバの秘密鍵を作ります。
# openssl genrsa -des3 -rand /var/log/messages -out server.key 1024
10441 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
.......................................................++++++
.......++++++
e is 65537 (0x10001)
Enter PEM pass phrase (パスワード入力)
Verifying password - Enter PEM pass phrase: (再度パスワード入力)
次にCSRの作成です。server.csrというファイルで作成します。
$ openssl req -new -key server.key -out server.csr
Using configuration from /etc/ssl/openssl.cnf
Enter PEM pass phrase:(サーバの秘密鍵で入れたパスワード)
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) [AU]:(日本ならと入力)
State or Province Name (full name) [Some-State]:(自分の住所などを入力)
Locality Name (eg, city) []: (入力)
Organization Name (eg, company) [Internet Widgits Pty Ltd]: (入力)
Organizational Unit Name (eg, section) []: (入力)
Common Name (eg, YOUR name) []: (入力)
Email Address []: (入力)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(ただEnterを押す)
An optional company name []:(ただEnterを押す)
次にapache2の設定です。/etc/apache2/modules.d/41_mod_ssl.default-vhost.conf で、
・・・・
<IfModule mod_ssl.c>
##
## SSL Virtual Host Context
##
#バーチャルホストの設定。https://でアクセスするとここにアクセスされる。
<VirtualHost 192.168.0.20:443>
# General setup for the virtual host
DocumentRoot "/var/httpd/https"
ServerName www.tamochan.com:443
ServerAdmin webmaster@tamochan.com
ErrorLog /var/log/apache2/ssl_error_log
<IfModule mod_log_config.c>
TransferLog logs/ssl_access_log
</IfModule>
・・・・
#CSRファイルのありか
SSLCertificateFile /etc/apache2/ssl/server.csr
#サーバ秘密鍵のありか
SSLCertificateKeyFile /etc/apache2/ssl/server.key
さらに、起動オプションの設定です。/etc/conf.d/apache2 で、ヴァーチャルホスト、SSL、SSLヴァーチャルホストを有効にする設定です。
APACHE2_OPTS="-D DEFAULT_VHOST -D SSL -D SSL_DEFAULT_VHOST"
メールサーバ Postfix
前回同様、メールサーバソフトウェアにはPostfixを使用しました。ただ、POP Before
SMTPの設定がうまくいかなかったため、今回はSMTP AUTHを利用しました。まず、SMTP
AUTHに対応したPostfixにするためにはコンパイル前にUSEフラグに saslを追加します。
emergeコマンドでPostfixを設定したら、/etc/postfix/main.cfの設定です。今回紹介するのはsaslに関係する部
分とスパムメール対策で、ブラックリストに載っているホストやつじつまの合わないヘッダを持つメールをはじく設定など、前回との変更点です。
・・・
#ここらへんからsmtp auth(sasl)の設定
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = no
allow_mail_to_commands = alias,forward,include
#スパムメール対策。reject_rbl_clientの後ろにかかれている
#データベースに登録されているホストからは受け付けなくなります。
smtpd_client_restrictions = permit_mynetworks,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_rbl_client bl.spamcop.net,
reject_rbl_client blackholes.mail-abuse.org,
reject_rbl_client dynablock.wirehub.net,
reject_rbl_client korea.services.net,
reject_rbl_client opm.blitzed.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client relays.visi.com,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client sbl-xbl.spamhaus.org,
permit
・・・
次に、SASLでパスワード認証を行えるようにします。/etc/sasl2/smtpd.confを下記のように編集します。
pwcheck_method: pwcheck
pwcheckを起動し、デフォルトでサーバ起動時に自動で立ち上がるようにします。
# /etc/init.d/pwcheck start
# rc-update add pwcheck
Outlookでは「アカウントの設定」で、「送信メールサーバの詳細設定」の「受信メールサーバーと同じ設定を利用する」にチェックを入れておけば送信できるようになります。
スパムメール対策 Spamassassin
旧サーバの設定を参考にしていただければいいですが、起動スクリプトはemergeするだけで/etc/init.d以下に用意されます。あとは
# rc-update add spamd
でOKです。ただし、spamassassinの学習にも書いたように、最初はspam、ham両方のメールを学習させてください。させないと、うまくベイジアンフィルタが働かないようです。
Courier-Imap
今回はCourier-Imapを使ってみました。前のサーバがmbox方式(1ユーザ1ファイルでメールを扱う)だったので、maildir方式(1メール1ファイルでメールを扱う)に変換しました。変換方式はhttp://asshole.dip.jp/mb2md.phpを参考にしました。
emergeでインストールしたあと、ユーザのディレクトリにメールを扱うディレクトリを作成します。Postfixのmain.cfにかかれている home_mailbox = .maildir/ で指定されているユーザのディレクトリに移動して、
# maildirmake .maildir
を実行します。.maildirが作成されます。今後ユーザのディレクトリが作成されるたびに実行するのが面倒な場合は/etc/skel/(ユーザのディレクトリの雛型)に移動して上記コマンドを実行しておくと便利です。
設定は/etc/courier-imap 下にありますが、ほとんど触らなくても大丈夫です。下記の部分くらいでしょうか。imapd、pop3dファイル内で、
#Hardwire a value for ${MAILDIR}
MAILDIR=.maildir
MAILDIRPATH=.maildir
のように、自分の環境とMAILDIRがあっているか確認してください.
プロキシサーバ squid
基本的にはインストールすれば動きますが、メモ程度に。以下の記述をすればプロキシとしての機密性が高くなります。記述をする前とあとで診断くんで確かめてみてください。
header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all
ただし、外部に公開する場合は設定をきちんと行うべきです。私は自宅内でしか利用していませんが・・・。
Gentoo Linuxの強力なパッケージ管理を利用したアップデート
セキュリティホールを埋めるためのアップデートはLinuxでは依存関係なんかがあってとても面倒くさいものだとされてきましたが、Gentoo
LinuxにはPortageと呼ばれる仕組みで強力なパッケージ管理がされているため、依存関係をほぼ意識することなくアップデートを行えるようになり
ました。ここでは、Portageを利用したアップデートを仕方を紹介します。
# emerge --sync
で更新情報のアップデートを行った後、
# glsa-check -t new
dns home # glsa-check -t new
WARNING: This tool is completely new and not very tested, so it should not be
used on production systems. It's mainly a test tool for the new GLSA release
and distribution system, it's functionality will later be merged into emerge
and equery.
Please read http://www.gentoo.org/proj/en/portage/glsa-integration.xml
before using this tool AND before reporting a bug.
This system is affected by the following GLSA:
200510-26 ←この辺から注目
200601-10
200511-14
200605-02
200605-05
というように、セキュリティ関係でアップデートが必要な情報があった場合、その日付が表示されます。さらに、
# glsa-check -l 200601-10
WARNING: This tool is completely new and not very tested, so it should not be
used on production systems. It's mainly a test tool for the new GLSA release
and distribution system, it's functionality will later be merged into emerge
and equery.
Please read http://www.gentoo.org/proj/en/portage/glsa-integration.xml
before using this tool AND before reporting a bug.
[A] means this GLSA was already applied,
[U] means the system is not affected and
[N] indicates that the system might be affected.
200601-10 [N] Sun and Blackdown Java: Applet privilege escalation
( dev-java/sun-jre-bin dev-java/blackdown-jre dev-java/blackdown-jdk ... )
glsa-check -l yyyymm-dd といった文法で、その更新情報の内容が表示されます。必要だと思われたら、
# emerge -u [更新すべきパッケージ名]
とし、パッケージの更新を行います。cronでglsa-checkを動かしておくと、毎日メールなりで更新情報が届けられます。