Mailman + Postfix + OpenLDAP


Table of Contents

はじめに

MailmanとOpenLDAPを連携させます。メールボックスはバーチャルメールボックスを利用します。


尚、ユーザ名とML名の重複を避けるため、アドレスを2種類に分けます。

  • ユーザアドレスは「@oss-d.net」
  • MLアドレスは「@ml.oss-d.net」


システム構成

postfix+mailman+openldap.jpg

MLサーバ

  • ホスト名(IP)
    • ml.oss-d.net(192.168.11.11)
  • OS
    • CentOS 5.5 (kernel 2.6.18-194.11.1.el5)
  • パッケージ
    • postfix-2.3.3-2.1.el5_2
    • mailman-2.1.9-4.el5
    • httpd-2.2.3-43.el5.centos.3
    • mod_ssl-2.2.3-43.el5.centos.3

LDAPサーバ

  • ホスト名(IP)
    • serv100(192.168.11.100)
  • OS
    • CentOS 5.5 (kernel 2.6.18-194.11.1.el5)
  • パッケージ
    • openldap-servers-2.3.43-12.el5_5.2
    • openldap-clients-2.3.43-12.el5_5.2

LDAPサーバ構築(192.168.11.100)

OpenLDAPのインストール

  • OpenLDAPをインストール
    # yum install openldap-servers
    # yum install openldap-clients

OpenLDAPの設定

スキーマファイルのダウンロード

  • 「wget」コマンドでpostfix用のスキーマファイルをダウンロードします。
    # wget http://ldapadmin.sourceforge.net/docs/postfix.schema -O /etc/openldap/schema/postfix.schema
    postfix.schemaの内容

管理パスワードの生成

  • slappasswdコマンドで管理用パスワードを生成して、テキストなどにメモしておきます。
    # slappasswd
    New password:****
    Re-enter new password:****
    {SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNn 

slapd.confの編集

  • openldapの設定ファイル「/etc/openldap/slapd.conf」を編集します。
    (※変更箇所のみを抜粋しています)
    # vi /etc/openldap/slapd.conf
    
    include         /etc/openldap/schema/postfix.schema
    
    suffix      "dc=oss-d,dc=net"
    rootdn      "cn=Manager,dc=oss-d,dc=net"
    rootpw      {SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNn
    
    #ユーザが自分のパスワード変更できるようにアクセス権を設定
    access to attrs=userPassword
      by self write
      by anonymous auth
      by * none
    
    #管理者は書き込み可能、その他のユーザは読み取り専用
    access to *
      by self write
      by * read

Berkeley DBの設定

  • Berkeley DBの設定ファイルを作成します。
    今回はサンプルのまま利用しますが、OpenLDAPのチューニングを行う場合は適宜変更して下さい。
    # cp -rp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

データ登録

DITについて

  • DIT(データ階層構造)は下記構成で作成します。
    LDAP_DIT.jpg
・Group
グループを登録するディレクティブ。
一般的なグループと同じで、複数ユーザをまとめて1つとして扱うために利用します。
Active Directory であれば administratorsやpoweruserがあります。
・Manager
slapd.confでrootdnに設定したディレクティブ。
Unixのrootのような扱いでデータベースに対してありとあらゆる権限を持ちます。
・Users
ユーザを登録するディレクティブ。

データ登録

  • 基本部分のldifファイルを作成します。
    # vi base.ldif
    
    dn: dc=oss-d,dc=net
    objectClass: dcObject
    objectclass: organization
    dc: oss-d
    o: oss-d.net
    
    dn: cn=Manager,dc=oss-d,dc=net
    objectClass: organizationalRole
    cn: Manager
    
    dn: ou=Users,dc=oss-d,dc=net
    objectClass: organizationalUnit
    ou: Users
    
    dn: ou=Group,dc=oss-d,dc=net
    objectClass: organizationalUnit
    ou: Group
  • ldifファイルを利用してデータを一括登録します。
    # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f base.ldif 


  • ユーザデータ登録前にユーザ hoge1とhoge2のパスワードを生成します。
    # slappasswd
    New password:
    Re-enter new password:
    {SSHA}M8mgOF7ObnKIdK4yHP6G1z1DvWBxf4+Y
    
    # slappasswd
    New password:
    Re-enter new password:
    {SSHA}YKATbytOmVm8KRBt7x8dtKp6D3j+M0Ku

  • ユーザデータのldifファイルを作成します。
    # vi user.ldif
    
    dn: uid=hoge1,ou=Users,dc=oss-d,dc=net
    objectClass: posixAccount
    objectClass: shadowAccount
    objectClass: top
    objectClass: account
    objectClass: mailUser
    gidNumber: 10001
    uidNumber: 10001
    uid: hoge1
    cn: hoge1
    homeDirectory: /home/hoge1
    mail: hoge1@oss-d.net
    maildrop: hoge1
    userPassword: {SSHA}M8mgOF7ObnKIdK4yHP6G1z1DvWBxf4+Y
    
    dn: uid=hoge2,ou=Users,dc=oss-d,dc=net
    objectClass: posixAccount
    objectClass: shadowAccount
    objectClass: top
    objectClass: account
    objectClass: mailUser
    gidNumber: 10002
    uidNumber: 10002
    uid: hoge2
    cn: hoge2
    homeDirectory: /home/hoge2
    mail: hoge2@oss-d.net
    maildrop: hoge2
    userPassword: {SSHA}YKATbytOmVm8KRBt7x8dtKp6D3j+M0Ku
    
    • ldifファイルを利用してデータを一括登録します。
      # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f user.ldif 

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig ldap on

LDAPの起動

  • LDAPを起動します。
    # /etc/init.d/ldap start

MLサーバ構築(192.168.11.11)

mailmanのインストール

  • mailmanのインストール
    # yum install mailman

mailmanの設定

  • ここでは最低限の設定を行い、残りの設定はWEB経由で行います。
    # vi /etc/mailman/mm_cfg.py 
    
    # WEBアクセスでのホスト名
    DEFAULT_URL_HOST   = ml.oss-d.net
    
    # SMTPサーバ
    DEFAULT_EMAIL_HOST = ml.oss-d.net
    
    # 以下を追加
    MTA = 'Postfix'
    POSTFIX_STYLE_VIRTUAL_DOMAINS = ['ml.oss-d.net']  #仮想ドメイン
    DEFAULT_URL_PATTERN = 'https://%s/mailman/'       #WEBコンソールのURL
    DEFAULT_SERVER_LANGUAGE = 'ja'                    #日本語
    DEFAULT_SUBJECT_PREFIX = "[%(real_name)s:%%d] "   #件名に通し番号を付加する
    DEFAULT_REPLY_GOES_TO_LIST = 1                    #返信先を投稿者でなくメーリングリストとする
    DEFAULT_GENERIC_NONMEMBER_ACTION = 2              #メンバーのみ投稿を許可する
  • WEB管理画面で利用するmailmanの管理者パスワードを設定します。
    今回は「mailadmin」でパスワードを作成します。
    # LANG=en_US,UTF-8 /usr/lib/mailman/bin/mmsitepass
    New site password: mailadmin
    Again to confirm password: mailadmin
    Password changed.

mailman用のaliasファイル作成

  • aliasファイルを作成します。
    # /usr/lib/mailman/bin/genaliases 
    
  • ファイルのアクセス権を設定します(Apacheの動作ユーザで書き込み可能にします)
    # chmod 666 /etc/mailman/aliases
    # chmod 666 /etc/mailman/aliases.db
    # chmod 666 /etc/mailman/virtual-mailman
    # chmod 666 /etc/mailman/virtual-mailman.db
    
  • アクセス権を確認します。(関連ファイルのみを抜粋しています)
    # ls -l /etc/mailman/
    -rw-rw-rw- 1 root mailman  5017 10月 24 11:10 aliases
    -rw-rw-rw- 1 root mailman 12288 10月 24 11:10 aliases.db
    -rw-rw-rw- 1 root mailman  1022 10月 24 11:10 virtual-mailman
    -rw-rw-rw- 1 root mailman 12288 10月 24 11:10 virtual-mailman.db

Postfixのインストール

  • postfixのインストール
    # yum install postfix

Postfixの設定変更

  • 設定ファイル「/etc/postfix/main.cf」を編集します。
    # vi /etc/postfix/main.cf 
    
    #■ Postfixの基本設定------------------------------------------------#
    # ホスト名
    myhostname =  mail.oss-d.net
    
    # ドメイン名
    mydomain = oss-d.net
     
    # @以降のドメイン名
    myorigin = $mydomain
    
    # メールを受け取るネットワークインタフェースのアドレス範囲
    inet_interfaces = all
    
    # メールの最終目的地とみなす範囲(仮想ドメインを記載しない事)
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    
    # 信頼できるクライアントのネットワーク
    mynetworks =  192.168.11.0/24, 127.0.0.0/8
    
    # リレーを許可するドメインを指定
    relay_domains = $mydestination
    
    # メールBOXの形式
    home_mailbox = Maildir/
    
    #■ Mailman用の設定------------------------------------------------#
    # -owner と -request のアドレスを特殊扱いしないよう設定
    owner_request_special = no
    
    # VERP 配送をサポートするため、拡張アドレスを有効にする
    recipient_delimiter = +
    
    # 存在しないローカルアドレスには550エラーを返し再配送しない。
    unknown_local_recipient_reject_code = 550
    
    # aliasの設定
    alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases
    
    #■ 仮想ドメインの設定--------------------------------------------#
    virtual_transport = virtual
    virtual_mailbox_domains = oss-d.net ml.oss-d.net
    virtual_mailbox_base = /var/vmail
    virtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cf
    virtual_alias_maps = ldap:/etc/postfix/ldap-alias.cf,hash:/etc/mailman/virtual-mailman
    virtual_uid_maps = static:1000
    virtual_gid_maps = static:1000
    local_recipient_maps = $alias_maps $virtual_alias_maps
  • ldap-mailbox.cfの内容
    # vi /etc/postfix/ldap-mailbox.cf
    server_host = 192.168.11.100
    domain = oss-d.net
    search_base = ou=Users,dc=oss-d,dc=net
    scope = one
    query_filter = (uid=%u)
    result_attribute = uid
    result_format = %s/Maildir/
  • ldap-aliases.cfの内容
    # vi /etc/postfix/ldap-alias.cf
    
    server_host = 192.168.11.100
    domain = oss-d.net
    search_base = ou=Users,dc=oss-d,dc=net
    scope = one
    query_filter = (uid=%u)
    result_attribute = mail

Postfixの起動・自動起動

送信メールサーバーの切り替え

CentOSではデフォルトでsendmailが起動しているため、Postfixに切り替えます。

  1. sendmailの停止
    # /etc/rc.d/init.d/sendmail stop
    # chkconfig sendmail off

  2. MTAの切り替え 「alternatives」コマンドで2を選択します。
    # alternatives --config mta
    
      選択       コマンド
    -----------------------------------------------
    *+ 1           /usr/sbin/sendmail.sendmail
       2           /usr/sbin/sendmail.postfix
    
    Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig postfix on

起動

  • Postfix を起動します。
    # /etc/init.d/postfix start

Apache

Apacheの設定

  • mailmanの管理ページをSSLでアクセスするよう設定します。
    # vi /etc/httpd/conf.d/mailman.conf
    
    ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
     <Directory /usr/lib/mailman/cgi-bin/>
       SSLRequireSSL                                  #追加
        AllowOverride None
        Options ExecCGI
        Order allow,deny
        Allow from all
    </Directory>


起動

  • apacheを再起動します。
    # /etc/init.d/httpd restart
    httpd を起動中:                                          [  OK  ]

Mailmanの管理用メーリングリストを作成

  • 管理用のメーリングリストをmailmanとして作成します。
    # LANG=en_US.UTF-8 /usr/lib/mailman/bin/newlist mailman
    
    Enter the email of the person running the list: hoge1@oss-d.net
    Initial mailman password:
    Hit enter to notify mailman owner...
  • 管理用のメーリングリストが作成された事を確認します。
    # cat /etc/mailman/aliases
    
    # This file is generated by Mailman, and is kept in sync with the
    # binary hash file aliases.db.  YOU SHOULD NOT MANUALLY EDIT THIS FILE
    # unless you know what you're doing, and can keep the two files properly
    # in sync.  If you screw it up, you're on your own.
    
    # The ultimate loop stopper address
    mailman-loop: /var/lib/mailman/data/owner-bounces.mbox
    
    # STANZA START: mailman
    # CREATED: Fri Oct 22 22:24:49 2010
    mailman:             "|/usr/lib/mailman/mail/mailman post mailman"
    mailman-admin:       "|/usr/lib/mailman/mail/mailman admin mailman"
    mailman-bounces:     "|/usr/lib/mailman/mail/mailman bounces mailman"
    mailman-confirm:     "|/usr/lib/mailman/mail/mailman confirm mailman"
    mailman-join:        "|/usr/lib/mailman/mail/mailman join mailman"
    mailman-leave:       "|/usr/lib/mailman/mail/mailman leave mailman"
    mailman-owner:       "|/usr/lib/mailman/mail/mailman owner mailman"
    mailman-request:     "|/usr/lib/mailman/mail/mailman request mailman"
    mailman-subscribe:   "|/usr/lib/mailman/mail/mailman subscribe mailman"
    mailman-unsubscribe: "|/usr/lib/mailman/mail/mailman unsubscribe mailman"
    # STANZA END: mailman

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig mailman on

  • chkconfigコマンドで自動起動の確認をします。 LUNレベル3,4,5がonになっていれば問題ありません。
    # chkconfig --list mailman 
    mailman         0:off   1:off   2:on    3:on    4:on    5:on    6:off

起動

  • mailmanを起動します。
    # /etc/init.d/mailman start
    mailman を起動中:                                          [  OK  ]

cronの設定

  • 「まとめ読み機能」などの定期タスクをcronへ登録します。
    まとめ読みとは、投稿メールを1通のメールにまとめて配送する機能です。
    # /usr/bin/crontab -u mailman /usr/lib/mailman/cron/crontab.in

メーリングリスト作成手順

  • 「リスト管理一覧ページ」を選択します。
    mailman00.jpg

  • 「新しいメーリングリストを作成する」を選択します。
    mailman01.jpg

  • メーリングリストを作成します。
    「リスト作成用の認証パスワード」は先ほど作成した「mailadmin」を入力します。
    mailman02.jpg
    mailman03.jpg
    mailman04.jpg

  • 「リスト管理ページへ行く」を選択します。
    mailman05.jpg

  • 「会員管理」を選択します。
    mailman06.jpg

  • 「まとめて入会」を選択します。
    mailman07.jpg

  • hoge1とhoge2をMLメンバとして追加します。
    mailman08.jpg

  • 完了の表示を確認します。
    mailman09.jpg

  • 送信テスト 作成したメーリングリストに投稿し、メンバにメールが届く事を確認します。 無事届けば設定完了です。

バックアップ

  • バックアップは下記ディレクトリをtarで取得します。
    /etc/postfix/
    /etc/mailman/
    /var/lib/mailman

Mailman用のコマンド

  • メーリングリスト一覧
    /usr/lib/mailman/bin/list_lists
  • メーリングリスト削除
    /usr/lib/mailman/bin/rmlist -a [メーリングリスト名]
このエントリーをはてなブックマークに追加
Last-modified: 2011-05-12 (木) 03:13:24   最終更新のRSS