このページでは、qmailを利用してメールサーバを構築する方法について説明します。
まず、既に動作しているMTA「sendmail」を停止します。
「sendmail」の停止は、「/etc/rc.conf」に以下の設定を追記します。
sendmail_enable="NONE" |
追記が完了したら、設定を反映させるため、システムを再起動してください。
次に、「qmail」を動作させるために必要ないくつかのソフトウェアをインストールします。
インストールはportsを利用して行います。
portsの取得および展開方法については、「最新のportsを取得して展開する」を参照してください。
「qmail」を動作させるために利用する「tcpserver」をportsからインストールします。
$ cd /usr/ports/sysutils/ucspi-tcp $ make config-recursive $ make install clean |
「qmail」自体は、直接起動させたり、「inetd」経由で起動させたりすることが可能ですが、セキュリティ上の理由から「tcpserver」で起動させるのが一般的です。
このページでも以降「qmail」を「tcpserver」経由で起動させる方法について説明します。
続いて「qmail」本体をportsからインストールします。
$ cd /usr/ports/mail/qmail $ make config-recursive $ make install clean |
「qmail」自体の開発は既に終了しており、作者以外からかなり多くのパッチが提供されています。
make時にメニューが表示されますので、必要なものに適宜チェックを入れて「OK」を選択してください。
最後に、メール取得時のパスワード認証機能を提供する「checkpassword」をportsからビルドします。
$ cd /usr/ports/security/checkpassword $ make config-recursive $ make install clean |
「checkpassword」は、pop3認証をUNIXシステム上のユーザのID/passwordで行うためのプログラムです。
次に、「qmail」を動作させるための設定ファイルを作成します。
「qmail」の各種設定ファイルは「/var/qmail/control」配下に格納します。
下記の各ファイルを生成して上記フォルダに保存してください。
toヘッダなどにドメイン名が省略された場合に補完されるドメイン名を記載しておく設定ファイルです。
kishiro.com |
メールを受信するホスト名・ドメイン名を記載しておく設定ファイルです。
localhost localhost.kishiro.com clavis.kishiro.com kishiro.com |
上記のように「localhost」→「hocalhostから始まるFQDN」→「サーバのFQDN」→「MXレコードに記載されたドメイン名」の順番に記述してください。
「locals」と同じくメールを受信するホスト名・ドメイン名を記載しておく設定ファイルです。
localhost kishiro.com .kishiro.com |
上記のように「localhost」→「MXレコードに記載されたドメイン名」→「"." + MXレコードに記載されたドメイン名」の順番に記述してください。
自サーバのFQDNを記載しておく設定ファイルです。
clavis.kishiro.com |
toヘッダなどにドメイン名が「+」で終わっている場合に補完されるドメイン名を記載しておく設定ファイルです。
kishiro.com |
次に、「qmail」の起動スクリプトを編集します。
まず最初に、「/usr/local/etc/rc.d/」に格納されている起動スクリプト「qmail.sh」を削除します。
このスクリプトは、「qmail」を直接起動させるためのもので、「/var/qmail/rc」へのシンボリックリンクになっています。 今回「qmail」は「tcpserver」経由で起動させますので、このスクリプトを「unlink」で削除します。
$ unlink /usr/local/etc/rc.d/qmail.sh |
次に、「qmail」本体の起動スクリプト「rc」を作成、編集します。
$ cp /var/qmail/boot/home /var/qmail/rc |
今回はqmailの特徴である、Maildir形式でメール管理を行うため、ファイル内の下記箇所を以下のように書き換えます。
qmail-start ./Mailbox splogger qmail |
qmail-start ./Maildir/ splogger qmail |
続いて、qmailを起動させるための「tcpserver」の設定を行います。
まず、設定ファイルの元となるテキストファイル「/etc/tcp.smtp」を以下の内容で作成してください。
192.168.16.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" |
「192.168.16.:allow,RELAYCLIENT=""」は、192.168.16.0/24からのアクセスを許容する設定になります。
ご利用になる環境にあわせ、適宜変更してご利用ください。
続いて、このテキストファイルを元に、tcpserverのアクセス制御用DBファイル(tcp.smtp.cdb)を作成します。
$ /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp |
最後に、tcpserver経由でqmailを起動させるためのスクリプト「tcpserver.sh」を「/usr/local/etc/rc.d/」上に作成し、実行属性を付与します。
#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
[ -f /var/qmail/rc ] || exit 0
case "$1" in
start)
# Start daemons.
echo "Starting qmail."
sh -cf '/var/qmail/rc start &'
tcpserver -HR -v -u [qmaildのUserID] -g [qmaildのGroupID] -x [tcp.smtp.cdbへのパス] \
0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger \
smtpd 3 &
tcpserver -HR -v 0 pop3 /var/qmail/bin/qmail-popup [メールサーバ名] \
/usr/local/bin/checkpassword \
/var/qmail/bin/qmail-pop3d Maildir 2>&1 \
| /var/qmail/bin/splogger pop3d 3 &
touch /var/lock/qmail
;;
stop)
# Stop daemons.
PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
rm -f /var/lock/qmail
;;
*)
echo "Usage: tcpserver.sh {start|stop}"
exit 1
esac
exit 0
|
上記の例では、pop3でメールを取得する際に、ユーザのパスワードで認証を行う「checkpassword」もあわせて起動させています。
上記の[qmaildのUserID] [qmaildのGroupID] [tcp.smtp.cdbへのパス] [メールサーバ名] については、自信の環境にあわせ、適宜設定してください。
メールサーバについては、「mail.kishiro.com」のように、ドメイン名を含んだ形で記述してください。
尚、qmaildのUserIDおよびGroupIDについては、下記の手順で調べることができます。
$ id qmaild |
また、上記のシェルスクリプトでは「 /var/lock/qmail」をロックファイルとして利用しますので、「/var/lock」のフォルダがなければ、mkdirで予め格納先ディレクトリを作成するようにしてください。
最後に、メールを受信したいユーザは、個別に下記のようにしてMaildirを作成します。
$ /var/qmail/bin/maildirmake ~/Maildir |
尚、rootやsys等のシステムユーザについては、上記の手順を踏んでもMaildirベースのメール配送はされません。
これらの特殊なユーザに対するメールを受けたい場合は、後述する「メールアドレスのエイリアス」を参考にして、別のユーザ宛にメールを転送し、そのユーザでメールを受け取るようにしてください。
以上で設定は完了です。
「/usr/local/etc/rc.d/tcpserver.sh」を実行するか、システムを再起動させてqmailを起動させてください。
上記の設定で既にメールが利用できるようになっていますが、rootやsys等のシステムユーザ、またMaildirを持たないユーザや、そもそも存在しないユーザに対してのメールは受信できないようになっています。
これを回避するために、エイリアスを利用して特定ユーザ宛のメールを別のユーザに転送するように設定します。
尚、qmailでのエイリアスは、「/var/qmail/alias」下にあるファイルを編集します。(sendmailやpostfixと違い、「/etc/mail/aliases」および「/etc/mail/aliases.db」は見に行かないので注意してください)
「/var/qmail/alias」には、「.qmail-*」という名前のファイルがいくつか格納されています。 たとえば、「.qmail-root」はroot宛に送られてきたメールの転送先を指定するファイルで、この中に以下のように記述すると、root宛のメールが「hoge@kishiro.com」に転送されます。
&hoge@kishiro.com |
また、以下のように記述することにより、メールを転送することなく、破棄することも可能です。
# |
また、デフォルトでは存在しませんが、「.qmail-default」というファイルを設定することにより、Maildirを持たないユーザや、そもそも存在しないユーザに対してのメールを、別のユーザに一括転送することができます。(記法は「.qmail-root」と同じです)
・ qmailによるSMTPサーバの構築(@IT)
・ POP/IMAPサーバの構築と不正中継対策(@IT)
