manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ その2/メールサーバー その2

Postfixバーチャル配送

2010年9月10日(金)
PostfixAdminが無事稼動したらバーチャル配送を定義し、PostfixAdminのMySQLデータとPostfixのドメイン、アドレス、メールボックスなどの管理をつなげます。


MySQL接続設定
postfixからMySQLに必要なデータの照会ができるように以下の3つのアクセス定義ファイルを作ります。

自分の取り扱うメールドメインを定義しているdomainテーブルへのアクセス定義ファイル。
/etc/postfix/mysql/mysql_virtual_domains_maps.cf
内容は、
user = postfix
password = (MySQLに登録したパスワード)
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'

受け取ったメールを転送するアドレスを定義するaliasテーブルへのアクセス。
/etc/postfix/mysql/mysql_virtual_alias_maps.cf
内容は、
user = postfix
password = (MySQLに登録したパスワード)
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active=1

ユーザのメールを保存するメールディレクトリを定義するmailboxテーブルへのアクセス。
/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
内容は、
user = postfix
password = (MySQLに登録したパスワード)
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active=1

この他にメールの容量制限などのデータも定義されていますが今のところ使いません。

バーチャル配送の設定
これらのデータを使ってバーチャル配送を定義します。
バーチャル配送は以前はvmailという専用ユーザをつくってそれにやってもらっていましたが、今回は最初からあるmailユーザにやってもらうことにします。へたに新しいユーザを作ってやるとSELinuxがからんできそうな気がするからです。
/etc/postfix/main.cf を編集または追記。

#virtualデーモンによりバーチャル配送をする指定
virtual_transport = virtual

#配送されるメールの最小uid。mailを含むこと。
virtual_minimum_uid = 8
#メール配送に使うuid, gid。(mailのuid,gidを指定)
virtual_uid_maps = static:8
virtual_gid_maps = static:12

#メールボックスのベースディレクトリ
virtual_mailbox_base = /var/spool/mail/

#バーチャルドメインの定義
virtual_mailbox_domains =
 mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf

#バーチャルドメイン配送もしくは転送の指定
virtual_alias_maps =
 mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf

# メール受信者のメールボックス(メールディレクトリ)を指定
virtual_mailbox_maps =
 mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf

以上でMySQLとの連携の設定は完了。
# alternatives --config mta でシステムのmtaをpostfixに切替えテスト。OK。

SELinux対策
相変わらずSELinuxがぶーたらぶーたら言っています。

SELinux Management で
Boolean -> Other -> allow_postfix_local_write_mail_spool
Boolean -> SELinux Service Protection -> Disable SELinux protection for postfix

静かになりました。