FrontPage 差分 一覧 ソース 検索 ヘルプ ログイン

qmail+IPv6+SMTP-Auth+APOP

qmail+IPv6+SMTP-Auth+APOP

[カテゴリ:FreeBSD][カテゴリ:IPv6][カテゴリ:mail]

前提

FreeBSD 4.8-RELEASEに新規でインストールするイメージで。qmailとtcpserverにはIPv6パッチを当て、SMTP-AuthとAPOPはqmail-vidaパッケージを使用する。

あたしが実際にインストールしたときには既にqmailはインストール済だったので、設定ファイルのあれとかそれとかが違っていても責任持たん。別に他のどこが違っていたとしても責任持たんけど。


事前準備

qmailはわりとややこしいので事前にドキュメントには目を通しておく。

特にtcpserverの挙動はしっかりと把握しておくこと。起動Scriptくらい理解しておかないと恥ずかしい。


アーカイブ

めんどくさいのでdjbのソフトはqmail-vidaサイトのmirrorをつかった。

パッチはqmail patchあれこれを参照。qmailのlocaltime patchとIPv6 patch、それにsmtp-relay-reject patchも使用した。

tcpserverのIPv6化はギゾネットも参照。配布元ページにある ucspi-tcp-0.88-ipv6.diff13.bz2 はdietlibcがどーのこーのとややこしいので、ucspi-tcp-0.88-ipv6.diff9.bz2を使用する。


インストール(patch当て)

標準の /var/qmail にインストールにすることを前提で。

とりあえず、とってきたアーカイブを /usr/local/src/qmail あたりにでも保存する。patch群は /usr/local/src/qmail/patch あたりにてけとーに。

だーっとtarballとbzip2をほどいておく。こんな感じ。

 osakana@marino:qmail>ll
 total 464
 drwxrwxr-x   9 root     wheel     512  8 31 01:34 .
 drwxrwxr-x  10 root     wheel     512 12 18  2002 ..
 drwxr-xr-x   2 osakana  wheel    2048  2 20  2000 cdb-0.75
 -rw-r--r--   1 osakana  wheel   54162  1 17  2002 cdb-0.75.tar.gz
 drwxr-xr-x   2 osakana  wheel    2048 12 23  2000 checkpassword-0.90
 -rw-r--r--   1 osakana  wheel   15631 11 25  2001 checkpassword-0.90.tar.gz
 drwxr-xr-x   6 osakana  wheel     512  9 26  2002 old
 drwxr-xr-x   2 osakana  wheel     512  8 31 01:32 patch
 drwxr-xr-x   2 osakana  wheel    9216  6 15  1998 qmail-1.03
 -rw-r--r--   1 osakana  wheel  220668 11 25  2001 qmail-1.03.tar.gz
 drwxr-xr-x   6 osakana  wheel     512  1 17  2003 qmail-vida-0.53
 -rw-r--r--   1 osakana  wheel   73484  1 17  2003 qmail-vida-0.53.tar.gz
 drwxr-xr-x   2 osakana  wheel    4608  3 19  2000 ucspi-tcp-0.88
 -rw-r--r--   1 osakana  wheel   53019 11 25  2001 ucspi-tcp-0.88.tar.gz
 osakana@marino:qmail>ll patch/
 total 132
 drwxr-xr-x  2 osakana  wheel    512  9  2 13:11 .
 drwxrwxr-x  9 root     wheel    512  8 31 01:34 ..
 -rw-r--r--  1 osakana  wheel  28471  5  4  2001 qmail-1.03-v6-20001010.diff
 -rw-r--r--  1 osakana  wheel   2603  6 15  1999 qmail-date-localtime.patch
 -rw-r--r--  1 osakana  wheel   1230  2 10  2002 qmail-smtpd-relay-reject
 -rw-r--r--  1 osakana  wheel  94476 11  4  2001 ucspi-tcp-0.88-ipv6.diff9

で、パッチあてる。まずは qmail-vida に含まれている qmail, checkpasswordに対するpatch.これは qmail-vida-0.53 直下で

 osakana@marino:qmail-vida-0.53>make patch

するだけ。インストール先を変えていたり、qmailやcheckpasswordへのPATHが違ったりしたらこの限りではないのでMakefileを編集する。てゆかドキュメント読め。make patch 後に忘れずに

 osakana@marino:qmail-vida-0.53>make copy

もしておく。これじゅーよー。オレ1回忘れてえらい目にあった(ぉ

そいからqmailへのパッチもあてる。qmail-1.03 直下で

 osakana@marino:qmail-1.03>patch -p1 <../patch/qmail-date-localtime.patch

して

 osakana@marino:qmail-1.03>patch -p1 <../patch/qmail-smtpd-relay-reject

して

 osakana@marino:qmail-1.03>patch -p1 <../patch/qmail-1.03-v6-20001010.diff

する。qmail-vidaと同じソースに当たったりもするけどpatch(1)は賢いので問題なく当たるようだ。

最後にtcpserverへもパッチあてる。 ucspi-tcp-0.88 直下で

 osakana@marino:ucspi-tcp-0.88>patch -p1 <../patch/ucspi-tcp-0.88-ipv6.diff9 

以上。


インストール(user:group作成)

qmail, qmail-vidaは処理内容によってPGMが分割されていて、各PGMはわりと別々の権限で動く。ぶっちゃけた話かなり大量の専用ユーザを必要とする。詳しくはインストール マニュアルを読むといい。

qmailが必要とするuser:groupは以下
usergroup
aliasnofiles
qmaildnofiles
qmaillnofiles
qmailpnofiles
qmailqqmail
qmailrqmail
qmailsqmail

で、これに加えてqmail-vida
usergroup
popvida
authdbvida
qmailuvida

を要求する。ふざけんなと思った人、正解。オレもそう思う。まぁ各ユーザの詳細についてはマニュアル参照。FreeBSD用の登録shellを用意しておいたので、手抜きしたい人は使うといい。

 #!/bin/sh
 pw groupadd nofiles
 pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
 pw useradd qmaild -g nofiles -d /var/qmail/qmail -s /nonexistent
 pw useradd qmaill -g nofiles -d /var/qmail/qmail -s /nonexistent
 pw useradd qmailp -g nofiles -d /var/qmail/qmail -s /nonexistent
 pw groupadd qmail
 pw useradd qmailq -g qmail -d /var/qmail/qmail -s /nonexistent
 pw useradd qmailr -g qmail -d /var/qmail/qmail -s /nonexistent
 pw useradd qmails -g qmail -d /var/qmail/qmail -s /nonexistent
 pw groupadd vida
 pw useradd vpop -g vida -d /home/pop -s /bin/tcsh -m
 pw useradd authdb -g vida -d /var/qmail/authdb -s /nonexistent
 pw useradd qmailu -g vida -d /var/qmail/users -s /nonexistent

FreeBSD4.xの場合、popとゆーユーザは既にシステムに登録されているので、ここではvpopとゆーユーザを代わりに登録することにする。

で、pop → vpop の変更に伴って、ソースを変更する必要がある。 qmail-vida-0.53/src/vida と checkpassword-0.90 に conf-realdomainowner とゆーファイルがあるので、こいつを編集しておく。詳細はマニュアル参照。

 osakana@marino:vida>cat conf-realdomainowner 
 vpop
 
 This is the owner for real domain.

インストール(コンパイル, インストール)

コンパイル, インストールは特に特別な手順はなし。ドキュメント通りに make して make setup して make check すればいい。詳細略。特にコンパイルエラーは出なかった。qmail, qmail-vida, checkpassword, tcpserver, cdbをインストールする。


設定(qmail)

qmail-1.03 で config scriptを実行すれば、ある程度の設定ファイルは作成できる。DNS引けない環境?知らん(ぉ

 # pwd
 /usr/local/src/qmail/qmail-1.03
 # ./config

あとは /var/qmail/control 以下のファイルをてけてけと編集する。各ファイルの意味はここに説明がある。locals, me, rcpthosts あたりは中身を確認しておいたほうがいい。

そいからaliasの作成。/var/qmail/alias あたりに .qmail-hoge ファイルを作成して、hoge@example.com 宛のメールの転送先を記述しておく。abuse, mailer-daemon, postmaster, webmaster, adminあたりはrootに転送しておくといい。root宛のメールはさらに管理者の実ユーザに転送させる。

 osakana@marino:alias>cat .qmail-abuse
 &root
 osakana@marino:alias>cat .qmail-root
 &osakana

な感じ。


設定(qmail-vida)

とりあえずrootで /var/qmail/bin/vida-pwdbinit を実行して、passwd databaseを初期化する。今はこんだけでいい。


設定(tcpserver)

SMTPアクセス用のDBを作成する。/var/qmail/cdb とかてけとーにディレクトリ掘ってそこで作成することにする。SMTP relayには全てSMTP-Auth必須とゆーポリシーでもいいけど、localhostくらいは認証なしで通したいし、LAN内からも通したい場合だってあるだろう。

smtpとゆーファイルを作成して、以下のように記述する

 osakana@marino:~>cat /var/qmail/cdb/smtp
 127.0.0.1:allow,RELAYCLIENT=""
 192.168.0.:allow,RELAYCLIENT=""
 ::1:allow,RELAYCLIENT=""
 fe80:0:0:0::allow,RELAYCLIENT=""
 :allow

上から順にIPv4のlocalhost, IPv4の同一LAN, IPv6のlocalhost, IPv6のリンクローカルアドレスからのrelayをSMTP-Authなしで受け付ける設定。その他のホストからのrelayはSMTP-Authが必要となる。アドレスとallowとの区切りが:なので、IPv6の0の省略はあまり使わないほうがいいかもしれない。先の例だと4行目を

 fe80:::allow,RELAYCLIENT=""

なんて書いたらもうわけわからんし。そもそもprefix指定でないので後ろの省略はできなさそう。

ちなみにここで環境変数ALLOWPLAINなんてものを指定してやると、SMTP-Authの際にplain textで認証が可能になる。無指定だとCRAM-MD5のみ。まぁ無指定でええと思う。いまどきMD5なSMTP-AuthがしゃべれないようなMUAは捨てよう。

で、あとはこのファイルからtcpserverが参照するDBを作成する。

 # pwd
 /var/qmail/cdb
 # tcprules smtp.cdb smtp.tmp <smtp

起動Script

tcpserver経由で起動することになるわけだが、これがややこしいので、tcpserver(1), qmail-vidaインストールマニュアルあたりは熟読しておく。で、熟読して理解したあとに、以下のScriptをコピれ(笑

 #!/bin/sh
 
 PATH=/var/qmail/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 HOST=mail.example.com
 
 exec env - \
   PATH="$PATH" \
 qmail-start ./Maildir splogger qmail &
 
 exec env - \
   PATH="$PATH" \
 tcpserver -vHR -l"$HOST" -x /var/qmail/cdb/smtp.cdb \
  0 25 fixcrio \
   qmail-smtpup "$HOST" checkpassword qmail-smtpd 2>&1 | \
   splogger smtpd &
 
 exec env - \
  PATH="$PATH" \
 tcpserver -vHR -l"$HOST" \
  0 110 \
   qmail-popup "$HOST" checkpassword qmail-pop3d Maildir 2>&1 | \
   splogger pop3d &

qmail-vidaのマニュアルではtcpserverのオプションでIPアドレスを与えているが、この例ではv4, v6のデュアルスタックにするためにアドレス指定はしていない。

また、qmail-vidaを導入していない環境では、qmail-smtpdを起動する際にqmaildのuidとnofilesのgidを指定するが、今回はvidaのqmail-smtpupを経由させて起動させることになるので、uid, gidを指定してはいけないことに注意。checkpasswordはroot権限で起動させないと、passwd DBが読めない。


ユーザ作業

あとはユーザ側での作業になる。それまでMailboxな環境だった場合は、各ユーザ毎にMaildirの作成が必要。これはそのユーザ権限で

  osakana@marino:~>cd
  osakana@marino:~>/var/qmail/bin/maildirmake Maildir

を実行すればいい。それからSMTP-Auth及びAPOP用のpasswdを作成する。これもユーザ権限で

  osakana@marino:~>/var/qmail/bin/vida-passwd

を実行する。あとは .qmail の作成。基本的には

 osakana@marino:~>cd
 osakana@marino:~>cat .qmail
 ./Maildir/

で問題ない。転送設定とかはぐぐれ(ぉ

Maildirと.qmailに関してはskeltonに作成しておくのが正義。既存ユーザ分はまぁがんばるしかないが。

あと、qmail-vidaの機能でVirtualDomainなんてものも使えるんだが、これに関しては今回は割愛する。VirtualDomain使う場合は起動Scriptもいぢる必要があるので覚えておこう。


その他

この手順の通りにやって失敗してもおさかなは責任を負いません。参考程度に見ておくのがいいでしょう。嘘を嘘と見抜けない以下略(ぉ

あ、でも間違った記述に気が付いたら指摘するとおさかなが喜びます :D