google

最近のトラックバック

他のアカウント

Powered by TypePad

インストールと設定

2008年4月26日 (土)

OS - Gentoo Linuxのインストール

さて、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を組んだ、というところでしょうか。まず、パーティションの切り方を決定します。

  • / 3GB
  • /var 5GB
  • /usr 3GB
  • /home 8GB
  • swap 128MB

/varと/homeは後々のことを考えて,分けたほうがいいです./varにはログとメール,/homeにはユーザのデータが記憶されています. swapはメモリと同じぐらいの大きさをとります.また、Gentoo LinuxにはPortageという、強力なパッケージ管理を行うシステムがあるのですが、これは/usrまたは/varでパッケージを管理するので、少 し多めに取っておきます。/usrか/varは後で設定可能ですが、デフォルトは/usrです。

つぎに、パーティションを切り、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を担当するBINDを入れていきます.BINDはバージョン9を入れます.

# emerge bind

BIND9は内部からは内部向けの名前引き、外部からは外部向けの名前引きをしてくれます.これが,IPアドレスを一つしかもらえないホームサーバ にとってはありがたいからです。たとえばこれが行えないと、自宅内から自分のサーバの名前解決を行おうとすると外部向けのIPアドレスが返ってきて、アク セスができなくなるからです。/etc/named.confには以下のような設定を行ってみます。

options {
//辞書ファイルをどこに置くか?
directory "/var/bind";
};
//対内部用名前引きの設定
view "internal"{
//この設定をどのIPに効かせるか
match-clients {192.168.0.0/24; 127.0.0.0/8;};
recursion yes;

zone "." IN {
type hint;
       file "named.ca";
};
//ローカルホスト順引き
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
//ローカルホスト逆引き
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
//内部LAN用順引き
zone "tamochan.com" IN{
type master;
notify no;
file "tamochan.com.local.zone";
};
//内部LAN用逆引き
zone "0.168.192.in-addr.arpa" IN{
type master;
notify no;
file "0.168.192.rev";
};
};

//外部公開用
view "external"{
match-clients {any;};
recursion no;

//外部用順引き
zone "tamochan.com" IN{
type master;
notify no;
file "domain";
};

};

外部用の逆引きは,プロバイダの都合上,してくれないので,記述していません.

個々の辞書ファイルですが,外部向きの設定ファイル(上の設定ファイルに合わせると,/var/bind/domain)は、

$TTL 43200
@         IN      SOA     dns.tamochan.com.       tamori.tamochan.com.    (
                                                  2002022501;serial
                                                  28800;refresh
                                                  14400;retry
                                                  3600000;expire
                                                  86400;minimum   )
dns       IN    A       211.133.147.90
@         IN    NS      dns.tamochan.com.
//メールサーバ
@         IN    MX 10   mail.tamochan.com.
//エイリアスの設定
www       IN    CNAME   dns.tamochan.com.
ftp       IN    CNAME   dns.tamochan.com.
mail      IN    CNAME   dns.tamochan.com.

ちなみに、内部向けDNSは、外部向きの設定ファイル(上の設定ファイルに合わせると,/var/bind/tamochan.com.local.zone)は、

$TTL 43200
@       IN      SOA     dns.tamochan.com.       tamori.tamochan.com.    (
                                                2005071401
                                                28800
                                                14400
                                                3600000
                                                86400   )
dns       IN    A       192.168.0.***
@         IN    NS      dns.tamochan.com.
@         IN    MX 10   mail.tamochan.com.
www       IN    CNAME   dns.tamochan.com.
ftp       IN    CNAME   dns.tamochan.com.
mail      IN    CNAME   dns.tamochan.com.

細かい部分は他所に譲るとして,結構重要なのは,上で行くとserial.これはシリアル番号で,変更を行った際には必ず,さらに大きな番号をつけておきます.変更した日付(YYYYMMDD)+2桁の通し番号としておくと,大きな番号になっていきます.また,忘れがちなのがdns.tamchan.com.の最後のピリオド.本当に忘れます.

あとは、

dns # rc-update add named default

とし、起動時に自動的にデーモンも起動するようにしてください。

また、セカンダリDNSを用意します。tamochan.comでは xname.org を使っています。ここは、利用無料で、しかもプライマリDNSとしても利用可能です。

まず、トップページのLoginの下のcreate a new userをクリックします。入力フォームが現れますので、

  • login(アカウント名)
  •  
  • your valid email(メールアドレス)
  •  
  • new password(パスワード)
  •  
  • confirm password(パスワードを再入力)
  •  
  • Advanced interface(これにだけチェックを入れる)
  •  
  • I have read and I understand・・・(使用許諾。チェックを入れる)

を入力します。メールが届きますので、指定されたURLをクリックすると本登録されます。

本登録後、トップページのLoginにアカウント名、パスワードを入力してログインします。画面上部のCreate zoneをクリックし、

  • zone→ドメイン名を入力
  • secondaryを選択
  • Createをクリック、別画面に遷移
  • modification interfaceをクリック
  • primary name server IP→自分のDNSのIPを入力
  • allow transfers from→Master onlyを選択
  • Modifyをクリック

これで、セカンダリの設定が終了です。Modifyクリック後、設定を追加する部分が表示されるので、指示に従って/etc/bind/named.comと/var/bind/domainを書き換えます。

数時間後、画面上部のView zoneをクリックし、serialが現在のシリアル番号になっていれば正常に動作しています。

以上、設定したらドメインのレジストリ(ドメイン名を取ったところ)に、自分のDNSとセカンダリDNSを登録します。お名前.comでは「サービス設定」の「ネームサーバー登録」で登録します。これで自分のドメインの問い合わせは自分のところにくるようになります。

FTPサーバ vsftpd

RedHatで構築時にはProFTPDでしたが、別なソフトウェアも試してみようということで今回はvsftpd(very secure ftpd)。名前がいいよね。とっても安全ってところが。

# 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

ちなみに、設定ファイル内で指定した/etc/vsftpd/vsftpd.chroot_listは、ただ、ユーザ名を列挙すればいいものです。

tamochan
tamori
tamo

設定後、rc-updateを用いて、デーモンが起動時にも自動的に起動するようにします。

dns # rc-update add vsftpd defau

FTPサーバ ProFTPD

第2世代目のRedHat Linux時代の情報です。

FTPサービスを実現するソフトウェアにProFTPDがあります.RPMでインストールすると設定ファイルは/etc/proftpd.confです.この設定を見ていきます.

# This is the ProFTPD configuration file
# 起動時に最初に表示させるメッセージ
ServerIdent                     on "tamochan.com FTP Server ready."
#アドミニストレータのメールアドレス
ServerAdmin                     root@tamochan.com
#ined経由で起動するので,standaloneではなくて,inetd
ServerType                      inetd
DefaultServer                   on

# Use pam to authenticate by default
AuthPAMAuthoritative            on

# Do not perform ident lookups (hangs when the port is filtered)
IdentLookups                    off

# Port 21 is the standard FTP port.
Port                            21

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask                           022

# Chmod isn't allowed by default
#AllowChmod                     on

# Default to show dot files in directory listings
LsDefaultOptions                "-a"

# See Configuration.html for these (here are the default values)
#MultilineRFC2228               off
#RootLogin                      off
#LoginPasswordPrompt            on
#MaxLoginAttempts               3
#MaxClientsPerHost              none

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances                    30
# Set the user and group that the server normally runs at.
User                            nobody
Group                           nobody

# Normally, we want files to be overwriteable.
<Directory /*>
  AllowOverwrite                on
</Directory>

#anonumous(匿名)は受け付けないようにするため,コメントアウト.
# A basic anonymous configuration, no upload directories.
#<Anonymous ~ftp>
  # Uncomment the following line to allow anonymous access
  #RequireValidShell            off
#  AllowChmod                   off

#  User                         ftp
#  Group                                ftp
#  AccessGrantMsg               "Anonymous login ok, restrictions apply."

  # We want clients to be able to login with "anonymous" as well as "ftp"
#  UserAlias                    anonymous ftp
#
  # Limit the maximum number of anonymous logins
  #  User                         ftp
#  Group                                ftp
#  AccessGrantMsg               "Anonymous login ok, restrictions apply."

  # We want clients to be able to login with "anonymous" as well as "ftp"
#  UserAlias                    anonymous ftp
#
  # Limit the maximum number of anonymous logins
#  MaxClients                   10

  # We want 'welcome.msg' displayed at login, '.message' displayed in
  # each newly chdired directory and tell users to read README* files.
#  DisplayLogin                 welcome.msg
#  DisplayFirstChdir            .message
#  DisplayReadme                        README*

  # Limit WRITE everywhere in the anonymous chroot
#  <Limit WRITE>
#    DenyAll
#  </Limit>

#</Anonymous>

FTPはinetdを経由して起動します.inetdとは,一つのプロセスでいろんなポートを見張っていて、クライアントからの通信が来た場合に初 めてサーバを実行してくれる便利な仕組みのことです.そこで次に,このinetdの設定をします.RedHatでは,inetdのさらに強力な管理機能を 持つxinetdになっています.設定ファイルは/etc/xinetd.d/proftpdです.

# default: off
# description: The ProFTPD FTP server serves FTP connections. It uses \
#       normal, unencrypted usernames and passwords for authentication.
service ftp
{
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/sbin/in.proftpd
        log_on_success          += DURATION USERID
        log_on_failure          += USERID
        nice                    = 10
        disable                 = no
}

曲者はdisableでしょうか.デフォルトではyesになっていますが,noにしないと,起動しません.

Webサーバ apache

Apacheはいわずと知れたウェブサービスを提供するソフトウェアです.今では最新版として2.0が出ています.インストール後,デーモンを立ち 上げ,127.0.0.1にアクセスするとすぐに「It worked!」などという画面がすぐに出てくれます.ただ,外部に公開するにはいくつか設定を変更しなくてはなりません.まず、 /etc/apache2/httpd.confの変更するべき一部を抜粋して紹介します.

# emerge apache2

でインストールして、設定です。emerge apacheとすると、apache1がインストールされるので注意してください。ここはお好みです。

#サーバの管理者のメールアドレス
ServerAdmin webmaster@tamochan.com
#サーバの名前
ServerName www.tamochan.com
#http://www.tamochan.comのルートディレクトリ.まずはじめに参照するディレクトリ.
DocumentRoot "/home/webmaster/public_html"    

#/home/*/public_htmlの設定.CGIやSSIが動くようにしてある.
<directory home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    #CGIの実行を許可
    Options MultiViews Indexes SymLinksIfOwnerMatch ExecCGI
  #SSIの実行を許可
    Options +Includes
    <Limit GET POST OPTIONS PROPFIND>
    Order allow,deny
    Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS PROPFIND>
      Order deny,allow
      Deny from all
    </LimitExcept>
</Directory>

#CGIのファイルを設定   
AddHandler cgi-script .cgi
#SSIのファイルを設定
AddType text/html .shtml
AddHandler server-parsed .shtml

#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

次に、後述するバーチャルホストの設定を行います。/etc/apache2/vhosts.d/vhosts.confで、

#バーチャルホストの設定
#まずはNameVirtualHostにサーバのIPを設定
NameVirtualHost 192.168.0.22
#もし,http://tanpopo.tamochan.comでアクセスしてきた場合
#ドキュメントルートは/home/tanpopo/public_htmlに設定
<VirtualHost 192.168.0.22>
    ServerAdmin tanpopo@tamochan.com
    DocumentRoot /home/tanpopo/public_html
    ServerName tanpopo.tamochan.com
    #ログの出力先
    ErrorLog /var/log/httpd/error_log
    CustomLog /var/log/httpd/access_log common
</VirtualHost>

CGIやSSIの設定が少々面倒くさいといったところでしょうか.ユーザに好評なのがヴァーチャルホストの設定.ユーザのホームページがhttp: //***.tamochan.comのような,チルダなしのアドレスで公開できます.ヴァーチャルホストの設定後は,違う名前でもアクセスできるよう に,/var/named/domain(正引きファイル)に,たとえば次の一行を足しておきます.

tanpopo	IN	CNAME	dns.tamochan.com.

また、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"

設定後、rc-updateを用いて、デーモンが起動時にも自動的に起動するようにします。

dns # rc-update add apache2 default

WebDAV

この設定手順はapache1.3用で、第2世代RedHatサーバで行ったものです。

WebDAVとは(簡単に言うと)HTTPでファイル転送を行う,FTPに変わるものと注目されるファイル共有プロトコルです.コネクションが単一 方向なので,どうもファイアウォールでFTPが邪魔される,ということも無くなるようです.また,サーバサイドでの処理,一本のコネクションでの処理とい うメリットもあります.なお,ここで紹介する設定例はapache1.3用です.ご了承ください.

まず,apacheに必要なモジュールが入っているか確認します.mod_so.cが入っていれば利用可能です

% httpd -l
Compiled-in modules:
  http_core.c
  mod_so.c
SUExec: enabled; valid wrapper /usr/sbin/suexec

rpmを探してきてインストールしましょう.パッケージによってはすでに入っていることもあるようです.以下のコマンドで確認してみましょう.私はすでにインストール済みでした.入れた覚えはないのですが….

% rpm -qa | grep mod_dav

いよいよhttpd.confの設定です.

#以下の2行はあらかじめ書いてあるかもしれません
LoadModule dav_module modules/libdav.so
AddModule mod_dav.c

#ロックデータベースの設定.どこに設定してもいいが,ディレクトリに
#httpdプロセスのユーザ権限で書き込み可能でなくてはならない.
DAVLockDB /usr/local/apache/DAVLock

#Aliasの設定.設定した方がいいかも.
#エイリアス先はpublic_html以下はさけた方が無難.
Alias /dav "/home/httpd/davhome"

#指定のディレクトリに対してWebDAV可能にする.
<Location /dav>
DAV on
</Location>

httpdの再起動を忘れずに.ここまででとりあえず可能です.Windowsだと,「ネットワークプレイスの追加」により利用可能です.上の設定 例だとホスト名http://www.tamochan.com/davで設定します.XPだと,ドライブ名を割り当てることもできます.

しかし,ここまでだと誰でもファイルを閲覧可能です.ここで,.htaccessファイルにより認証設定を行います.以下に.htaccessの設定例を示します.

AuthUserFIle /usr/local/apache/pass.pwd #パスワードファイル名.後述.
AuthGroupFile /dev/null #認証用グループファイル
AuthName DAVhome #認証ダイアログ表示用文字列
AuthType Basic #認証タイプ
<LimitExcept GET OPTIONS>
Require user tamochan
</LimitExcept>

GET,OPTIONS以外の操作は認証が必要という設定でした.次にパスワードの設定です.以下のコマンドによりパスワードを入力してください.

% htpasswd -c /usr/local/apache/pass.pwd tamochan

さらに,.htaccessが動くようにhttpdの設定です.httpd.confに以下の設定を加えてください.

<Directory /home/httpd/davhome>
AllowOverride Limit AuthConfig
</Directory>

これで,(WinXPではなく)Win2000ではアクセスすると認証画面が表示されます.WinXPではなぜか認証画面が出ても認証されません.

さらに,このままだと日本語のファイル名を持つものを登録するとファイル名が文字化けしてしまいます.よって,mod_encodingというモジュールを導入します.これはWinXPの認証問題と日本語の問題を一気に解決してくれるものです.

まず,WebDAV Resourcesからソースアーカイブをダウンロードします.適当に展開します.

次にコンパイルですが,まず展開されたディレクトリの直下にlibディレクトリがあるので,そこの中からコンパイルです.

% cd lib
% ./configure
% make
% make install

これについては詳しいことはあまり述べないことにします.次に本体のコンパイルです.

% cd ..
(コメント)apxsというコマンドのパスとiconv_hookライブラリの
(コメント)パスの指定をしてください.
% ./configure --with-apxs=/usr/sbin/apxs --with-iconv-hook=/usr/local/lib
% make
% make install

さらに,httpd.confの設定です.

LoadFile /usr/local/lib/libiconv_hook.so
LoadModule encoding_module modules/mod_encoding.so

<IfModule mod_headers.c>
        Header add MS-Author-Via "DAV"
</IfModule>

<IfModule mod_encoding.c>
        EncodingEngine    on
        NormalizeUsername on
        SetServerEncoding     UTF-8
        DefaultClientEncoding JA-AUTO-SJIS-MS SJIS

        AddClientEncoding "cadaver/" EUC-JP
</IfModule>

httpdを再起動して確認してください.

メールサーバ Postfix

メールサーバソフトウェアにはPostfixを使用しました。第3者中継対応には今回はSMTP AUTHを利用しました。まず、SMTP AUTHに対応したPostfixにするためにはコンパイル前にUSEフラグに saslを追加します。

emergeコマンドでPostfixをインストールしたら、/etc/postfix/main.cfの設定です。saslに関係する部分とスパ ムメール対策が特に注目すべき点です。、ブラックリストに載っているホストやつじつまの合わないヘッダを持つメールをはじく設定などがされています。

#キューをためるディレクトリ
queue_directory = /var/spool/postfix

#メールオーナー
mail_owner = mail

#ホストネーム
myhostname = mail.tamochan.com

#ドメイン
mydomain = tamochan.com

# myorigin パラメータにはローカルで送信されたメールがどのドメインから
# 来るように見えるかを指定
myorigin = $mydomain

#このマシンが自分自身が最終目的地だとみなすドメインのリストを指定
mydestination = $myhostname, localhost.$mydomain, $mydomain,
mail.$mydomain, www.$mydomain, ftp.$mydomain

#エイリアスのファイル
alias_maps = hash:/etc/aliases

#/sbin/newaliacesを実行したとき,どんなデータベースを作るか
alias_database = hash:/etc/aliases

#メールをためるディレクトリ
mail_spool_directory = /var/spool/mail

#このメールシステムがどのクライアントから
#リレーを受けるか、またはどの目的地にメールをリレーするかを制限
relay_domains = $mydestination

#SMTPを受け付けるアドレス
mynetworks = 192.168.0.0/16, 127.0.0.0/8, 211.133.147.90/32

#ユーザの、メールを受ける場所。/home/***/.maildir/以下にメールが保存される。
home_mailbox = .maildir/

#わかんないドメインからのメールは拒否
smtpd_sender_restrictions = reject_unknown_sender_domain

#送信を許可する最大のファイルサイズ
message_size_limit = 1024000

#メールの寿命
maximal_queue_lifetime = 12h

#ここらへんから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

送信を許可する最大のファイルサイズも設定しておいたほうが,メール爆弾などが送られなくてすみます.マシン起動時にデーモンも起動する設定を行いましょう。

# rc-update add postfix default

次に、SASLでパスワード認証を行えるようにします。/etc/sasl2/smtpd.confを下記のように編集します。

pwcheck_method: pwcheck

pwcheckを起動し、デフォルトでサーバ起動時に自動で立ち上がるようにします。

# /etc/init.d/pwcheck start
# rc-update add pwcheck default

一番トラフィックが多いのはメールになってくると思います.きちんと設定しなければ損害賠償!なってこともあるかもしれないので,慎重に設定をしてください.なお,第三者中継のチェックはhttp://www.nanet.co.jp/rlytest/relaytest.htmlでやってくれますので,公開する前に試してみてください.

スパムメール対策 Spamassassin

あまり望ましくないことですが、運営していると外部にメールアドレスが漏れたりしてスパムメールが頻発してくるようになることがあります。そういうときの強い見方がSpamAssassinです。これをMTAに組み合わせて使うことにより、強力なスパムフィルタにより自動的にスパムメールと思われるメールを廃棄してくれます。今回はデーモン(spamd)を起動しておいて、一回ずつ呼び出して処理するという手法を紹介します。

次に、デーモンとして動かすための準備をします。以下のスクリプトを用意します。(すでに/etc/init.d/spamdとして入っていると思いますが、念のため紹介します。)

#!/bin/sh
#
# spamassassin This script starts and stops the spamd daemon
#
# chkconfig: 2345 80 30
#
# description: spamd is a daemon process which uses SpamAssassin to check
#              email messages for SPAM.  It is normally called by spamc
#        from a MDA.

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Source spamd configuration.
if [ -f /etc/sysconfig/spamassassin ] ; then
        . /etc/sysconfig/spamassassin
else
        SPAMDOPTIONS="-d -c -a -m5 -H"
fi

[ -f /usr/bin/spamd -o -f /usr/local/bin/spamd ] || exit 0
PATH=$PATH:/usr/bin:/usr/local/bin

# See how we were called.
case "$1" in
  start)
# Start daemon.
echo -n "Starting spamd: "
daemon spamd $SPAMDOPTIONS
RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/spamassassin
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down spamd: "
        killproc spamd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/spamassassin
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  condrestart)
       [ -e /var/lock/subsys/spamassassin ] && $0 restart
       ;;
  status)
status spamd
;;
  *)
echo "Usage: $0 {start|stop|restart|status|condrestart}"
exit 1
esac

exit 0

(このスクリプトをspamdとして保存し実行権限を与え、)デーモンとして起動するようにします。

# chmod +x spamd
# rc-update add spamd default

TLECより、設定ファイルをダウンロードし利用します。これを/etc/mail/spamassassin/local.cfとして保存します。

次に、Postfixのフィルタとしてのスクリプトを用意します。要するに、メールを受け取ったり発信したりする都度にこのスクリプトを実行するようにさせるわけです。様々なHPを参考に、私は以下のようなスクリプトを作成しました。

#!/bin/bash
#SpamAssasin filter with Postfix

#FILE PATH
RM=/bin/rm
INSPECT_DIR=/var/spool/filter
OUTPUTFILE=out.$$

SENDMAIL=/usr/sbin/sendmail
KILLFILE=/var/log/spammail
SPAMASSASSIN=/usr/bin/spamc
#Exit codes from <sysexits.>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

#Move to Work Dir
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist : exit $EX_TEMPFAIL; }

#Clean up when done or when aborting
trap "$RM -f $OUTPUTFILE" 0 1 2 3 15
cat | $SPAMASSASSIN -x > $OUTPUTFILE

#メールのヘッダにspamdによってつけられる"X-Spam-Status: Yes"
#があるなら、KILLFILEに捨てる。
spamflag=`less $OUTPUTFILE | grep -c 'X-Spam-Status: Yes'`
if [ $spamflag = 1 ]; then
cat $OUTPUTFILE >> $KILLFILE
#それ以外なら処理。
else
$SENDMAIL "$@" < $OUTPUTFILE
fi
exit $?

さらに、Postfixのmain.cfに、フィルタの定義を追加します。改行がありますが、実際は一行です。

filter unix - n n - - pipe user=filter argv=/usr/local/bin/sa_filter.sh -f \
        ${sender} -- ${recipient}

次にmain.cfのsmtpの部分を書き換えます。改行がありますが、実際は一行です。

smtp      inet  n       -       n       -       -       smtpd \
        -o content_filter=filter:

Postfixを再起動し、きちんと動作するか確認します。

なお、、spamassassinの学習にも書いたように、最初はspam、ham両方のメールを学習させてください。させないと、うまくベイジアンフィルタが働かないようです。

参考:http://www.sonorilo.net/spamassassin。ありがとうございました。

IMAP/POP3サーバ 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があっているか確認してください.

Postfix&Qpopper

ここの記述は第2世代RedHat Linuxでの設定方法です。

一番重要なのがメールでしょう.ここはしっかり設定しないと,スパムメールの発信元などになりかねないので,気をつけます.

tamochan.comは"POP before SMTP"というものを採用しています.SMTPには本来, 認証手続きがないために,外部からのメールのリレーを許可すると,スパムメールのようなメールの不正中継に使われてしまう恐れがあります.だからといって メールのリレーを許可しないと外部からSMTPが使えなくなるので,たとえば自宅にメールサーバがあって,外出先から自宅のアカウントでメールを出した い,なんてときには不便です.そこで,外部のマシンがPOP接続をした場合,その後数分間は同じマシンからの SMTPリレーを許可することで,あたかもSMTPにユーザ認証機能が付いているかのようにするのが"POP before SMTP"です.(一部,PostfixとAPOP,POP before SMTPより引用)

今回はは,SMTPを提供するものにPostfix,POP3を提供するものにQpopper,POP before SMTPを提供するものにはDRACをそれぞれ利用します.

まずはDRACのインストール.http://mail.cc.umanitoba.ca/drac/よりDRACをダウンロードし,解凍します.

% tar xzvf drac.tar.Z

次にDRACのMakefileを編集します.

INSTALL = install
EBIN = /usr/sbin
DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C -DREQ_HASH
CFLAGS = $(DEFS) -g
LDLIBS = -ldb
TSTLIBS = -L. -ldrac
RPCGENFLAGS = -C -I
MANADM = 8

rpc.dracd.c を編集します.

#define DBFILE "/etc/postfix/dracd.db"
#define ALFILE "/etc/postfix/dracd.allow"

dracd-setup.linux を編集します.ここでは,POP認証の有効期限を60分に設定しています.

"daemon rpc.dracd&"の行を"daemon rpc.dracd -e 5&"に変更.

コンパイルとインストールを行います.

% make
% make install
% make install-man
% cp dracd-setup.linux /etc/rc.d/init.d/dracd
% ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc3.d/S78dracd
% ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc5.d/S78dracd
% ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc6.d/K22dracd

DRACの最後の仕上げは,Qpopperのインストール時に必要なライブラリを自分でインストールします.

% cp libdrac.a /usr/lib/

つぎは,Qpopperのインストールです.まず,ソースのRPMを探してきて,インストールします.

% rpm -ivh qpopper-4.0.3-0vl1.src.rpm

QpopperをDRAC対応にするため,specファイルを編集します.

% cd /usr/src/redhat/SPECS
% vi qpopper.spec

(%buildセクションに追加)
  --prefix=/usr \
  --enable-bulletins=/var/spool/mail/bulletins \
  --enable-specialauth \
  --with-pam=qpopper \
  --with-popuid=pop \
  --enable-apop=/etc/pop.auth \
  --enable-drac    (←これを追加)

(%preセクションのuseraddにオプションを追加)
/usr/sbin/useradd -M -g pop pop -c "Pop Account" -d /dev/null -s /dev/null

rpmを作成します.

% rpm -bb qpopper.spec

Qpopperの仕上げとして,作ったQpopperをアップデートします.

% cd /usr/src/redhat/RPMS/i386
% rpm -Uvh qpopper-4.0.3-0vl1drac.i386.rpm

いよいよPostfixのインストールです.RPMでインストールすると,設定ファイルは/etc/postfix/main.cfです.それでは見ていきましょう!主なものを抜粋です.

#キューをためるディレクトリ
queue_directory = /var/spool/postfix

#メールオーナー
mail_owner = mail

#ホストネーム
myhostname = mail.tamochan.com

#ドメイン
mydomain = tamochan.com

# myorigin パラメータにはローカルで送信されたメールがどのドメインから
# 来るように見えるかを指定
myorigin = $mydomain

#このマシンが自分自身が最終目的地だとみなすドメインのリストを指定
mydestination = $myhostname, localhost.$mydomain, $mydomain,
mail.$mydomain, www.$mydomain, ftp.$mydomain

#エイリアスのファイル
alias_maps = hash:/etc/aliases

#/sbin/newaliacesを実行したとき,どんなデータベースを作るか
alias_database = hash:/etc/aliases

#メールをためるディレクトリ
mail_spool_directory = /var/spool/mail

#このメールシステムがどのクライアントから
#リレーを受けるか、またはどの目的地にメールをリレーするかを制限
relay_domains = $mydestination

#SMTPを受け付けるアドレス
mynetworks = 192.168.0.0/16, 127.0.0.0/8, 211.133.147.90/32

#POP before SMTPを動かす設定
smtpd_recipient_restrictions =
permit_mynetworks,
check_client_access btree:/etc/mail/dracd,
check_relay_domains

#わかんないドメインからのメールは拒否
smtpd_sender_restrictions = reject_unknown_sender_domain

#送信を許可する最大のファイルサイズ
message_size_limit = 1024000

#メールの寿命
maximal_queue_lifetime = 12h

POP before SMTPを動かす設定を忘れないようにします.また,送信を許可する最大のファイルサイズも設定しておいたほうが,メール爆弾などが送られなくてすみます.

一番トラフィックが多いのはメールになってくると思います.きちんと設定しなければ損害賠償!なってこともあるかもしれないので,慎重に設定をしてください.なお,第三者中継のチェックはhttp://www.nanet.co.jp/rlytest/relaytest.htmlでやってくれますので,公開する前に試してみてください.

プロキシサーバ squid

基本的にはインストールすればすぐに動きますが、メモ程度に。以下の記述をすればプロキシとしての機密性が高くなります。記述を追加する前とあとで診断くんで確かめてみてください。

header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all

ただし、外部に公開する場合は設定をきちんと行うべきです。私は自宅内でしか利用していませんが・・・。

NTPサーバ ntpd

このNTPサーバも、プロキシサーバ同様、ローカルネットワークでしか使用していませんが、LAN内の時刻の同期というのは大事だと思います。たと えば(ハードウェア的に)複数のサーバを動かしていた場合には同期を取っておかないとログの比較などの作業に意味がなくなってきてしまいます。

emergeでntpdをインストール後、/etc/ntp.confに以下の2行を書きます。

server [外部のntpサーバ]
driftfile       /var/lib/ntp/ntp.drift

上記設定は、外部との接続がない場合の簡易的な設定です。公開する場合は(するべきでないが)接続相手の制限などを記述する必要があります。

デーモンを起動する前に、サーバ内の時刻をある程度あわせます。大幅にずれている場合、ntpdを動かしても同期してくれません。以下は、ntpdateを利用した時刻の合わせ方です。

# ntpdate [外部のntpサーバ]

その後、ntpdを起動します。

# /etc/init.d/ntpd start
# rc-update add ntpd default

LANにあるパソコンに桜時計などを入れ、時刻同期を試してみてください。

SSH

リモートでサーバを管理するために,従来はtelnetを使っていました.しかし,telnetは通信内容が暗号化されないため,パスワードなどが 容易に盗聴できました.そこで,SSH(Secure SHell)を採用するところが多くなってきています.パケットをすべてRSAまたはDSAという方法で暗号化して送るため,盗聴しにくくなっています. また,SSHにはポートフォワードという便利な機能もあるため,利用しない手はありません.

RSA方式を採用するものがSSH1,DSA方式を採用するものがSSH2となります.暗号強度的にはDSA方式のほうが有利です.両方に対応しているものがOpenSSHです./etc/ssh/sshd_configが設定ファイルになります.

#       $OpenBSD: sshd_config,v 1.38 2001/04/15 21:41:29 deraadt Exp $

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

# This is the sshd server system-wide configuration file.  See sshd(8)
# for more information.

Port 22
Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ServerKeyBits 768
#ポートフォワードなどでつなぎっぱなしにしたいときは0
LoginGraceTime 0
KeyRegenerationInterval 3600
#root(管理者)でのログインを拒否
PermitRootLogin no
#
# Don't read ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd yes
#AllowUsers tamori
#PrintLastLog no
KeepAlive yes

# Logging
SyslogFacility AUTH
LogLevel INFO
#obsoletes QuietMode and FascistLogging

#RhostsAuthentication no
#
# For this to work you will also need host keys in /usr/local/etc/ssh_known_host
s
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
#
RSAAuthentication yes
#平文パスワードの拒否
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
PermitEmptyPasswords no

# Uncomment to disable s/key passwords
#ChallengeResponseAuthentication no

# Uncomment to enable PAM keyboard-interactive authentication
# Warning: enabling this may bypass the setting of 'PasswordAuthentication'
#PAMAuthenticationViaKbdInt yes

# To change Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#AFSTokenPassing no
#KerberosTicketCleanup no

# Kerberos TGT Passing does only work with the AFS kaserver
#KerberosTgtPassing yes

#CheckMail yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
#ReverseMappingCheck yes

平文パスワードの拒否はnoにしておいたほうがいいでしょう.クライアントには秘密鍵,サーバ側には自分のホームディレクトリに.sshというディレクトリを作り,中に公開鍵を置きます.

ルータの設定

さぁ,いよいよ外部に公開!そこで最後の仕上げとして,ルータの設定をします.必要な設定は静的NATです.これは,インターネット側から配信され たIPフレームを,プロトコルやポート番号に応じて内部LANの特定のIPアドレスへ転送する機能です.今回はサーバのアドレスを 192.168.0.100として,設定をしてみます.

  • ftp-data 20/tcp -> 192.168.0.100
  • ftp 21/tcp -> 192.168.0.100
  • ssh 22/tcp -> 192.168.0.100
  • smtp 25/tcp -> 192.168.0.100
  • dns 53/tdp -> 192.168.0.100
  • dns 53/udp -> 192.168.0.100
  • http 80/tcp -> 192.168.0.100
  • pop3 110/tcp -> 192.168.0.100
  • imap4 143/tcp -> 192.168.0.100
  • https 443/tcp -> 192.168.0.100

試しに,ポートスキャンをかけてみます.http://210.143.99.143/~p-sec/pscan.htmlからかけてみて,余計なポートは開いていませんか?確認してみてください.