第1部 構築編

本番運用に向けて

SMTP サーバと POP3 サーバ

さて、前項で MTA を sendmail から qmail にした。
しかし qmail をインストールしたままでは SMTP サーバとして機能していないので、端末、例えばメインのデスクトップ機として使っている Windows 機からメーラを利用してメールを送信することが出来ないし、当然外部からのメールの配送を受け取ることも出来ない
POP3 サーバがなければ受信したメールをメーラで取ってくることも出来ない
それでは全く意味が無かろう。
と言うわけで、続いて SMTP サーバPOP3 サーバを仕込んでみる。

まずは SMTP サーバをインストールしよう。
qmail の場合、SMTP を待ち受けるプログラムは qmail-smtpd だ。
だがしかし、qmail-smtpd は TCP/IP のボードを開いて直接 SMTP を待ち受ける機能がない
スーパサーバ inetd や xinetd から起動することになるのだが、こと qmail に関しては tcpserver という別のスーパサーバから起動することが推奨されている。

ucspi-tcp-0.88.tar.gz (tcpserver)
http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz

しかし私としては xinetd で出来ることなのにわざわざ別のサーバ起動させる必要も無かろうと思うわけで、xinetd への設定を強行することにした。

まず、xinetd に SMTP を設定してみよう。
/etc/xinetd.d ディレクトリに移動して、smtp というファイル名で以下の内容を作成する。

service smtp
{
    disable     = no
    flags       = REUSE NAMEINARGS
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = qmaild
    server      = /usr/sbin/tcpd
    server_args = /var/qmail/bin/tcp-env -R /var/qmail/bin/qmail-smtpd
}

しかしまだ完全ではない
qmail では、rcpthosts ファイルに記述されているドメイン以外へのメールは受信拒否する
つまりこのままでは外部へのメールが配送出来ないことになるのだ。
だから、信用出来る接続からの SMTP では rcpthosts の設定を無視する必要がある。
qmail では環境変数 RELAYCLIENT が設定されていると rcpthosts の設定を無視することが出来るので、/etc/hosts.allow を編集してこれを設定する。

hosts.allow は tcpd が参照するファイルで、送信元アドレスやドメインに対して指定のプログラムを実行して良いかどうかのアクセス制御を行う。
どちらにせよ設定が必要であることに変わりはない。

ここでは以下のように指定して、127.*.*.*、192.168.1.*、192.168.10.* からの SMTP 接続に関してはリレーを完全に解放、それ以外はローカル配送に準ずるメールのみを受信するようにする。

tcp-env : 127. : setenv = RELAYCLIENT
tcp-env : 192.168.1. : setenv = RELAYCLIENT
tcp-env : 192.168.10. : setenv = RELAYCLIENT
tcp-env : ALL

んで、

# /sbin/service xinetd restart

として xinetd を再起動する。

ここで、メイン機よりメーラ Becky!2 で外部、今の所メインで使っているレンタルサーバのメールアドレスにメールを飛ばしてみる。

………待てど暮らせど届かないひぃ~

仕方ないので /home/********/Maildir/new/ の中を覗いていると、メールが帰ってきていた
相手先の方でこっちのサーバのドメイン名を解決出来なかったからダメだったらしい。
仕方ないので、送り元を WAKWAK から固定 IP アドレスを貰った時に与えられたドメインにして再送………今度は正常に飛んでいった
では、今度は逆にレンタルサーバの方から自宅サーバに向けてメールを発信してみる。

………待てど暮らせど届かないひぃ~

と、ここで重大な見落としを発見
セキュリティポリシーで、現在外からサーバに入ってくる事が出来るのは HTTP、SSH だけだったことを思い出す。
かなり馬鹿である。
慌てて SMTP を解放して、再送。
今度は正常にメールが届いた。

さて、問題なのはセキュリティだ。
SMTP サーバがスパムメールの踏み台にされないように外部からの接続ではメールのリレーを禁止しているが、それが正常に働いているか確かめる
メイン機のローカル接続を無効にして、ISDN 接続のプロバイダにダイアルアップ、ネットワーク環境を完全に切り替える
で、プロバイダ経由で自宅サーバに接続して、レンタルサーバのメールアドレスにメールを配送を依頼してみると………

553 sorry, that domain isn't in my list of allow rcpthosts

とエラーメッセージが返ってきて、メール配送を拒絶した
これで SMTP の方は正常に稼働するようになったわけだ。

なお、SMTP はその性質上、認証機構を持たない。
従って外から自宅サーバを利用してメールを送りたいという要求と、スパムメールの踏み台にされたくないという要求は見事に衝突する。
これを回避する手段として、認証付きの SMTP が考案されている。
この後に導入する POP3 サーバと連携して POP3 サーバにログインしたユーザの利用している IP アドレスに対して一時的に無制限リレーを許可する POP before SMTP、SMTP に冗談抜きの認証機能を付けてしまう SMTP AUTH がそれだ。
この認証付き SMTP は後日必要になった時点で設定したいと思う。

では、続いて POP3 サーバを設定しよう。
POP3 サーバを実現するソフトウェアにはいくつか種類がある様だが、maildir 形式のメールボックスを利用した場合、これに対応した POP3 サーバが必要である。
qmail では qmail-pop3d という POP3 サーバが用意されているので、これを素直に利用する。

なお、qmail-pop3d には認証機能が用意されていない
これは即ち管理者の任意の認証方式が使えると言うことだが、通常の POP3 の認証ですら機能を持っていないのでコレを用意する。

checkpassword
http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz

これを /usr/local/src/qmail/ にコピーして、以下を実行。

# cd /usr/local/src/qmail/
# tar xzf checkpassword-0.90.tar.gz
# cd checkpassword-0.90

更にコンパイル。

# make setup
# make check

すると、/bin/checkpassword というファイルが出来ているはずだ。
これが通常の POP3 認証を行うモジュールになる。

では xinetd に POP3 の設定を追加する。
/etc/xinetd.d/ に移動して、pop3 という名前で以下の内容のファイルを作成する。

service pop3
{
    disable     = no
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = root
    server      = /var/qmail/bin/qmail-popup
    server_args = arcadiangarden.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
}

んで、xinetd を再起動。

# /sbin/service xinetd restart

レンタルサーバ側のメールアドレスからサーバにメールを送り、/home/********/Maildir/new に届いたのを確認してから、メイン機より Becky!2 で POP3 接続。
メールを取得してみると………
見事にメールの取得に成功した
セキュリティポリシーより POP3 の外部からの接続は出来ないから、これで POP3 の設定も完了した。

あとは WAKWAK から貰った一時的なドメインではなくて、正式なドメインを取得してサーバ公開に踏み切るだけだ。

POP3 は最低限度の認証機構を備えているが、ユーザ名とパスワードはネットワークを平文で流れてしまうため、途中経路で覗かれたら万事休すという弱点がある。
これを回避する APOP が出現しているので、必要があれば後日設定することにしよう。

Valid HTML 4.01 Strict Valid CSS!