qmailを利用してメールサーバを構築する方法について説明する。
まずはじめに、既に動作しているMTA「sendmail」を停止する。
「sendmail」の停止は、「/etc/rc.conf」に以下の記述を追記し、システムを再起動させる。
sendmail_enable="NONE"
次に、「qmail」を動作させるために必要ないくつかのソフトウェアをインストールする。
$ pkg install netqmail $ pkg install ucspi-tcp $ pkg install checkpassword
「netqmail」はqmail本体、「ucspi-tcp」はqmailを動作させるために利用する「tcpserver」が含まれるパッケージ、「checkpassword」は./Maildirからメールを取得する際の認証に使うパッケージとなる。
次に、「qmail」を動作させるための設定ファイルを作成する。
「qmail」の各種設定ファイルは「/var/qmail/control」配下に格納する。
以下の例では、このメールサーバに割り当てられたサーバ名を「mail.kishiro.com」、MXレコードで指定したドメイン名を「kishiro.com」として設定している。
toヘッダなどにドメイン名が省略された場合に補完されるドメイン名を記載しておく設定ファイル。
kishiro.com
メールを受信するホスト名・ドメイン名を記載しておく設定ファイル。
localhost localhost.kishiro.com mail.kishiro.com kishiro.com
上記のように「localhost」→「localhostから始まるFQDN」→「サーバのFQDN」→「MXレコードに記載されたドメイン名」の順番に記述する。
「locals」と同じくメールを受信するホスト名・ドメイン名を記載しておく設定ファイル。
localhost kishiro.com .kishiro.com
上記のように「localhost」→「MXレコードに記載されたドメイン名」→「"." + MXレコードに記載されたドメイン名」の順番に記述する。
「rcpthosts」を正しく配置しないと、qmailは他のドメイン宛のメールを中継してしまうので、ファイル名や記述内容には十分注意のこと。
自サーバのFQDNを記載しておく設定ファイル。
mail.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
保守性の高いMaildir形式でメール管理を行うよう、ファイル内の下記箇所を以下のように書き換える。
qmail-start ./Mailbox splogger qmail
qmail-start ./Maildir/ splogger qmail
「./Maildir」ではなく、ディレクトリを明示的に示す「/」が末尾に付く「./Maildir/」になっている点に注意のこと。
これがないと、メール配送時に「/var/log/message」に「deferral: Unable_to_open_./Maildir:_is_a_directory._(#4.2.1)」のようなエラーが表示され、メールがユーザのMaildirに正しく格納されない。
続いて、qmailを起動させるための「tcpserver」の設定をする。
まず、設定ファイルの元となるテキストファイル「/etc/tcp.smtp」を以下の内容で作成する。
192.168.0.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT=""
「192.168.0.:allow,RELAYCLIENT=""」は、192.168.0.0/24からのリレーをアクセスを許容する設定となる。
ご利用になる環境にあわせ、適宜変更して利用のこと。
続いて、このテキストファイルを元に、tcpserverのアクセス制御用DBファイル(tcp.smtp.cdb)を作成する。
$ /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
最後に、tcpserver経由でqmailを起動させるためのスクリプト「qmail.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) echo "Starting qmail." if [ -e /var/lock/qmail ] then echo "qmail already running." exit 1 fi sh -cf '/var/qmail/rc start &' tcpserver -4 -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 -4 -HR -v 0 pop3 /var/qmail/bin/qmail-popup [メールサーバ名] \ checkpassword \ /var/qmail/bin/qmail-pop3d Maildir 2>&1 \ | /var/qmail/bin/splogger pop3d 3 & touch /var/lock/qmail ;; stop) echo "Stopping qmail." if [ ! -e /var/lock/qmail ] then echo "qmail not running." exit 1 fi ps -a | grep -e "tcpserver" -e "qmail-send" | grep -v grep | awk '{print $1}' | while read pid do if [ ! -z "${pid}" ] ; then kill ${pid} 1> /dev/null 2>&1 fi done 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へのパス]、[メールサーバ名] については、各自の環境にあわせ適宜設定のこと。
尚、qmaildのUserIDおよびGroupIDについては、下記の手順で調べることができる。
$ id qmaild
また、上記のシェルスクリプトでは「 /var/lock/qmail」をロックファイルとして利用するので、「/var/lock」のフォルダがなければ、mkdirで予め格納先ディレクトリを作成しておくこと。
メールサーバについては、「mail.kishiro.com」のように、ドメイン名を含んだ形で記述のこと。
最後に、メールを受信したいユーザは、個別に下記のようにしてMaildirを作成しておく。
$ /var/qmail/bin/maildirmake ~/Maildir
尚、rootやsys等のシステムユーザについては、各々のホームディレクトリ内のMaildirにメールは配送されない。
これらの特殊なユーザに対するメールを受けたい場合は、後述する「メールアドレスのエイリアス」を参考にして、別のユーザ宛にメールを転送し、そのユーザでメールを受け取る必要がある。
以上で設定は完了。
「/usr/local/etc/rc.d/qmail.sh stop」及び「/usr/local/etc/rc.d/qmail.sh start」を実行するか、システムを再起動させてqmailを起動させる。
上記の通り設定しシステムを再起動させても、tcpserverが起動しない場合がある。
この場合は、tcpserverの起動スクリプトである「/usr/local/etc/rc.d/tcpserver.sh」の中身を確認し、どこでエラーが出ているのかを確認すること。
(エラーを表示させるには、スクリプト内の「2>&1」の表記を削除する必要がある。)
以前、FreeBSD 8.4-RELEASEでtcpserverが起動できない現象に見舞われたが、その時はkernelのIPv6を無効にしていたことが原因だった。
この場合、tcpserverの起動パラメータに「-4」を付与しIPv4のTCP Socketのみを作成させることにより、問題を回避できた。(上記も例では「-4」を指定済み。)
上記までの設定で既にメールが利用できるようになっているが、このままの設定では、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」と同じ。)
・pkgを利用したインストール方法に書き直し。
・rcpthostsに関する注意事項を追記。
・tcpserverのシェルスクリプトをFreeBSD 10.3-RELEASEで動作確認したものに差し替え。
・「tcpserverがうまく起動しない場合のトラブルシューティング」を追記。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。