GHOST > masaya's memo > Server
CREATED: March 9, 2003 LAST MODIFIED: February 11, 2004
sendmail はいろいろできて便利だけど、設定の仕方が理解しにくかった(でも覚えたい)。
qmail の設定はシンプルで理解しやすかったかな。
あと、sendmail と違って Maildir形式でメールがスプールされるのがお気に入り。~/Maildir 以下に保存されるのでバックアップが楽だし、1メールに付き1ファイルなのでメールを溜め込んだときの反応が早いらしい。(^^
postfix は Maildir に対応しているらしいので、postfix でもいいかも。
qmail は SMTP-AUTH に対応していないので、拡張パッケージ qmail-vida を導入し、SMTP-AUTH / APOP 及びバーチャルドメイン管理機能を利用。
基本的に、ports を利用して install 作業をします。
導入ソフトウェア | Ver. | 説明 |
---|---|---|
qmail | 1.03 | qmail 本体。 |
qmail-vida | 0.51 | qmail とcheckpassword に SMTP認証とAPOP対応のPOP認証を追加し、バーチャルドメインと仮想ユーザを管理するためのプログラムを提供する。 |
checkpassword | 0.90 | passwordチェックを行うソフトウェア。qmail のSMTP / POP認証に使用する。 |
ucspi-tcp | 0.88 | inetdと同等な機能を提供する。smtpd / pop3d の起動に使用する。 |
qmail には、多数のパッチが存在する※1ので、必要に応じてパッチ適用しましょう。
私は、以下のpatchを導入しています。
patchファイル | 説明 |
---|---|
qmail-date-localtime.patch | Recieved フィールドの日時は、標準では GMT が入る。これをローカルタイム(JST) にするには、qmail-date-localtime patch 当てる必要がある。 |
qmail-smtpd-relay-reject | '%'等を含むアカウントへのメール受信を禁止し、relayを抑止する。 このパッチを当てることにより、受信後エラーメール返信の手順を行わず、最初の受信時にエラーとするようになる。 |
qmailqueue-patch | 環境変数QMAILQUEUEによりqueue登録プログラムを変更する。qmail-scanner導入のため必要。 portにてmake時に WITH_QMAILQUEUE_PATCH=yes を指定することにより導入。 |
qmail-large-dns.patch | DNS の MX レコードが 512byte 以上の応答(RFC違反らしい)を返してくる AOL などに対応するためのパッチ。 portにてデフォルトで導入される。 |
qmailでは以下のユーザとグループを使用します。
ユーザ | UID | グループ | GID | 用途 |
---|---|---|---|---|
alias | 81 | qnofiles | 81 | |
qmaild | 82 | qnofiles | 81 | |
qmaill | 83 | qnofiles | 81 | |
qmailp | 84 | qnofiles | 81 | |
qmailq | 85 | qmail | 82 | |
qmailr | 86 | qmail | 82 | |
qmails | 87 | qmail | 82 |
これらのユーザ / グループはportで自動登録されますので作成する必要はありません。
UID,GIDは環境によって変更されるかもしれません。
qmail-vidaで使用するユーザとグループの追加をします。
ユーザvpopはバーチャルドメインを使用する場合に作成する必要があります。
バーチャルドメインをローカルユーザと切り離して運用しない場合には作成する必要はありません。
ユーザ | UID | グループ | GID | 用途 |
---|---|---|---|---|
pop | 68 | mail,vida | 6,103 | ローカルドメイン所有ユーザ |
authdb | 103 | vida | 103 | パスワードデータベース管理ユーザ |
qmailu | 104 | vida | 103 | users/assignファイル管理ユーザ |
vpop | 105 | vida | 103 | バーチャルドメイン所有ユーザ |
UID,GIDは環境にあわせて空いている数字を設定してください。
popユーザは、FreeBSDに標準で登録済みのユーザを使用します。
手作業で当てるpatchと、qmail-vidaパッケージをダウンロードします。
私と同じpatchを当てる場合には、この他のファイルはportで自動取得するのでダウンロードしておく必要はありません。
qmail-vidaパッケージを取得しておきます。
qmail-vidaもportになってるとべんりなんだけどなぁ(ぼそっ)。
$ fetch http://www.emaillab.org/djb/qmail-vida/software/qmail-vida-0.51.tar.gz Receiving qmail-vida-0.51.tar.gz (69784 bytes): 100% 69784 bytes transferred in 0.0 seconds (1.92 MBps)
適用するpatchをあらかじめ取得しておきます。
$ fetch ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch Receiving qmail-date-localtime.patch (2603 bytes): 100% 2603 bytes transferred in 0.0 seconds (104.79 kBps) $ fetch http://www.qmail.org/qmail-smtpd-relay-reject Receiving qmail-smtpd-relay-reject (1230 bytes): 100%
1230 bytes transferred in 0.0 seconds (2.61 MBps)
qmailqueue-patch, qmail-large-dns.patchは、portで自動取得するのでダウンロードしておく必要はありません。
qmail本体に適用するpatchあてていきます。
まず、portsを利用してアーカイブの取得 / 展開 / patchの適用をします。
# cd /usr/ports/mail/qmail # make patch WITH_QMAILQUEUE_PATCH=yes ===> Extracting for qmail-1.03_1 >> Checksum OK for qmail-1.03.tar.gz. >> Checksum OK for qmail-103.patch. >> Checksum OK for qmailqueue-patch. ===> Patching for qmail-1.03_1 ===> Applying distribution patches for qmail-1.03_1 ===> Applying FreeBSD patches for qmail-1.03_1
これでqmailqueue-patch, qmail-large-dns.patchが適用された状態になっています。
次に、qmail-smtpd-relay-reject, qmail-date-localtime.patchを適用します。
# cd work/qmail-1.03 # patch -p1 < path_to_qmail-date-localtime.patch Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- <中略> |--- qmail-1.03.orig/date822fmt.c Tue Apr 15 15:05:23 1997 |+++ qmail-1.03/date822fmt.c Fri Apr 18 00:39:41 1997 -------------------------- Patching file date822fmt.c using Plan A... Hunk #1 succeeded at 1. Hunk #2 succeeded at 13. done # patch -p1 < path_to_qmail-smtpd-relay-reject Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |--- orig/qmail-smtpd.c Mon Jun 15 06:53:16 1998 |+++ qmail-smtpd.c Sat Feb 9 12:07:19 2002 -------------------------- Patching file qmail-smtpd.c using Plan A... Hunk #1 succeeded at 53. Hunk #2 succeeded at 217. Hunk #3 succeeded at 266. Hmm... Ignoring the trailing garbage. done
すべてのpatchが成功していることを確認しておくことを忘れずに。
# cd /usr/ports/security/checkpassword # make patch ===> Extracting for checkpassword-0.90 >> Checksum OK for checkpassword-0.90.tar.gz. ===> Patching for checkpassword-0.90
# cd /usr/ports/sysutils/ucspi-tcp # make patch ===> Extracting for ucspi-tcp-0.88 >> Checksum OK for ucspi-tcp-0.88.tar.gz. >> Checksum OK for ucspi-tcp-0.88-man.tar.gz. ===> Patching for ucspi-tcp-0.88
portを使ってもcheckpasswordとucspi-tcpにはpatchは当てないみたいだけど、将来変更があるかもしれないのとconfigure前までの処理ということで、make patchしています。
qmail-vidaパッケージのtarアーカイブを展開します。
# cd /usr/local/src/ # tar zxvf path_to_qmail-vida-0.51.tar.gz
FreeBSD ports でのソースディレクトリにあわせて、Makefileの先頭3行を変更します。
# cd qmail-vida-0.51/ # vi Makefile QMAILSRC = /usr/ports/mail/qmail/work/qmail-1.03 CHECKPASSWORDSRC= /usr/ports/security/checkpassword/work/checkpassword-0.90 UCSPITCPSRC = /usr/ports/sysutils/ucspi-tcp/work/ucspi-tcp-0.88
各ソフトウェアのバージョンが上がった場合には、パスが変更されます。
portでのソース展開先を確認して設定してください。
vidaパッケージのqmail / checkpasswordに対するpatchを適用します。
qmail-vidaのマニュアル通りにmake patchすると、qmailのpatchでコケてしまいcheckpasswordにpatchがあたらないので別々にpatchを適用します。
# make patch-checkpassword <中略> -------------------------- |diff -u checkpassword-0.90.orig/conf-home checkpassword-0.90/conf-home |--- checkpassword-0.90.orig/conf-home Sat Dec 23 15:40:46 2000 |+++ checkpassword-0.90/conf-home Wed Jan 9 23:53:20 2002 -------------------------- Patching file conf-home using Plan A... Hunk #1 succeeded at 1. done
qmailへのpatchはエラーになってしまいます。 なせ エラーになるかはまだ追跡調査していません。
patchの内容を見たところ、qmail-smtpupのmanについてのインストール設定と思われるので、エラーのまま放置しています。
# make patch-qmail <中略> -------------------------- |diff -u qmail-1.03.orig/hier.c qmail-1.03/hier.c |--- qmail-1.03.orig/hier.c Mon Jun 15 19:53:16 1998 |+++ qmail-1.03/hier.c Sun Oct 28 16:47:14 2001 -------------------------- Patching file hier.c using Plan A... Hunk #1 succeeded at 32 with fuzz 1. Hunk #2 succeeded at 64 (offset -45 lines). Hunk #3 succeeded at 82 (offset -45 lines). Hunk #4 failed at 203. 1 out of 4 hunks failed--saving rejects to hier.c.rej <中略> done *** Error code 1 Stop in /usr/local/src/test-vida/qmail-vida-0.51.
ライブラリをqmail-vidaパッケージからqmailとcheckpasswordのディレクトリにコピーします。
# make copy here=`pwd` && cd src/qmail && /bin/cp `/bin/cat ${here}/src/qmail/FILES` ${here }//usr/ports/mail/qmail/work/qmail-1.03/ usage: cp [-R [-H | -L | -P]] [-f | -i | -n] [-pv] src target cp [-R [-H | -L | -P]] [-f | -i | -n] [-pv] src1 ... srcN directory *** Error code 64
うぅ。エラーになってしまいました…。
ソースディレクトリ指定で絶対パスを指定したのでエラーになっているようです。
もう一度Makefileを修正しましょう。
変更点は、
$${here}/${QMAILSRC}/ → /${QMAILSRC}/
$${here}/${CHECKPASSWORD SRC}/ → ${CHECKPASSWORDSRC}/
です。
# vi Makefile copy-qmail: here=`pwd` && cd src/qmail && \ ${CP} `${CAT} $${here}/src/qmail/FILES` ${QMAILSRC}/ copy-checkpassword: here=`pwd` && cd src/checkpassword && \ ${CP} `${CAT} $${here}/src/checkpassword/FILES` ${CHECKPASSWORDSRC}/ here=`pwd` && cd ${QMAILSRC} && \ ${CP} `${CAT} $${here}/djblib/checkpassword/QMAIL` ${CHECKPASSWORDSRC}/ here=`pwd` && cd ${UCSPITCPSRC} && \ ${CP} `${CAT} $${here}/djblib/checkpassword/UCSPITCP` ${CHECKPASSWORDSRC }/
再度make copyすると、ライブラリのコピー終了です。
# make copy here=`pwd` && cd src/qmail && /bin/cp `/bin/cat ${here}/src/qmail/FILES` /usr/p orts/mail/qmail/work/qmail-1.03/ here=`pwd` && cd src/checkpassword && /bin/cp `/bin/cat ${here}/src/checkpasswo rd/FILES` /usr/ports/security/checkpassword/work/checkpassword-0.90/ here=`pwd` && cd /usr/ports/mail/qmail/work/qmail-1.03 && /bin/cp `/bin/cat ${h ere}/djblib/checkpassword/QMAIL` /usr/ports/security/checkpassword/work/checkpas sword-0.90/ here=`pwd` && cd /usr/ports/sysutils/ucspi-tcp/work/ucspi-tcp-0.88 && /bin/cp ` /bin/cat ${here}/djblib/checkpassword/UCSPITCP` /usr/ports/security/checkpasswor d/work/checkpassword-0.90/ here=`pwd` && cd /usr/ports/mail/qmail/work/qmail-1.03 && /bin/cp `/bin/cat ${h ere}/djblib/vida/QMAIL` ${here}/src/vida/ here=`pwd` && cd /usr/ports/sysutils/ucspi-tcp/work/ucspi-tcp-0.88 && /bin/cp ` /bin/cat ${here}/djblib/vida/UCSPITCP` ${here}/src/vida/ here=`pwd` && cd /usr/ports/security/checkpassword/work/checkpassword-0.90 && / bin/cp `/bin/cat ${here}/djblib/vida/CHECKPASSWORD` ${here}/src/vida/
これでやっとmakeする準備が完了しました。
qmailをinstallする際に、既に/var/qmail/control/rcpthosts, /var/qmail/control/localsファイルが存在する場合には、上書きされてしまうので退避しておきます。
# cp /var/qmail/control/rcpthosts /var/qmail/control/rcpthosts.backup # cp /var/qmail/control/locals/var/qmail/control/locals.backup
qmailをmakeしinstallします。
ports には、sendmail から qmail に移行するためのターゲットがあるので、それも実行しておきます。
# cd /usr/ports/mail/qmail/ # make # make install # make disable-sendmail # make enable-qmail
make disable-sendmail で /etc/rc.conf に sendmail_enable="NO" が追加されます。make enable-qmail では /etc/mail/mailer.conf が qmail 用に変更されて、FreeBSD の mailwrapper の動作が変わります。
# cd /usr/ports/security/checkpassword # make # make install
# cd /usr/ports/sysutils/ucspi-tcp # make # make install
グループvidaを追加、ユーザpopをグループvidaに追加するために、/etc/groupを編集し以下の行を追記します。
# vi /etc/group vida:*:103:pop
ユーザauthdb, qmailu, vpopを追加、ユーザpopの設定を変更するためにvipwを起動し編集を行います。
# vipw pop:*:68:6::0:0:Post Office Owner:/home/pop:/usr/local/bin/bash <中略> qmailu:*:103:103::0:0:qmailu:/var/qmail:/nonexistent authdb:*:104:103::0:0:authdb:/var/qmail:/nonexistent
ユーザpopのホームディレクトリ / ログインシェルを変更し、ユーザqmailu, ユーザauthdbを登録します。
ユーザpopのログインシェルは好みのものを記入してください。
ユーザpop,のホームディレクトリは、仮想メールボックス(システムアカウントの存在しないメールアカウント)の保存先に使用されるので、仮想メールボックスを保存したいパーティションを指定してください。
アカウントの登録が終わったら、ユーザpopのホームディレクトリを作成しておきます。
# makedir -m 755 /home/pop # chown pop:vida /home/pop
ここでは、ユーザpopの環境設定は行っていません。 必要ならば各自で作成してください。
# cd /usr/local/src/qmail-vida-0.51/src/vida/ # make # make setup check
qmail-vidaの付属文書(html形式)が/var/qmail/doc/qmail-vida/にインストールされます。
# cd /usr/local/src/qmail-vida-0.51/ # make install-doc
ここまでの操作で、/var/qmail/control に qmail のコントロールファイルが作成されています。/var/qmail/bin/qmail-showctl コマンドで qmail がどういう動作をするようになっているか確認しながら、コントロールファイルを編集していきます。
下の表がqmailで使用されるコントロールファイルの一覧です。
(http://www.jp.qmail.org/q103/jman5/qmail-control.html
より引用)
制御ファイル | 既定値 | 参照コマンド | |
---|---|---|---|
badmailfrom | (none) | qmail-smtpd | 拒絶発送元アドレスリスト |
bouncefrom | MAILER-DAEMON | qmail-send | 差戻し管理者名 |
bouncehost | me | qmail-send | 差戻しホスト名 |
concurrencylocal | 10 | qmail-send | ローカル配送多重度 |
concurrencyremote | 20 | qmail-send | リモート配送多重度 |
databytes | 0 | qmail-smtpd | 受信データ量上限 |
defaultdomain | me | qmail-inject | 省略時ドメイン名 |
defaulthost | me | qmail-inject | 省略時ホスト名 |
doublebouncehost | me | qmail-send | 2重バウンスホスト名 |
doublebounceto | postmaster | qmail-send | 2重バウンスの宛先 |
envnoathost | me | qmail-send | ホスト省略時ドメイン名 |
helohost | me | qmail-remote | SMTP開始ホスト名 |
idhost | me | qmail-inject | Message-IDホスト名 |
localiphost | me | qmail-smtpd | IPアドレス対応ホスト |
locals | me | qmail-send | ローカルドメイン名一覧 |
me | 自ドメイン(FQDN) | ||
morercpthosts | (none) | qmail-smtpd | 受信ドメイン一覧(2) |
percenthack | (none) | qmail-send | %ハック適用ドメイン名一覧 |
plusdomain | me | qmail-inject | 追加ドメイン名 |
qmqpservers | (none) | qmail-qmqpc | qmqpサーバリスト |
queuelifetime | 604800 | qmail-send | キュー最大滞在秒数 |
rcpthosts | (none) | qmail-smtpd | 受信ドメイン一覧 |
smtpgreeting | me | qmail-smtpd | SMTP応答用ホスト名 |
smtproutes | (none) | qmail-remote | SMTP経路指定 |
timeoutconnect | 60 | qmail-remote | 接続時待ち時間 |
timeoutremote | 1200 | qmail-remote | 応答待ち時間 |
timeoutsmtpd | 1200 | qmail-smtpd | SMTPデータ待ち時間 |
virtualdomains | (none) | qmail-send | 仮想ドメイン名一覧 |
下の表がqmail-vidaで拡張されたコントロールファイルの一覧です。
制御ファイル | 既定値 | 参照コマンド | |
---|---|---|---|
senderhosts | qmail-smtpd | envelope senderの許可リスト | |
badrcptto | qmail-smtpd | 拒絶送信先アドレスリスト |
me / defaultdomain / plusdomainを表示し、自ドメインの設定が間違っていないか確認します。
ドメイン名部分は、メールアドレスのドメイン部分にあわせて読み替えてください。
# cat /var/qmail/control/me example.co.jp # cat /var/qmail/control/defaultdomain example.co.jp # cat /var/qmail/control/plusdomain example.co.jp
rcphostsを編集し、受信を許可する宛先ドメイン名を登録します。
# vi /var/qmail/control/rcphosts example.co.jp example.com
qmail-vidaによるSMTP-AUTHや、tcpserver等による環境変数RELAYCLIENTの設定が行われていない場合、 qmailの基本動作としてrcphostsに登録されている宛先以外のメールは受信しません。
localsを編集し、ローカルに配信をする宛先ドメイン名を登録します。
バーチャルドメインを使用しないならば、rcphostsと同一の内容になります。
# vi /var/qmail/control/locals example.co.jp example.com
ここに登録したドメイン宛のメールは、ローカルの実在ユーザ/仮想ユーザ宛に配送されます。
smtproutesを編集し、SMTPの経路指定をします。
私の場合、AUの携帯電話にメールをするのですが、AUのメールサーバがメールを受け取ってくれない為、一度プロバイダのメールサーバを経由して送信するように指定しています。
# vi /var/qmail/control/smtproutes ezweb.ne.jp:provider.example.ne.jp
この例では、ezweb.ne.jp宛のメールはprovider.example.ne.jpを経由して配送されます。
qmail-smtp は /var/qmail/control/rcpthost で指定された宛先のメールしか受信しません。LANのwindows等のホストから中継させたい場合には、許可されたアドレス範囲からのアクセスは環境変数 RELAYCLIENT を設定することによって中継させることができます。
RELAYCLIENTを設定しなくても、qmail-vidaのSMTP-AUTHだけで運用することも可能です。
RELAYCLIENTで許可されたアドレスからのメールは、SMTP-AUTHをしなくてもメールを送信することができるだけです。
#ローカルLANのPCにSMTP-AUTH設定するのが面倒なので…。
ここでは192.168.0.0/24のネットワークとローカルからの中継を受け付けるようtcpserverの設定を作成します。
アドレス範囲については、環境に合わせて読み替えてください。
# vi /usr/local/etc/tcp.smtp 192.168.0.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT=""
上記のファイルを作成したら、cdbファイルに変換します。
# cd /use/local/etc/ # tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
qmail の man は、/var/qmail/man/ にあります。このままだと man コマンドで読めないので、MANPATH を設定して読めるようにします。
# vi /etc/manpath.config # check if the directory exists and if it does, add it to MANPATH # OPTIONAL_MANPATH /var/qmail/man
ports で作成された、/usr/local/etc/rc.d/qmail.sh は /var/qmail/rc へのシンボリックリンクですが、デフォルトで /var/qmail/rc は用意されていないので、/var/qmail/boot/ にある起動スクリプトから選んでコピーします。各ファイルにコメントが書いてあるのでそれを参考にしてください。(大体ファイル名で判断できるけど)
ファイル名 | 説明 |
---|---|
binm1 | BSD 4.4 binmailインターフェイスを利用してローカル配送 ログ出力:syslog メールの保存先:/var/spool/mail/$USER |
binm1+df | BSD 4.4 binmailインターフェイスを利用してローカル配送 ログ出力:syslog メールの保存先:/var/spool/mail/$USER .forward使用可能 |
binm2 | SVR4 binmailインターフェイスを利用してローカル配送 ログ出力:syslog メールの保存先:/var/spool/mail/$USER |
binm2+df | SVR4 binmailインターフェイスを利用してローカル配送 ログ出力:syslog メールの保存先:/var/spool/mail/$USER .forward使用可能 |
binm3 | V7 binmailインターフェイスを利用してローカル配送 ログ出力:syslog メールの保存先:/var/spool/mail/$USER |
binm3+df | V7 binmailインターフェイスを利用してローカル配送 ログ出力:syslog メールの保存先:/var/spool/mail/$USER .forward使用可能 |
home | ログ出力:syslog メールの保存先:~/Mailbox |
home+df | ログ出力:syslog メールの保存先:~/Mailbox .forward使用可能 |
maildir | ログ出力:syslog メールの保存先:~/Maildir/ |
proc | prcmailインターフェイスを利用してローカル配送 ログ出力:syslog メールの保存先:procmailの設定による |
proc+df | prcmailインターフェイスを利用してローカル配送 ログ出力:syslog メールの保存先:procmailの設定による .forward使用可能 |
私は、Maildir形式を使用するので、maildirをコピーしました。
# cp -p /var/qmail/boot/maildir /var/qmail/rc
外部からのメールを受信できるように、smtpデーモン qmail-smtpd を起動するようにします。
変数名 | 参照コマンド | 説明 |
---|---|---|
QMAILQUEUE | qmail-smtpd | QUEUE管理コマンドを指定する。 |
RELAYCLIENT | qmail-smtpd | リレーを許可する場合に設定する。 tcpserverによって許可されたアドレス範囲からの中継をする場合に設定される。 |
変数名 | 参照コマンド | 説明 |
---|---|---|
ALLOWPLAIN | qmail-smtpup | SMTP-AUTHでの平文認証を許可する。 Outlook Express等の平文認証のみに対応したMUAを使用する場合には設定する必要がある。 |
FORCEAUTH | qmail-smtpup | 認証なしのメール受信を一切禁止する。 自ドメイン宛のメールも認証されないと受信しないので中継送信専用のサーバ以外は設定しないこと。 |
TEMPRELAYCLIENT | qmail-smtpd | 認証の成功後にRELAYCLIENTと同じ役割を行う。 |
SENDERHOSTS | qmail-smtpd | control/senderhosts の設定を上書きする。 |
RCPTHOSTS | qmail-smtpd | control/rcpthosts の設定を上書きする。但し、SMTP-AUTH、環境変数 RELAYCLIENTによって中継が許可された場合でもRCPTHOSTS
に登録されたドメイン宛のメールのみ受信する。 特定のユーザからは外部にメールを送信させない場合にvida-passwdを使用して設定する。 |
DOMAINOWNER | checkpassword | ドメインを所有・管理するユーザを設定する。 ログインIDベースのバーチャルドメインを運用する場合には空の値を設定する。 |
DOMAINDELIMITERS | checkpassword | ログインIDベースのバーチャルドメインを運用する場合のログインIDのユーザ部とドメイン部のデリミタ。デフォルト値"@%" |
tcpserver を使ってqmail-smtpdを起動するように起動スクリプトを作成します。
# vi /usr/local/etc/rc.d/smtpd.sh #!/bin/sh PATH="$PATH:/var/qmail/bin";export PATH case "$1" in start) ulimit -d 1024 QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" export QMAILQUEUE ALLOWPLAIN=""; export ALLOWPLAIN DOMAINOWNER=""; export DOMAINOWNER # start qmail for tcpserver /usr/local/bin/tcpserver -Rpv -x /usr/local/etc/tcp.smtp.cdb 0 smtp \ /var/qmail/bin/qmail-smtpup example.co.jp /usr/local/bin/checkpassword \ /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 2 & echo -n ' qmail-smtpd' exit 0 ;; stop) kill -TERM `ps axwww | grep [q]mail-smtpd | awk '{print $1}'` && \ echo -n ' qmail-smtpd' ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac
私は、qmail-scannerを使用してウイルスチェックをしているので、変数QMAILQUEUEを指定しています。
必要ない場合には。コメントアウトするか削除してしまってください。
15行目のexample.co.jp]の部分は、使用するドメイン名を指定してください。コントロールファイルmeと同じドメインを設定すればよいと思います。
外部からメールを受信できるようにpop3デーモンを起動します。
変数名 | 参照コマンド | 説明 |
---|---|---|
ALLOWPLAIN | qmail-popup | POPでの平文認証を許可する。 Outlook Express等のAPOPを使用できないMUAを使用する場合には設定する必要がある。 |
DOMAINOWNER | checkpassword | ドメインを所有・管理するユーザを設定する。 ログインIDベースのバーチャルドメインを運用する場合には空の値を設定する。 |
DOMAINDELIMITERS | checkpassword | ログインIDベースのバーチャルドメインを運用する場合のログインIDのユーザ部とドメイン部のデリミタ。デフォルト値"@%" |
tcpserver を使ってqmail-pop3dを起動するように起動スクリプトを作成します。
# vi /usr/local/etc/rc.d/qmail-pop3d.sh #!/bin/sh PATH="$PATH:/var/qmail/bin";export PATH case "$1" in start) ALLOWPLAIN=""; export ALLOWPLAIN DOMAINOWNER=""; export DOMAINOWNER # start qmail-pop3d for tcpserver /usr/local/bin/tcpserver -vHR 0 pop3 \ /var/qmail/bin/qmail-popup blade.jp \ /usr/local/bin/checkpassword \ /var/qmail/bin/qmail-pop3d Maildir 2>&1 | \ splogger pop3d 4 & echo -n ' qmail-pop3d' exit 0 ;; stop) kill -TERM `ps axwww | grep [q]mail-pop3d | awk '{print $1}'` && \ echo -n ' qmail-pop3d' ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac
qmail では、root 宛のメール配送はしませんので、エイリアスとして登録する必要があります。その他、必要なエイリアスも作成します。
port を利用した場合には root、postmaster、mailer-daemon のエイリアスが作成されています。
# cd /var/qmail/alias # touch .qmail-root .qmail-postmaster .qmail-mailer-daemon # chmod 644 .qmail*
ファイルの内容が空ならば、/var/qmail/alias に配送されます。Maildir 形式を使う場合には、Maildir を作成しておきます。
# /var/qmail/bin/maildirmake /var/qmail/alias/Maildir # chown -R alias /var/qmail/alias/Maildir
私は、root, postmaster, mailer-daemon 宛のメールは、他のアカウントに転送するようにしています。その場合、各ファイルに転送先を指定しておきます。
# cd /var/qmail/alias # echo '&masaya' > .qmail-root # echo '&masaya' > .qmail-postmaster # echo '&masaya' > .qmail-mailer-daemon
Maildir形式を使う場合には、全てのユーザーのホームに Maildir を作成します。
Mailbox形式では、POPでのアクセスは多分出来ませんが、ローカルからメールを読むユーザーがいる場合には、メールボックス形式を選択しやすいように
.qmail も作成しておきます。
#Maildir形式以外ではPOPアクセスは出来なくなります。
# cd ~ # /var/qmail/bin/maildirmake ~/Maildir # vi .qmail # use Maildir ./Maildir/ # use Mailbox #./Mailbox
ユーザー追加の際に、Maildirも自動的に作成されるようにしておくと後で楽なので、skel にも作っておきます。
# cd /usr/share/skel # /var/qmail/bin/maildirmake ~/Maildir # vi dot.qmail # use Maildir ./Maildir/ # use Mailbox #./Mailbox
ローカルユーザ用のパスワードデータベースを作成します。
# vida-pwdbinit
この操作で以下のファイルが作成されます。
ファイル名 | 管理ユーザ | 説明 |
---|---|---|
/var/qmail/authdb/pwdusers/passwd | pop / 一般ユーザ | ローカルドメイン・実在ユーザ用パスワードファイル |
/var/qmail/authdb/pwdusers/cdb | pop / 一般ユーザ | ローカルドメイン・実在ユーザ用cdbファイル |
/var/qmail/authdb/pop/passwd | pop | ローカルドメイン・仮想ユーザ用パスワードファイル |
/var/qmail/authdb/pop/cdb | pop | ローカルドメイン・仮想ユーザ用cdbファイル |
パスワードデータベースへ実在ユーザ(システムアカウントのあるユーザ)のパスワード登録を行います。
ここでユーザの登録をしていない実在ユーザは、POP及びSMTP-AUTHのサービスを受けられません。
コンパイルオプションで、パスワードデータベースに登録の無いユーザをUNIXパスワードで認証することも出来ますが、APOP / SMTP-AUTH MD5認証等が使用できないメーラーに対応する為に、平文認証を使用しなければならないので、ログインパスワードとメール関係のパスワードは切り離した方が安全でしょう。
ユーザ / パスワードを登録するには、ユーザPOPで以下のコマンドを実行します。
# su - pop $ /var/qmail/bin/vida-passwd -a -r -u USERNAME New password:PASSWORD Retype new password:PASSWORD vida-passwd: user USERNAME was added pwdbmake: authdb/pwdusers/cdb was updated
大量のアカウントを登録する場合には、パスワードファイルを編集してから一括してパスワードデータベースを作成すると手間が省けます。
ディレクトリ/var/qmail/authdb以下のファイルは、ユーザPOPでは直接編集できないのでrootユーザで編集を行います。
フィールド区切り文字はTABで、ユーザ名・パスワード・ユーザ固有の変数設定を記述します。
以下の例では、USER3のメール発信はexample.co.jp宛のみ許可されます。
# vi /var/qmail/authdb/pwdusers/passwd #user password environ USER1 PASSWORD1 USER2 PASSWORD2 USER3 PASSWORD3 RCPTHOSTS="example.co.jp"
パスワードファイルの編集が終了したら、ユーザPOPでパスワードデータベースを作成します。
# su - pop $ /var/qmail/bin/vida-pwdbmake -r pwdbmake: authdb/pwdusers/cdb was updated
仮想ユーザのパスワードデータベースを作成します。
仮想ユーザは、ユーザpopのホームディレクトリに作成されます。
登録方法は、実在ユーザの場合とほぼ同じです。
仮想ユーザ / パスワードを登録するには、ユーザpopで以下のコマンドを実行します。
# su - pop $ /var/qmail/bin/vida-passwd -a -u USERNAME New password:PASSWORD Retype new password:PASSWORD vida-passwd: user USERNAME was added pwdbmake: authdb/pwdusers/cdb was updated $ /var/qmail/bin/vida-assign -a -u USERNAME
大量のアカウントを登録する場合には、パスワードファイルを編集してから一括してパスワードデータベースを作成すると手間が省けます。
ディレクトリ/var/qmail/authdb以下のファイルは、ユーザPOPでは直接編集できないのでrootユーザで編集を行います。
# vi /var/qmail/authdb/pop/passwd #user password environ VERTUAL1 PASSWORD1 VERTUAL2 PASSWORD2 VERTUAL3 PASSWORD3
次に、配送先情報ファイル /var/qmail/users/assign を編集します。
# vi /var/qmail/users/assign =VIRTUAL1:pop:68:6:/home/pop/VIRTUAL1::: +VIRTUAL1-:pop:68:6:/home/pop/VIRTUAL1:-:: =VIRTUAL2:pop:68:6:/home/pop/VIRTUAL2::: +VIRTUAL2-:pop:68:6:/home/pop/VIRTUAL2:-:: =VIRTUAL3:pop:68:6:/home/pop/VIRTUAL3::: +VIRTUAL3-:pop:68:6:/home/pop/VIRTUAL3:-::
ファイルの編集が終了したら、ユーザpopでパスワードデータベースと配送データベースを更新します。
# su - pop $ /var/qmail/bin/vida-pwdbmake pwdbmake: authdb/pwdusers/cdb was updated $ /var/qmail/bin/qmail-newu
仮想ユーザのメールボックスを作成するには、ユーザpopで以下のコマンドを実行します。
登録したユーザ名を指定して、全ユーザ分実行してください。
# su - pop $ /var/qmail/bin/vida-maildirmake VERTUAL1 Maildir $ /var/qmail/bin/vida-maildirmake VERTUAL2 Maildir $ /var/qmail/bin/vida-maildirmake VERTUAL3 Maildir
複数のバーチャルドメインを運用する場合には、各バーチャルドメイン毎に管理ユーザを作成する必要があります。
同一の管理ユーザにて管理されているバーチャルドメインは、同一のメールボックスに配送されてしまいますので注意してください、
バーチャルドメイン管理ユーザ vpopを追加するためにvipwを起動しユーザvpopを追加します。
# vipw vpop:*:105:103::0:0:virtual pop acount:/home/vpop:/usr/local/bin/bash
ユーザvpopのログインシェルは好みのものを記入してください。
ユーザvpopのホームディレクトリは、仮想ドメインのメールボックスに使用されるので、仮想メールボックスを保存したいパーティションを指定してください。
アカウントの登録が終わったら、ユーザ vpopのホームディレクトリを作成しておきます。
# makedir -m 755 /home/vpop # chown vpop:vida /home/vpop
ここでは、ユーザvpopの環境設定は行っていません。 必要ならば各自で作成してください。
rcphostsを編集し、バーチャルドメイン宛のメールを受信許可するためにバーチャルドメイン名を追記します。
# vi /var/qmail/control/rcphosts example.co.jp example.com example.org
virtualdomainsを編集し、バーチャルドメインの登録をします。
この例では、example.org宛のメールはバーチャルドメイン管理ユーザであるvpopユーザに配送されます。
# vi /var/qmail/control/virtualdomains example.org:vpop
仮想ドメイン用のパスワードデータベースを作成します。
# vida-pwdbinit vpop
この操作で以下のファイルが作成されます。
ファイル名 | 管理ユーザ | 説明 |
---|---|---|
/var/qmail/authdb/vpop/passwd | vpop | 仮想ドメイン用パスワードファイル |
/var/qmail/authdb/vpop/cdb | vpop | 仮想ドメイン用cdbファイル |
仮想ドメインのパスワードデータベースを作成します。
仮想ドメインのメールボックスは、ユーザvpopのホームディレクトリに作成されます。
ユーザ / パスワードを登録するには、ユーザvpopで以下のコマンドを実行します。
# su - vpop $ /var/qmail/bin/vida-passwd -a -u USERNAME New password:PASSWORD Retype new password:PASSWORD vida-passwd: user USERNAME was added pwdbmake: authdb/pwdusers/cdb was updated
大量のアカウントを登録する場合には、パスワードファイルを編集してから一括してパスワードデータベースを作成すると手間が省けます。
ディレクトリ/var/qmail/authdb以下のファイルは、ユーザPOPでは直接編集できないのでrootユーザで編集を行います。
# vi /var/qmail/authdb/vpop/passwd #user password environ VERTUAL1 PASSWORD1 VERTUAL2 PASSWORD2 VERTUAL3 PASSWORD3
次に、配送先情報ファイル /var/qmail/users/assign を編集します。
# vi /var/qmail/users/assign =vpop-VIRTUAL1:vpop:2003:103:/home/vpop/VIRTUAL1::: +vpop-VIRTUAL1-:vpop:2003:103:/home/vpop/VIRTUAL1:-:: =vpop-VIRTUAL2:vpop:2003:103:/home/vpop/VIRTUAL2::: +vpop-VIRTUAL2-:pop:2003:103:/home/vpop/VIRTUAL2:-:: =vpop-VIRTUAL3:vpop:2003:103:/home/vpop/VIRTUAL3::: +vpop-VIRTUAL3-:vpop:2003:103:/home/vpop/VIRTUAL3:-::
ファイルの編集が終了したら、ユーザvpopでパスワードデータベースと配送データベースを更新します。
# su - vpop $ /var/qmail/bin/vida-pwdbmake pwdbmake: authdb/pwdusers/cdb was updated $ /var/qmail/bin/qmail-newu
仮想ユーザのメールボックスを作成するには、ユーザpopで以下のコマンドを実行します。
登録したユーザ名を指定して、全ユーザ分実行してください。
# su - vpop $ /var/qmail/bin/vida-maildirmake VERTUAL1 Maildir $ /var/qmail/bin/vida-maildirmake VERTUAL2 Maildir $ /var/qmail/bin/vida-maildirmake VERTUAL3 Maildir
POP及びSMTP-AUTHのログインIDは、ユーザ名@ドメイン名になります。
#その他に、ユーザ名@管理ユーザ名 / ユーザ名%ドメイン名でも接続可能です。
ユーザ名でログインした場合には、ローカルドメインのユーザとして扱われるので注意してください。
これまでの設定例の場合、VERTUAL1を指定するとローカルドメインの仮想ユーザVERTUAL1としてログインし、VERTUAL1@example.orgと指定すると仮想ドメインexample.orgのユーザVERTUAL1としてログインすることになります。
ふぅ。やっと設定終了です。 早速起動してみましょう。
起動はすべてrootユーザで行います。
ここでは、手作業で起動する方法を説明します。
リブートしても良いマシンの場合には、再起動してしまえば自動的に起動します。
qmailを起動するためには、sendmailデーモンが停止している必要があります。
sendmailデーモンを使用する設定になっていた場合には、停止させましょう。
# killall -TERM sendmail
qmailの各プロセスを起動します。
これによってローカル配送・外部へのメール送信が可能になります。
# /usr/local/etc/rc.d/qmail.sh start
qmailのsmtpデーモンであるqmail-smtpdを起動し、外部からのメール受信を可能にします。
# /usr/local/etc/rc.d/smtpd.sh start
qmailのPOPデーモンを起動し、POPでのメール閲覧を可能にします。
# /usr/local/etc/rc.d/qmail-pop3d.sh start
必ず、実在ユーザ・仮想ユーザ・仮想ドメインユーザのテストアカウントを作成して、メールの送受信・POPアクセスのテストを行ってください。