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はわりとややこしいので事前にドキュメントには目を通しておく。
- 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をつかった。
パッチは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は以下
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 とゆーファイルがあるので、こいつを編集しておく。詳細はマニュアル参照。
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