はじめに

このページでは、qmailを利用してメールサーバを構築する方法について説明します。

「sendmail」の停止

まずはじめに、既に動作しているMTA「sendmail」を停止させます。
「sendmail」の停止は、「/etc/rc.conf」に以下の記述を追記し、システムを再起動させます。

「rc.conf」の編集
sendmail_enable="NONE"

「qmail」関連のパッケージのインストール

次に、「qmail」を動作させるために必要ないくつかのソフトウェアをインストールします。

「qmail」関連のパッケージのインストール
$ pkg install netqmail
$ pkg install ucspi-tcp
$ pkg install checkpassword

「netqmail」はqmail本体、「ucspi-tcp」はqmailを動作させるために利用する「tcpserver」が含まれるパッケージ、「checkpassword」は./Maildirからメールを取得する際の認証に使うパッケージになります。

qmailの設定

次に、「qmail」を動作させるための設定ファイルを作成します。

「qmail」の各種設定ファイルは「/var/qmail/control」配下に格納します。

以下の例では、このメールサーバに割り当てられたサーバ名を「mail.kishiro.com」、MXレコードで指定したドメイン名を「kishiro.com」として設定しています。

/var/qmail/control/defaultdomain

toヘッダなどにドメイン名が省略された場合に補完されるドメイン名を記載しておく設定ファイルです。

「defaultdomain」
kishiro.com

/var/qmail/control/locals

メールを受信するホスト名・ドメイン名を記載しておく設定ファイルです。

「locals」
localhost
localhost.kishiro.com
mail.kishiro.com
kishiro.com

上記のように「localhost」→「localhostから始まるFQDN」→「サーバのFQDN」→「MXレコードに記載されたドメイン名」の順番に記述します。

/var/qmail/control/rcpthosts

「locals」と同じくメールを受信するホスト名・ドメイン名を記載しておく設定ファイルです。

「rcpthosts」
localhost
kishiro.com
.kishiro.com

上記のように「localhost」→「MXレコードに記載されたドメイン名」→「"." + MXレコードに記載されたドメイン名」の順番に記述します。
「rcpthosts」を正しく配置しないと、qmailは他のドメイン宛のメールを中継してしまいますので、ファイル名や記述内容には十分注意してください。

/var/qmail/control/me

自サーバのFQDNを記載しておく設定ファイルです。

「me」
mail.kishiro.com

/var/qmail/control/plusdomain

toヘッダなどにドメイン名が「+」で終わっている場合に補完されるドメイン名を記載しておく設定ファイルです。

「plusdomain」
kishiro.com

起動スクリプトの編集

次に、「qmail」の起動スクリプトを作成します。
netqmailパッケージをインストールすると、「/usr/local/etc/rc.d/」に起動スクリプト(へのシンボリックリンク)が生成されているため、まずはこれを削除します。
(これらの起動スクリプトはそのまま使えないことは無いのですが、肝心のqmail-pop3dの起動スクリプトが無く、中途半端です。)

起動スクリプトの削除
$ unlink /usr/local/etc/rc.d/qmailsend
$ unlink /usr/local/etc/rc.d/qmailsmtpd

続いて、qmailの必要なプログラムをまとめて起動させるためのスクリプト「qmail」を「/usr/local/etc/rc.d/」上に作成し、実行属性を付与します。

起動スクリプト「qmail」の作成
#!/bin/sh
#
# PROVIDE: qmail
# REQUIRE: NETWORKING SERVERS DAEMON resolv
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
#qmail_enable="YES"
#

PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

. /etc/rc.subr

name="qmail"
rcvar="${name}_enable"

load_rc_config ${name}

start_cmd="${name}_start"
stop_cmd="${name}_stop"

qmail_start() {
	tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

	qmail-start ./Maildir/ splogger qmail &

	tcpserver -4 -HR -v -u 82 -g 81 -x /etc/tcp.smtp.cdb 0 smtp qmail-smtpd 2>&1 | splogger smtpd 3 &
	tcpserver -4 -HR -v 0 pop3 qmail-popup mail.kishiro.com checkpassword qmail-pop3d Maildir 2>&1 | splogger pop3d 3 &
}

qmail_stop() {
	killall qmail-send
	killall tcpserver
}

run_rc_command "$1"

「tcpserver」経由での起動の設定

続いて、qmailを起動させるための「tcpserver」の設定をします。
設定ファイルの元となるテキストファイル「/etc/tcp.smtp」を以下の内容で作成します。

「/etc/tcp.smtp」の作成
192.168.0.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""

「192.168.0.:allow,RELAYCLIENT=""」は、192.168.0.0/24からのリレーのアクセスを許容する設定になります。
使用する環境にあわせ、適宜変更してご利用ください。

「rc.conf」への追記

上記の起動スクリプトは「rc.conf」の設定を見てqmailを起動させるようになっているため、「rc.conf」に設定を追記します。

「/etc/rc.conf」への追記
qmail_enable="YES"

メールアカウント毎ののMaildirの作成

メールを受信したいユーザアカウントは、個別に下記のようにしてMaildirを作成しておきます。

「Maildir」の作成
$ /var/qmail/bin/maildirmake ~/Maildir

尚、rootやsys等のシステムユーザについては、各々のホームディレクトリ内のMaildirにメールは配送されません。
これらの特殊なユーザに対するメールを受けたい場合は、後述する「メールアドレスのエイリアス」を参考にして、別のユーザ宛にメールを転送し、そのユーザでメールを受け取る必要があります。

以上で設定は完了です、システムを再起動させてqmailを起動させてください。

tcpserverがうまく起動しない場合のトラブルシューティング

上記の通り設定しシステムを再起動させても、tcpserverが起動しない場合があります。
この場合は、tcpserverが起動されるスクリプトである「/usr/local/etc/rc.d/qmail」の中身を確認し、どこでエラーが出ているのかを確認してください。

私も、以前FreeBSD 10.4-RELEASEのjail環境でtcpserverが起動できない現象に見舞われましたが、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」に転送されます。

「.qmail-root」の編集(「hoge@kishiro.com」の転送)
&hoge@kishiro.com

また、以下のように記述することにより、メールを転送することなく、破棄することも可能です。

「.qmail-root」の編集(メールの破棄)
#

また、「.qmail-default」というファイルを作成し設定することにより、Maildirを持たないユーザや、そもそも存在しないユーザに対してのメールを、別のユーザに一括転送することができます。(記法は「.qmail-root」と同じです。)

変更履歴

2018/03/26

・「/usr/local/etc/rc.d/qmail」の起動スクリプトを修正。

2017/10/24

・起動スクリプトをrc.dの作法に沿って書き直し。

2017/04/25

・pkgを利用したインストール方法に書き直し。
・rcpthostsに関する注意事項を追記。
・tcpserverのシェルスクリプトをFreeBSD 10.3-RELEASEで動作確認したものに差し替え。

2014/05/14

・「tcpserverがうまく起動しない場合のトラブルシューティング」を追記。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まだ評価がありません

表示できるメッセージはありません。