BLOGTIMES
2017/01/13

Postfix のバーチャルドメインで Mailman

  postfix  mailman  awk 
このエントリーをはてなブックマークに追加

Postfix と Mailman の連携については公式の Wiki に 「DOC/Mailman - Postfix integration with Mailman generated transport or other maps - Mailman Wiki」というドキュメントがあり、virtual_to_transport というスクリプトを作って transport_maps 用のファイルを生成する方法が解説されています。

ただ、この方法でも結局 local に配送して alias で処理をするという部分は変わらないので、純粋にバーチャルドメインだけで Postfix + Mailman 連携ができる方法がないかと思っていろいろと試行錯誤してみました。

参考にしたのは「[mmjp-users 1929] Postfix で純仮想ドメイン (思いつき)」という投稿。基本路線はこれを踏襲しますが、具体的な transport_maps 用のファイルの生成方法が書かれていなかったので、以下のようなスクリプトを組んでみました。

/etc/mailman/virtual_to_transport

#!/bin/bash gawk ' BEGIN{ MLNAME = ""; } /^mailman-loop/ { printf("#%s\n",$0); next; } /^# STANZA START:/ { MLNAME = gensub(/^# STANZA START: (.+)/,"\\1",1,$0);} /^#/ { print ; next ;} MLNAME == "" { print; next; } MLNAME != "" && /@/{ sub(MLNAME, "",$2); if( $2 ~ /^-/ ){ printf("%s\tmailman-%s:%s\n", $1, substr($2,2), MLNAME); } else { printf("%s\tmailman-post:%s\n", $1, MLNAME); } } ' < /etc/mailman/virtual-mailman > /etc/mailman/transport-mailman /usr/sbin/postmap /etc/mailman/transport-mailman if [ -n "$1" ]; then /usr/sbin/postmap $1 fi

Postfix 側の設定として/etc/postfix/master.cf に以下の行を追加しておきます。

##### mailman ######### mailman-post unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman post ${nexthop} mailman-admin unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman admin ${nexthop} mailman-bounces unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman bounces ${nexthop} mailman-confirm unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman confirm ${nexthop} mailman-join unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman join ${nexthop} mailman-leave unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman leave ${nexthop} mailman-owner unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman owner ${nexthop} mailman-request unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman request ${nexthop} mailman-subscribe unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman subscribe ${nexthop} mailman-unsubscribe unix - n n - - pipe flags=FR user=mailman:mailman argv=/usr/lib/mailman/mail/mailman unsubscribe ${nexthop}

さらに /etc/postfix/main.cf の既存の設定に以下を追加します。
(・・・・の部分は既存の項目に読み替えてください。既存の項目がなければ新規に項目を追加します。)

transport_maps = ・・・・・, hash:/etc/mailman/transport-mailman virtual_transport_maps = ・・・・・, hash:/etc/mailman/transport-mailman virtual_mailbox_maps = ・・・・・, hash:/etc/mailman/transport-mailman

これで上手く動いているようなのですが、少し調子を見てみたいと思います。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9076
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    skei (2018/06/29 17:15) <%HatenaAuth()%>

    こんにちは!
    postfix+mailmanを構築してみましたが、バーチャルで自動でMLの転送設定を追加できる設定を探してたどり着きました。
    「[mmjp-users 1929] Postfix で純仮想ドメイン (思いつき)」の記事が参照できなくなっておりましたので、よろしければ、どのようにmailmanを構築したかを教えていただくことは可能でしょうか。

    /etc/mailman/virtual_to_transport

    /etc/mailman/transport-mailman

    /etc/postfix/main.cf
    -----------------------------------------------------
    virtual_transport_maps = ・・・・・, hash:/etc/mailman/transport-mailman

    virtual_alias_maps = ・・・・・, hash:/etc/mailman/transport-mailman
    -----------------------------------------------------
    なのかなと思いましたが違っておりますでしょうか。

    現在自分が構築した設定は以下のようになっておりますが、変更点などあればご指摘いただけますと幸いです。
    ぶしつけなコメントで恐縮ですが、ご確認の程よろしくお願い申し上げます。

    /etc/postfix/main.cf
    -----------------------------------------------------
    alias_maps = hash:/etc/aliases,hash:/etc/mailman/aliases
    owner_request_special = no
    recipient_delimiter = +
    transport_maps=hash:/etc/postfix/transport
    -----------------------------------------------------

    /etc/postfix/transport
    -----------------------------------------------------
    [mlacount]@list.[MAILDOMAIN] local
    -----------------------------------------------------

    /etc/mailman/mm_cfg.py
    -----------------------------------------------------
    #DEFAULT_URL_HOST = fqdn
    #DEFAULT_EMAIL_HOST = fqdn
    add_virtualhost('list.[MAILDOMAIN]','list.[MAILDOMAIN]')
    MTA = 'Postfix'
    -----------------------------------------------------

    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン