かぴぶろぐ

またかぴったかと思った・・・(´A`;)

postfixのaliasesでスクリプトにパイプする

カテゴリ[ etc ]

まずは、postfixとdovecotでsmtp、popがちゃんと動くようにしとく。
そこまではPostfix + dovcot環境(http://kapi.jp/kapi_blog/214)を参考に。

前提条件

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

として、alieaseファイルはsendmailのものを共有し、スクリプトへの渡しはこっちを使う
(その方がpostfixをsendmailに変えてもそのまま使えるから)

virtual_alias_maps = hash:/etc/postfix/virtual

とし、アカウントのalias自体はvirtualで行う。

で、postfix、dovecotインストール後のPostfix + dovcot環境(http://kapi.jp/kapi_blog/214)の状態から修正開始。

main.cf

まず、main.cf

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = localhost
mydomain = localhost
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks_style = host


### Virtual domain setting ###
virtual_mailbox_domains = /etc/postfix/vdomain
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual


### debug ###
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
     xxgdb $daemon_directory/$process_name $process_id & sleep 5


### Sendmail Compatible ###
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix

### etc ###
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP unknown
setgid_group = postdrop
html_directory = no


### smtp sasl setting ###
smtpd_sasl_auth_enable = yes
#smtpd_sasl_local_domain = $myhostname
smtpd_sasl_local_domain = $mydomain
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

message_size_limit = 10485760

前回と違うところは、
myhostname、mydomain等をlocalhostとした。

どうせ/etc/hostsでメインのドメイン設定くらいはしてるはずだし、バーチャルドメイン前提なら、vdomain等に書くので、これで。

vdomain

次にvdomain。
これは必要なドメインを設定する。今回は1ドメインのみなので

kapi.jp

のような感じで。

vmailbox

次にvmailbox。

info@kapi.jp    kapi.jp/info/Maildir/
support@kapi.jp    kapi.jp/support/Maildir/

これもpopが必要なアカウントを定義。

virtural

entry@kapi.jp entry-kapi.jp

このvirtualでドメイン毎のaliasをする。
entry@をスクリプト受け渡し用に使うわけだが、ここの書き方がキモ。

entry-kapi.jpという書き方をしているのは次に修正する/etc/aliasesに渡すユーザー名を意味してる。

つまり、シングルドメインであれば

entry@kapi.jp entry

と書けばうまくいく。でも、これじゃ、バーチャルドメイン環境でentryが被った場合、うまくいかんから、entry-kapi.jpという架空のユーザーを作って/etc/aliasesで振り分けできるようにする。

/etc/aliases

最後にaliases。
ここにさっき作ったentry-kapi.jp架空ユーザーとスクリプトを紐付ける。

entry-kapi.jp: "| /opt/scripts/entry_kapi_jp.py"

後は、それぞれ修正したファイルをDB化。そしてリロード+再起動

> cd /etc/postfix/
> postmap virtual vdomain vmailbox
> /etc/init.d/postfix reload
> /etc/init.d/postfix restart

これで、phpなりpythonなり何なりにメールデータをそのまま渡せる。

因みにPostfix + dovcot環境(http://kapi.jp/kapi_blog/214)の記事で、pop実ユーザーの設定としてvirtualにそれぞれ定義してたけど、あれ必要ないっぽい(´ー`;)
実ユーザーのバーチャルドメイン振り分けはvmailboxの時点で完結してるみたい。

後、main.cfは同じディレクトリにあるmain.cf.defaultを上書きして動いてるっぽいから(注意:振る舞いから判断してるので信用しないで・・ってたぶんそうだよね?)、前回の記事でもmain.cfはかり削ったけど、manpage_directoryとかもいらないから削った。設定ファイル使いまわす前提なら、バージョン違いのことも考えて、こういうのも省いた方がよいね。出来るだけ最小設定を目指したい。

参考URL

http://kapi.jp/kapi_blog/244

2009年06月25日

関連カテゴリ etc

この記事のコメント

この記事にコメントする