google 等の検索エンジンからこのページへ来た方へ
お手数ですがトップページの
注意書きをお読み下さい。
IP アドレス、ドメイン名等は全て仮のものです。
インターネットへの常時接続が一般的になり、
個人でドメインを取得することも珍しくなくなりました。
そうすると、メールサーバも自前で立ててみたくなります。
メールサーバ
(MTA, Mail Transfer Agent)
といえば
FreeBSD に最初から附属する sendmail がまず思いつきます。
しかし sendmail は非常に細かな設定ができる反面、
設定ファイルの書式が複雑、
効率があまり良くない、
セキュリティの問題が多いなどの問題があります。
こうした問題に対して、
qmail
や
Postfix
などの新しいメールサーバが開発されています。
ここでは、qmail についてインストールと設定を行ないます。
Windows などのクライアントがメールサーバ上のメールを取得する際は、
POP を使うことにします。
ところで qmail 附属の POP サーバ
qmail-pop3d にはPOP 接続時のユーザ・パスワードの認証機能がありません。
ユーザ・パスワードの認証は別のプログラムが行ないます。
認証用ソフトウェアにはいろいろありますが、
ここでは checkpw
をインストールします。
checkpw は APOP にも対応しています。
checkpw は ports に含まれていないようなので、
自力でインストールします。
自力と言っても簡単で、
http://checkpw.sourceforge.net/checkpw/
から checkpw-1.01.tar.gz を取ってきて適当なディレクトリで展開します。
それから checkpw-1.01 ディレクトリに移動して
make setup check を実行すればインストールされます。
(checkpw-1.01.tar.gz が /SOMEWHERE にあって、
展開するディレクトリが /WORK とします)
# cd /WORK # tar zxvf /SOMEWHERE/checkpw-1.01.tar.gz # cd checkpw-1.01 # make setup check
次にサーバ制御ツールの tcpserver
をインストールします。
実は前述の qmail-pop3d や SMTP サーバの qmail-smtpd は、
外部からの接続を直接受け付けることができません。
したがって tcpserver や inetd などのスーパーサーバを経由して、
外部からの接続を受け付けます。
tcpserver は
ucspi-tcp
というパッケージに含まれています。
ucspi-tcp は ports にあるのでインストールは簡単です。
# cd /usr/ports/sysutils/ucspi-tcp # make ; make installqmail のインストール
ここから qmail のインストールに入ります。
qmail も ports に含まれますが、
パッチをいくつか当てるので make ; make install 一発とはいきません。
まずは /usr/ports/mail/qmail で make patch を実行します。
# cd /usr/ports/mail/qmail # make patch
次に日付を地方標準時にするパッチ
qmail-date-localtime.patch
を当てます。
qmail が生成する日付はグリニッジ標準時 (GMT) ですが、
このパッチでシステムの地域設定に従った、地域標準時の時間を生成します。
# cd work/qmail-1.03/ # patch -p1 < /SOMEWHERE/qmail-date-localtime.patch
次に POP と APOP を共存させるさせるために、
checkpw 附属の qmail-popup-auth.patch を当てます。
# patch -p1 < /WORK/ckeckpw-1.00/qmail-popup-auth.patch
qmail を make して、インストールします。
# cd /usr/ports/mail/qmail # make ; make install
続いて設定に入ります。
念のため sendmail を止めます。
# killall sendmail
/etc/rc.conf を書き換えて、
次回のブート時からは sendmail が動かないようにします。
/etc/rc.conf の sendmail_enable="YES" となっているところを、
sendmail_enable="NONE" にします。
次に /etc/mail/mailer.conf を書き換えます。
mailer.conf は mailwrapper というソフトの設定ファイルです。
mailwrapper は /usr/sbin/sendmail の代わりに、
適切な MTA を起動します
(FreeBSD では、/usr/sbin/sendmail は
/usr/sbin/mailwrapper へのシンボリックリンクになっています)。
/etc/mail/mailer.conf を次のようにします。
sendmail /usr/libexec/sendmail/sendmail send-mail /usr/libexec/sendmail/sendmail mailq /usr/libexec/sendmail/sendmail newaliases /usr/libexec/sendmail/sendmail hoststat /usr/libexec/sendmail/sendmail purgestat /usr/libexec/sendmail/sendmail書き換え後
sendmail /var/qmail/bin/sendmail send-mail /var/qmail/bin/sendmail mailq /var/qmail/bin/qmail-qread newaliases /var/qmail/bin/newaliases
hoststat と purgestat の記述が無くなっていますが、
qmail には該当するものが無いようです。
ちなみに hoststat は配信先ホストごとの配信成否記録の表示
(sendmail -bh に相当)で、
purgestat は配信先ホストごとの配信成否記録の消去 (sendmail -bH に相当)
をします。
次に qmail の設定ファイルを書きます。
qmail の設定ファイルは ports からインストールすると
/var/qmail/control 以下に置かれます。
qmail は 1 つの設定項目に対して 1 つのファイルが割当てられています
(ファイル名が設定項目名、1 つのファイルは 1 行ないし数行)。
今回設定するファイルは次の 7 つです
(デフォルトリレー先は mail.provider.xx.jp とします)。
設定ファイル | 設定内容 |
/var/qmail/control/me (必須) | qmail が動作するマシンのホスト名 (FQDN) |
/var/qmail/control/rcpthosts (必須) | 受信を許可する宛先のドメイン名 |
/var/qmail/control/locals | ローカル配送とする宛先のドメイン名 |
/var/qmail/control/envnoathost | 宛先アドレスに "@" が無い場合に追加するドメイン名 |
/var/qmail/control/smtproutes | デフォルトリレー先 SMTP サーバの指定 |
/var/qmail/control/defaulthost | アドレスにドメイン部が無い場合に追加するドメイン名 |
/var/qmail/control/defaultdomain | アドレスのドメイン部に "." が無い場合に追加するドメイン名 |
次に /var/qmail/boot 内の起動用スクリプトの雛型を
/var/qmail/rc という名前でコピーします
(なお、qmail を ports からインストールすると、
/usr/local/etc/rc.d/qmail.sh が
/var/qmail/rc へのシンボリックリンクとなります)。
雛型にはいくつか種類がありますが、
今回は /var/qmail/boot/maildir を使います。
qmail では、ユーザのメールボックスは mbox 形式
(1 ファイルに複数のメールを格納、sendmail の方式)
の他に、
Maildir 形式
(1 メール 1 ファイル) を利用できます。
/var/qmail/boot/maildir はこの
Maildir 形式のメールボックスを使うように
qmail を起動するためのスクリプトです。
# cp /var/qmail/boot/maildir /var/qmail/rc
次に tcpserver のデータベースファイルを作ります。
実は qmail-smtpd は宛先が
/var/qmail/control/rcpthosts
に記述されたホスト以外へのメールは全て拒否します。
つまり、LAN 内のクライアントから
my-domain.xx.jp 以外へあてたメールも拒否します。
ただし、qmail-smtpd に環境変数 RELAYCLIENT が渡されると
/var/qmail/control/rcpthosts の設定に関わらず、
その接続に対してはリレーが許可されます。
tcpserver にリレー許可のアクセス制御情報を記述した
データベースを読み込ませることにより、
リレー許可を行ないます。
データベースファイルを準備するため、
/etc/tcp.smtp を作成します。
次の例では、127.*.*.* と 192.168.0.*
(* は任意) のホストからの接続については、
環境変数 RELAYCLIENT を設定します。
127.:allow,RELAYCLIENT="" 192.168.0.:allow,RELEYCLIENT=""
/etc/tcp.smtp を tcpserver 用のデータベースファイルの
cdb 形式に変換するため、tcprules コマンドを実行します。
次のコマンド書式中の /etc/tcp.smtp.cdb が
tcpserver のデータベースファイルです。
/etc/tcp.smtp.tmp は tcprules が生成する一時ファイルです。
tcprules の実行終了と同時に削除されます。
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
次に /var/qmail/rc に
qmail-smtpd と qmail-popup (qmail-pop3d) を起動する設定を加えます。
/var/qmail/rc 中の exit 0 の行の前に次の行を加えます。
qmail-smtpd は UID 82 (qmaild) GID 81 (qnofiles) で起動し、
接続ログを /var/qmail/splogger 経由で syslog に送ります。
qmail-popup の引数には、POP サーバの FQDN が必要です。
ログは /var/qmail/splogger 経由で syslog に送ります。
nohup /usr/local/bin/tcpserver -vHR -x /etc/tcp.smtp.cdb \ -u 82 -g 81 0 smtp /var/qmail/bin/qmail-smtpd 2>&1| \ /var/qmail/bin/splogger smtpd & nohup /usr/local/bin/tcpserver -vHR 0 pop3 \ /var/qmail/bin/qmail-popup server01.my-domain.xx.jp /bin/selectcheckpw \ /var/qmail/bin/qmail-pop3d Maildir 2>&1| \ /var/qmail/bin/splogger pop3d &
次にエイリアスの設定をします。
最低限 postmaster, mailer-daemon, root の 3 つが必要です
(qmail では root へはメールを配送しません)。
qmail では hoge というユーザのエイリアスを設定する場合、
/var/qmail/alias/.qmail-hoge というファイルを作成し、
転送先アドレスをその中に記述します。
# echo user@my-domain.xx.jp > /var/qmail/alias/.qmail-postmaster # echo user@my-domain.xx.jp > /var/qmail/alias/.qmail-mailer-daemon # echo user@my-domain.xx.jp > /var/qmail/alias/.qmail-root
ユーザのメールボックスを作成します。
Maildir 形式のメールボックスを作成するにはホームディレクトリで
/var/qmail/bin/maildirmake コマンドを実行します
(メールボックスの所有者、パーミッションに注意してください)
。
また、POP3 のユーザ認証は
~/Maildir/.password に記述されたパスワードを使用します。
これも作成します
(~/Maildir/.password のパーミッションは
600 でないと認証に失敗します)
。
% /var/qmail/bin/maildirmake Maildir % echo "設定したいパスワード" > ~/Maildir/.password % chmod 600 ~/Maildir/.password
qmail を起動してメールの配送テストを行ないます。
qmail-inject コマンドを使用してメールが配送されるか確認します
(あらかじめユーザ hoge のメールボックスを作成しておいて下さい)。
Ctrl+D で qmail-inject コマンドを終了します。
qmail-inject コマンドを終了するとメールが配送されるので、
~hoge/Maildir/new 以下にメールが配送されたか確認して下さい。
# /var/qmail/rc start # /var/qmail/bin/qmail-inject To: hoge Subject: test This is test.
POP3 サーバへの接続の確認も行ないます。
telnet で 110 番ポートへ接続します。
ユーザ名とパスワードを入力して "+OK" という応答があれば、
ユーザ認証に成功しています
# telnet server01.my-domain.xx.jp 110 Trying 192.168.0.1... Connected to server01.my-domain.xx.jp. Escape character is '^]'. +OK <5467.1042076772@server01.my-domain.xx.jp> USER ユーザ名 +OK PASS パスワード +OK quit +OK Connection closed by foreign host.
これで問題なければリブートします。