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

qmail+IPv6+SMTP-Auth+APOPのソース

!!!qmail+IPv6+SMTP-Auth+APOP
{{category FreeBSD}}
{{category IPv6}}
{{category mail}}

----

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

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

----

!事前準備
qmailはわりとややこしいので事前にドキュメントには目を通しておく。
*http://man.qmail.jp/
*http://www.big.or.jp/~mio/ca/qm/index.html
*http://qmail-vida.sourceforge.jp/doc/index.html

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

----

!アーカイブ
めんどくさいのでdjbのソフトは[[qmail-vida]]サイトのmirrorをつかった。
*[qmail1.03|http://www.emaillab.org/djb/qmail-vida/software/qmail-1.03.tar.gz]
*[checkpassword0.90|http://www.emaillab.org/djb/qmail-vida/software/checkpassword-0.90.tar.gz]
*[tcpserver0.88|http://www.emaillab.org/djb/qmail-vida/software/ucspi-tcp-0.88.tar.gz]
*[cdb0.75|http://www.emaillab.org/djb/qmail-vida/software/cdb-0.75.tar.gz]
*[qmail-vida0.53|http://sourceforge.jp/frs/index.php?group_id=396]

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

tcpserverのIPv6化は[ギゾネット|http://www.gizo.net/bsd/qmailv6.html]も参照。
[配布元ページ|http://www.fefe.de/ucspi/]にある ucspi-tcp-0.88-ipv6.diff13.bz2 
はdietlibcがどーのこーのとややこしいので、
[ucspi-tcp-0.88-ipv6.diff9.bz2|http://www.fefe.de/ucspi/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を編集する。
てゆか[ドキュメント|http://qmail-vida.sourceforge.jp/doc/install.html]読め。
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はわりと別々の権限で動く。ぶっちゃけた話かなり大量の専用ユーザを必要とする。
詳しくは[インストール|http://www.big.or.jp/~mio/ca/qm/man/qm_man_installation.html] 
[マニュアル|http://qmail-vida.sourceforge.jp/doc/install.html]を読むといい。

qmailが必要とするuser:groupは以下
,user,group
,alias,nofiles
,qmaild,nofiles
,qmaill,nofiles
,qmailp,nofiles
,qmailq,qmail
,qmailr,qmail
,qmails,qmail

で、これに加えてqmail-vidaが
,user,group
,pop,vida
,authdb,vida
,qmailu,vida

を要求する。ふざけんなと思った人、正解。オレもそう思う。
まぁ各ユーザの詳細についてはマニュアル参照。
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 
とゆーファイルがあるので、こいつを編集しておく。
詳細は[マニュアル|http://qmail-vida.sourceforge.jp/doc/install.html]参照。
 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 以下のファイルをてけてけと編集する。
各ファイルの意味は[ここ|http://www.big.or.jp/~mio/ca/qm/ref/qm.html]に説明がある。
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)|http://www.big.or.jp/~mio/ca/qm/ut/ut_ref_tcpserver_1.html], 
[qmail-vidaインストールマニュアル|http://qmail-vida.sourceforge.jp/doc/install.html]
あたりは熟読しておく。で、熟読して理解したあとに、以下の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