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のインストール
-
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
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 = virtualvirtual_mailbox_domains = oss-d.netvirtual_mailbox_base = /var/vmailvirtual_alias_maps = ldap:/etc/postfix/ldap-alias.cfvirtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cfvirtual_uid_maps = static:1000virtual_gid_maps = static:1000local_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, noplaintextsmtpd_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.cfsmtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,rejecttlsmgr unix - - n 1000? 1 tlsmgr
ldap-aliases.cfの編集
-
設定ファイル「/etc/postfix/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
-
postaliasコマンドで設定確認を行います。メールアドレスが表示されない場合は設定を見直して下さい。
# postalias -q ldap:/etc/postfix/ldap-alias.cf
-
postmap コマンドでデータベースを作成します
# postmap /etc/postfix/ldap-alias.cf
ldap-mailbox.cfの編集
-
設定ファイル「/etc/postfix/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/
-
設定の確認を行います。メールデータの保存先が表示されます。
# postalias -q ldap:/etc/postfix/ldap-mailbox.cfhoge1/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.confpwcheck_method: saslauthdmech_list: login plain
-
「/etc/sysconfig/saslauthd」を下記の通り設定します。
# vi /etc/sysconfig/saslauthdSOCKETDIR=/var/run/saslauthdMECH=ldapFLAGS=
-
SASLがLDAPのユーザ情報を使用するよう「/etc/saslauthd.conf」を設定します
-
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.keyEnter 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]:JPState 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.netEmail 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.postfixEnter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
自動起動の設定
-
chkconfigコマンドで自動起動をONにします
# chkconfig postfix on
起動
-
dovecotを起動します。
# /etc/init.d/postfix start
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.confhosts = 192.168.11.100auth_bind = yesbase = ou=Users,dc=oss-d,dc=netpass_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 Subject: testtest.Cc:
-
メールが届いている事を確認します。
# ls /var/vmail/hoge1/Maildir/new1285332325.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