« | »

2008年11月25日

postfix 2.5.5 dovecotでsmtp-auth + mysqlによる仮想ユーザー運用

先日cyrus-SASLによるSMTP-AUTHとSMTP/TLS対応のpostfixを作ったが、これをsmtp-authにdovecoのSASLを利用し、仮想ユーザーの参照元をmsqlにするためにコンパイルしなおした。
ネット上に色々情報があるけど、一番参考になったのは、やっぱり本家のドキュメント
Cyrus-SASL対応と比べてDovecotのSASLの良い点は、Cyrusの場合はpostfixのバイナリにCyrusのライブラリをリンクさせる必要があるけど、Dovecotは認証に専用のデーモンプロセスを使うのでコンパイル時にフラグを一つ追加するだけで済む事である。
たしかにヘッダとライブラリ検索パスを指定しつつフラグも追加するよりはエレガントで、かつライブラリをリンクしないと言う事はリンク先のライブラリのバグを取りこむ可能性が一つ減ったという事も言えるのであろう。
以下で、Dovecot-SASLとMysql、SMTP/TLS対応のバイナリのコンパイル、設定の手順、いくつかの注意点を書いてみる。
例の如く、Solaris10 U6 spac版にgccを使わずSun Studio 12のコンパイラでの実装である。


C++のコンパイルオプションで、最適化オプションに-fast -native -mt 、ヘッダ検索パス、SASL対応と、TLS対応、Mysql対応を指定、
外部ライブラリの検索パスとランパス、TLSとmysqlのリンカオプションを指定、

export CCARGS="-fast -native -mt -DUSE_SASL_AUTH -I/usr/sfw/include -DUSE_TLS -DHAS_MYSQL -I/usr/local/mysql/include/mysql"
export AUXLIBS="-L/usr/sfw/lib -R/usr/sfw/lib -L/usr/lib -R/usr/lib -L/opt/sfw/lib -R/opt/sfw/lib-lssl -lcrypto -L/usr/local/mysql/lib/mysql -R/usr/local/mysql/lib/mysql -lz -lm -lmysqlclient"
dmake makefiles
dmake

ドキュメントでは、「-DDEF_SERVER_SASL_TYPE=\"dovecot\"」を指定するとデフォルトでDovecotが使われると書いてあったけど、土偶の環境ではmake時にエラーで止まったので、コンパイラオプションで指定せず、後からconfで指定した。
以下でconfの重要な部分を書く。
ローカルへのメール配信は、実ユーザーが存在しなければmysqlに問い合わせる。
外部へのリレー要請ではSMTP認証でdovectに問い合わせを行い、認証されればリレー許可する。
SMTP認証とローカル配信対象リストは全く別物であるところに注意である。まぁ当たり前か。
main.cf

smtpd_sasl_type = dovecot
#SASLにDovecotを
smtpd_sasl_path = private/auth
# dovecotと通信するソケットの指定、dovect.confのsocket listenの位置を書く。
# ドキュメントに則ってスプールからの相対パスで書いた。
smtpd_sasl_security_options = noanonymous
#anonymouse接続を拒否
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks,check_relay_domains
#外部へリレー許可するリスト、permit_sasl_authenticatedがSMTP-AUTHで許可されたものとなる
local_recipient_maps = $virtual_mailbox_maps unix:passwd.byname
#ローカル受信者の検索テーブルの指定
#仮想メールボックス、実ユーザーの順で書いた。
fallback_transport = virtual
#存在しないローカルアドレスへのリレー要請をvirtualに
#local_recipient_mapsで指定してるからいらんかも
#以下で仮想ユーザ(メールボックス)の指定
#それぞれファイルを指定して、ファイル内でDBとクエリを指定する。
virtual_mailbox_base = /
virtual_mailbox_maps = mysql:/etc/postfix/virtual-account.cf
virtual_uid_maps = mysql:/etc/postfix/virtual-uid.cf
virtual_gid_maps = mysql:/etc/postfix/virtual-gid.cf

以下からmysqlへの問い合わせの設定、詳しい書式はこの本家のドキュメントを参照されたし。
virtual-account.cf

hosts = ホスト名
user = 接続ユーザー
password = パスワード
dbname = DB名
table = テーブル
#以下の三つの項目は、
#user@domain.comへと配信要求が来た場合、
#SELECT CONCAT(mailrootdir,"/Maildir/") FROM DB名.テーブル WHERE username="user" and mailuse='1' ;
#と展開される
select_field = CONCAT(mailrootdir,"/Maildir/")
#メール配信先を指定する、SQL文concatで文字列を結合し、/home/user/Maildir/などと展開される。
#最後に/をつけるとMaildir形式、スラッシュ無しだとmailbox形式になる、微妙にはまった。
where_field = username
additional_conditions = and mailuse='1'

virtual-uid.cf

hosts = ホスト名
user = 接続ユーザー
password = パスワード
dbname = DB名
table = テーブル
#以下の三つの項目は、
#user@domain.comへと配信要求が来た場合該当メールボックスにUIDを設定するために使われるようである、
#SELECT uid FROM DB名.テーブル WHERE username="user" and mailuse='1' ;
#と展開される
select_field = uid
where_field = username
additional_conditions = and mailuse='1'

virtual-gid.cfは略。
とこんな感じで、dovectと同じテーブルを読み、メール環境が統合できる。

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>