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コマンドで管理用パスワードを生成して、テキストなどにメモしておきます。
# 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(データ階層構造)は下記構成で作成します。
- ・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
- 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に切り替えます。
- 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.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
メーリングリスト作成手順
- ブラウザで管理用ページへアクセスします
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 [メーリングリスト名]











