Postfix+Dovecot+LDAP(バーチャルメールボックス)
| Table of Contents |
システム構成
SMTP 兼 POPサーバ
- ホスト名(IP)
- serv11(192.168.11.11)
- OS
- CentOS 5.5 (kernel 2.6.18-194.11.1.el5)
- パッケージ
- postfix-2.3.3-2.1.el5_2
- dovecot-1.0.7-7.el5
LDAP 兼 WEBメールサーバ
- ホスト名(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
要件
- アカウント管理はOpenLDAPを利用する
- メールデータは「/var/mail」配下に保存する(大抵の場合、NFSなどで一元管理します)
- SMTPS,POP3S,IMAPSを利用可能にする
- SMTP認証を利用可能にする
- バーチャルメールボックスを利用する
バーチャルメールボックスについて
Postfixはローカルメールボックス配送にUNIXアカウントを利用しますが、
全メールユーザにUNIXアカウントを与える事はセキュリティ的に好ましくありません。
そこで、バーチャルメールボックスという仕組みを利用してUNIXアカウントが無くても
メール配送が行われるようにします。
OpenLDAP(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
Postfix(192.168.11.11)
Postfixのインストール
- postfix本体のインストール
# yum install postfix
Postfixの設定
main.cfの編集
- 設定ファイル「/etc/postfix/main.cf」を編集します。
# vi /etc/postfix/main.cf # ■基本設定------------------------------------------------# # ホスト名 myhostname = localhost # ドメイン名 mydomain = localdomain # @以降のドメイン名 myorigin = $myhostname # メールを受け取るネットワークインタフェースのアドレス範囲 inet_interfaces = all # メールの最終目的地とみなす範囲 # (バーチャルメールボックス利用時はドメイン名を含めない事) mydestination = $myhostname, localhost.$mydomain, localhost # 信頼できるクライアントのネットワーク mynetworks = 192.168.11.0/24, 127.0.0.0/8 # リレーを許可するドメインを指定 relay_domains = $mydestination # メールBOXの形式 home_mailbox = Maildir/ # ■バーチャルメールボックスの設定--------------------------------# virtual_transport = virtual virtual_mailbox_domains = oss-d.net virtual_mailbox_base = /var/vmail virtual_alias_maps = ldap:/etc/postfix/ldap-alias.cf virtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cf virtual_uid_maps = static:1000 virtual_gid_maps = static:1000 local_recipient_maps = proxy:unix:passwd.byname $alias_maps $virtual_mailbox_maps # ■SMTP認証の設定------------------------------------------------# # SASLによるSMTP認証を使用 smtpd_sasl_auth_enable = yes # 使用可能な認証メカニズムの設定 # noanonymous : 匿名接続を拒否。 # noplaintext : PLAIN認証を拒否(Outlook ExpressはPLAIN認証のみ対応) #smtpd_sasl_security_options = noanonymous, noplaintext smtpd_sasl_security_options = noanonymous # 認証時のTLSの利用(TLSを強制する場合はyesに変更) #smtpd_tls_auth_only = yes #ローカル認証 realm を設定 smtpd_sasl_local_domain = $myhostname #メールの送信可能なユーザ定義 # permit_mynetworks : $mynetworksは認証無しで許可する。 # permit_auth_destination : TOが@oss-d.netのメールを許可する。 # permit_sasl_authenticated : 認証済みであれば許可する。 smtpd_recipient_restrictions = permit_mynetworks permit_auth_destination permit_sasl_authenticated reject # Outlook LOGIN 認証を利用するための設定 broken_sasl_auth_clients = yes # ■TLSの設定------------------------------------------------# #TLSを有効にする smtpd_use_tls = yes #秘密鍵ファイルの指定 smtpd_tls_key_file = /etc/pki/tls/private/localhost.key #証明書ファイルの指定 smtpd_tls_cert_file = /etc/pki/tls/certs/localhost.crt #TLSセッションキャッシュデータベースの指定 smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_tls_scache #TLSのログレベル指定 smtpd_tls_loglevel = 1 #----------------------------------------------------------#
master.cfの編集
- 設定ファイル「/etc/postfix/master.cf」を編集します。(コメントを外すだけです。)
# vi /etc/postfix/master.cf smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject tlsmgr unix - - n 1000? 1 tlsmgr
ldap-aliases.cfの編集
- 設定ファイル「/etc/postfix/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
- postaliasコマンドで設定確認を行います。メールアドレスが表示されない場合は設定を
見直して下さい。
# postalias -q hoge1@oss-d.net ldap:/etc/postfix/ldap-alias.cf hoge1@oss-d.net
- postmap コマンドでデータベースを作成します
# postmap /etc/postfix/ldap-alias.cf
ldap-mailbox.cfの編集
- 設定ファイル「/etc/postfix/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/
- 設定の確認を行います。メールデータの保存先が表示されます。
# postalias -q hoge1@oss-d.net ldap:/etc/postfix/ldap-mailbox.cf hoge1/Maildir/
- postmap コマンドでデータベースを作成します
# postmap /etc/postfix/ldap-mailbox.cf
SMTP-AUTHの設定(LDAP対応)
SMTP-AUTHの認証にLDAPを利用するよう設定します。
SASLの設定
- 「/usr/lib/sasl2/smtpd.conf」を下記の通り設定します。
# vi /usr/lib/sasl2/smtpd.conf pwcheck_method: saslauthd mech_list: login plain
- 「/etc/sysconfig/saslauthd」を下記の通り設定します。
# vi /etc/sysconfig/saslauthd SOCKETDIR=/var/run/saslauthd MECH=ldap FLAGS=
- SASLがLDAPのユーザ情報を使用するよう「/etc/saslauthd.conf」を設定します
# vi /etc/saslauthd.conf ldap_servers: ldap://192.168.11.100 ldap_search_base: dc=oss-d,dc=net ldap_filter: uid=%u
- SASLの自動起動設定
# chkconfig saslauthd on
- SASLの起動
# /etc/init.d/saslauthd start
SMTP-TSLの設定
秘密鍵と証明書の作成
秘密鍵「localhost.key」と自己署名証明書「localhost.crt」を作成します。
- 自己署名証明書は商用サービスなどの第三者がアクセスする環境で利用しないで下さい。
- 第三者がアクセスする場合は、CAから発行された証明書を利用して下さい。
- カレントディレクトリを変更します。
# cd /etc/pki/tls
- 秘密鍵を生成します。
# openssl genrsa -des3 2048 -rand /var/log/ > private/localhost.key
「Enter PEM pass phrase:」と表示されるので、パスフレーズを入力すると暗号化のための秘密鍵(localhost.key)が生成されます。
- 秘密鍵からパスフレーズを削除します。
「Enter pass phrase for private/localhost.key:」と表示されるので、先ほどのパスフレーズを入力します。# openssl rsa -in private/localhost.key -out private/localhost.key Enter pass phrase for private/localhost.key: writing RSA key
- 生成された秘密鍵を使って自己署名証明書を発行します(Common NameはURLでのホスト名を入力)
# openssl req -new -x509 -key private/localhost.key \ -out certs/localhost.crt -days 3650 ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:www.oss-d.net Email Address []:
起動・自動起動
送信メールサーバーの切り替え
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
起動
- dovecotを起動します。
# /etc/init.d/postfix start
Dovecot(192.168.11.11)
Dovecotのインストール
- dovecot本体のインストール
# yum install dovecot
Dovecotの設定
dovecot.confの編集
- 設定ファイル「/etc/dovecot.conf」を編集します。
# vi /etc/dovecot.conf # 利用プロトコル protocols = imap imaps pop3 pop3s # SSL用の証明書 ssl_cert_file = /etc/pki/tls/certs/localhost.crt # SSL用の秘密鍵 ssl_key_file = /etc/pki/tls/private/localhost.key # メールボックスの場所 mail_location = maildir:~/Maildir #■LDAP認証の設定 auth default { mechanisms = plain #pam認証は使用しない #passdb pam { #} #userdb passwd { #} userdb ldap { args = /etc/dovecot-ldap.conf } userdb static { args = uid=1000 gid=1000 home=/var/vmail/%u } }
dovecot-ldap.confの編集
- 設定ファイル「/etc/dovecot-ldap.conf」を編集します。
# vi /etc/dovecot-ldap.conf hosts = 192.168.11.100 auth_bind = yes base = ou=Users,dc=oss-d,dc=net pass_filter = (uid=%u)
- メール管理用のユーザを作成します。(同時にメールデータ用のディレクトリも作成されます)
# useradd -u 1000 -d /var/vmail -s /sbin/nologin -m -k /dev/null mailadmin
自動起動の設定
- chkconfigコマンドで自動起動をONにします
# chkconfig dovecot on
起動
- dovecotを起動します。
# /etc/init.d/dovecot start
dovecot再起動
- 設定変更を有効にするため再起動します。
/etc/init.d/dovecot restart
動作確認
SMTPサーバでの動作確認
- 192.168.11.11でテストメールを送信してバーチャルメールボックスの動作を確認します。
# mail hoge1@oss-d.net Subject: test test . Cc:
- メールが届いている事を確認します。
# ls /var/vmail/hoge1/Maildir/new 1285332325.Vfd00I483c8M961959.serv11
- メールが届いていない場合はメールログを確認して下さい。
# vi /var/log/maillog
MUA(Backy!)での動作確認
- Backy!を下記の通り設定します。
基本設定タブ- POP3Sをチェック
- SMTPSをチェック
詳細タブ
- SMTP認証にチェック
- SMTP認証の「LOGIN」「PLAIN」にチェック
- SSL/TLS関連の「証明書を検証しない」にチェック
- SSL/TLS関連の「クライント証明書を使用」のチェックを外す
- メールの送受信を行い問題なければ動作確認は完了です。
第三者中継チェック
- 第三者中継(ToにもFromにも自ドメイン名が含まれないメールを中継する)はスパムに悪用される ため、専用サイトでチェックを実施します。 専用サイトは「第三者中継 チェック」などで検索すると情報が出てきます。
WEBメールの設定(192.168.11.100)
- メールの送受信が出来たら下記手順に従いWEBメール(squirrelmail)を設定します。
squirrelmail



