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コマンドで管理用パスワードを生成して、テキストなどにメモしておきます。
    # slappasswdNew password:****Re-enter new password:****{SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNn 
↑

slapd.confの編集

  • openldapの設定ファイル「/etc/openldap/slapd.conf」を編集します。
    (※変更箇所のみを抜粋しています)
    # vi /etc/openldap/slapd.confinclude         /etc/openldap/schema/postfix.schemasuffix      "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.ldifdn: dc=oss-d,dc=netobjectClass: dcObjectobjectclass: organizationdc: oss-do: oss-d.netdn: cn=Manager,dc=oss-d,dc=netobjectClass: organizationalRolecn: Managerdn: ou=Users,dc=oss-d,dc=netobjectClass: organizationalUnitou: Usersdn: ou=Group,dc=oss-d,dc=netobjectClass: organizationalUnitou: Group
  • ldifファイルを利用してデータを一括登録します。
    # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f base.ldif 


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

  • ユーザデータのldifファイルを作成します。
    # vi user.ldifdn: uid=hoge1,ou=Users,dc=oss-d,dc=netobjectClass: posixAccountobjectClass: shadowAccountobjectClass: topobjectClass: accountobjectClass: mailUsergidNumber: 10001uidNumber: 10001uid: hoge1cn: hoge1homeDirectory: /home/hoge1mail: : hoge1userPassword: {SSHA}M8mgOF7ObnKIdK4yHP6G1z1DvWBxf4+Ydn: uid=hoge2,ou=Users,dc=oss-d,dc=netobjectClass: posixAccountobjectClass: shadowAccountobjectClass: topobjectClass: accountobjectClass: mailUsergidNumber: 10002uidNumber: 10002uid: hoge2cn: hoge2homeDirectory: /home/hoge2mail: : hoge2userPassword: {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
↑

↑

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コンソールのURLDEFAULT_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/mmsitepassNew site password: mailadminAgain to confirm password: mailadminPassword 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 = virtualvirtual_mailbox_domains = oss-d.net ml.oss-d.netvirtual_mailbox_base = /var/vmailvirtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cfvirtual_alias_maps = ldap:/etc/postfix/ldap-alias.cf,hash:/etc/mailman/virtual-mailmanvirtual_uid_maps = static:1000virtual_gid_maps = static:1000local_recipient_maps = $alias_maps $virtual_alias_maps
  • ldap-mailbox.cfの内容
    # vi /etc/postfix/ldap-mailbox.cfserver_host = 192.168.11.100domain = oss-d.netsearch_base = ou=Users,dc=oss-d,dc=netscope = onequery_filter = (uid=%u)result_attribute = uidresult_format = %s/Maildir/
  • ldap-aliases.cfの内容
    # vi /etc/postfix/ldap-alias.cfserver_host = 192.168.11.100domain = oss-d.netsearch_base = ou=Users,dc=oss-d,dc=netscope = onequery_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.postfixEnter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
↑

自動起動の設定

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

起動

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

Apache

↑

Apacheの設定

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


↑

起動

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

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

  • 管理用のメーリングリストをmailmanとして作成します。
  • 管理用のメーリングリストが作成された事を確認します。
    # 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 addressmailman-loop: /var/lib/mailman/data/owner-bounces.mbox# STANZA START: mailman# CREATED: Fri Oct 22 22:24:49 2010mailman:             "|/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 startmailman を起動中:                                          [  OK  ]
↑

cronの設定

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

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

  • ブラウザで管理用ページへアクセスします
    https://ml.oss-d.net/mailman/listinfo

  • 「リスト管理一覧ページ」を選択します。
    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