Mailman + Postfix + OpenLDAP
| Table of Contents |
はじめに
MailmanとOpenLDAPを連携させます。メールボックスはバーチャルメールボックスを利用します。
尚、ユーザ名とML名の重複を避けるため、アドレスを2種類に分けます。
- ユーザアドレスは「@oss-d.net」
- MLアドレスは「@ml.oss-d.net」
システム構成
|
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(データ階層構造)は下記構成で作成します。
- ・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
-
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に切り替えます。
-
sendmailの停止
# /etc/rc.d/init.d/sendmail stop# chkconfig sendmail off
-
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
-
「リスト管理一覧ページ」を選択します。
-
「新しいメーリングリストを作成する」を選択します。
-
メーリングリストを作成します。
「リスト作成用の認証パスワード」は先ほど作成した「mailadmin」を入力します。
-
「リスト管理ページへ行く」を選択します。
-
「会員管理」を選択します。
-
「まとめて入会」を選択します。
-
hoge1とhoge2をMLメンバとして追加します。
-
完了の表示を確認します。
- 送信テスト作成したメーリングリストに投稿し、メンバにメールが届く事を確認します。無事届けば設定完了です。
バックアップ
-
バックアップは下記ディレクトリをtarで取得します。
/etc/postfix//etc/mailman//var/lib/mailman
Mailman用のコマンド
-
メーリングリスト一覧
/usr/lib/mailman/bin/list_lists
-
メーリングリスト削除
/usr/lib/mailman/bin/rmlist -a [メーリングリスト名]