Mail Serverと一括りに言うが、実際にサーバーとして作る場合、MTAとMDAを準備する必要がある。
InternetでMTAと言えば、SMTP Serverであり、これには様々なものがある。古くからあるsendmail、qmail、postfixやexim、courier-MTA等。
また、一般に広く利用されているMDAプロトコルには POP3/IMAP があり、それ様のサーバーも非常にたくさんある。Cyrus-IMAP/POP, Courier-IMAP/POP, Dovecot, UW-IMAP, Qpopper等。
今回はSMTP Serverとしてpostfixを選択、POP3/IMAP ServerとしてDovecotを利用することにしたので、そのメモを。
最近では、LinuxやMacOS-X等も含めてSMTP ServerにPostfixを利用しているOSが多い。これは、sendmailと比較して初心者でも設定が(比較的)簡単であるからだろうと思われる。
現時点(2010/04)で筆者の知っているSMTP Serverと言えば
ちなみに、POP3 ServerやIMAP Serverとなると更に多数あるので、ここでは取り上げない。
なお、Mail ServerはDNS Queryを多数発行するので、Mail ServerはDNS Cache Serverと同時に動かすことが望ましい。
ここから、MTA/SMTP Serverに関する基本的な設定などを記載する。
postfixを参照。
個人ドメインでのMail Server運用なので、それに合わせた設定を行う。
細かい点はManualを参照のこと。差分のみ記載する。
myhostname = mail2.example.net ← 指定しなければ自動で設定される mydomain = example.net ← 同上 myorigin = $mydomain ← 同上 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ← example.net向けのMailを受信するようにする。 mynetworks = $config_directory/mynetworks ← 無条件で信用するNetworkを記載するファイルを指定 home_mailbox = Maildir/ ← Maildir形式でメールを保存 debugger_command = ← Xとかとばしたくないので、こっちにする PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont; echo where) | gdb $daemon_directory/$process_name $process_id 2>&1 >$config_directory/$process_name.$process_id.log & sleep 5 biff = no ← biffを止める mailbox_size_limit = 0 ← メールボックスのサイズ制限をなくす message_size_limit = 104857600 ← 個々のメッセージのサイズを10MByteまでに制限 allow_mail_to_commands = alias,include ← メーリングリスト管理用設定 disable_vrfy_command = yes ← SMTP VRFYコマンドを禁止 smtpd_helo_required = yes ← SMTP HELOを必須にする smtpd_client_restrictions = ← TCP接続時の制限 permit_mynetworks ← $mynetworksと一致していればOK check_client_access cidr:$config_directory/client ← 指定されたファイルに記載されているデータベースを確認 warn_if_reject reject_rbl_client all.rbl.jp ← RBL.jpを参照する。もし引っかかった場合、logに記載されるが、rejectはしない warn_if_reject reject_rbl_client zen.spamhaus.org ← SPAMHAUSを参照する。もし引っかかった場合、logに記載されるが、rejectはしない reject_unknown_client ← いわゆるParanoid Check. IP Address→PTR→Aで一致しなければ却下 permit ← あとは許可 smtpd_helo_restrictions = ← SMTP HELO時での制限 reject_unauth_pipelining ← 正しくないパイプを利用することを禁止 reject_invalid_hostname ← ホスト名が以上である場合却下 warn_if_reject reject_non_fqdn_hostname ← ホスト名がFQDNで記載されていなければlogに記載 warn_if_reject reject_unknown_hostname ← ホスト名がDNSで引けない場合logに記載 permit ← あとは許可 smtpd_sender_restrictions = ← SMTP MAIL FROM:時での制限 reject_unauth_pipelining ← 正しくないパイプを利用することを禁止 reject_non_fqdn_sender ← FQDN出なければ却下 reject_unknown_sender_domain ← ドメインがDNSで引けなければ却下 warn_if_reject reject_sender_login_mismatch ← クライアントがloginしていない場合にlogを出す。SASL/SMTP Auth等で有効 reject_unlisted_sender ← 受信者が特定できない場合に却下 warn_if_reject reject_unverified_sender ← 送信者が特定できない場合にlogを出す。通信量が増え、反応が鈍るので要注意。 permit ← あとは許可 smtpd_recipient_restrictions = ← SMTP RCPT TO:時での制限 reject_unauth_pipelining ← 正しくないパイプを利用することを禁止 permit_auth_destination ← 配信先が承認されている場合 OK warn_if_reject reject_non_fqdn_recipient ← 配信先がFQDNでない場合 log warn_if_reject reject_unknown_recipient_domain ← 配信先のアドレスに AもしくはMXレコードがない場合に log warn_if_reject reject_unverified_recipient ← 受信者が特定できない場合 log reject_unauth_destination ← 配信先が承認されていない場合却下 reject_multi_recipient_bounce ← Envelope FROMがNULLであり、Envelope RCPTが複数ある場合要求を拒否 permit ← あとは許可 smtpd_data_restrictions = ← SMTP DATA時での制限 reject_unauth_pipelining ← 正しくないパイプを利用することを禁止 reject_multi_recipient_bounce ← Envelope FROMがNULLであり、Envelope RCPTが複数ある場合要求を拒否 permit ← あとは許可
で、mynetworksを作成し以下の様に設定。
# ----- localhost [::1]/128 127.0.0.1/32 # ----- home network 10.11.12.0/26 # ----- Office network 192.168.128.0/25
次に、clientファイルを作成し、以下の様に記載。
# White List 10.11.12.0/26 OK 192.168.128.0/25 OK # Black List 10.11.12.64/26 NG 10.11.12.128/25 NG 192.168.0.128/25 NG
次に、メール配送関連の設定を行う。要するにMDAとしてpop3やIMAPを設定する。
今回は、MDAにdovecotを利用する。
Dovecot 参照。
加えて、SSLを利用するならOpenSSLで自己認証証明書(おれおれCA)を作成を参照。
いくつか考慮する点がある。
というわけで、そう言う設定を入れてある。
protocols = imaps ← dovecotではimapsのみを提供 listen = *, [::] ← IPv4/IPv6の両方でLISTENする disable_plaintext_auth = no ← plaintextでの認証を許可する(system passwordを利用するため) ssl = yes ← SSLを利用する ssl_cert_file = /etc/dovecot/certs/serv.cert ← サーバー証明書ファイル名 ssl_key_file = /etc/dovecot/private/serv_key.pem ← サーバー秘密鍵のファイル名 # ssl_key_password = xxxxxxxx ← サーバー秘密鍵のパスワード。今回はパスワードをはずしてあるので設定不要 ssl_ca_file = /etc/dovecot/certs/CAs.pem ← サーバー証明書が利用するための中間証明書やroot証明書をcatしたファイル名 mail_location = maildir:~/Maildir ← mailが保存されているDirectoryが${HOME}/Maildirであり、その形式がMaildir形式である namespace private { ← IMAPにおける名前空間の定義(courierからの移行に伴う措置。移行ではない場合不要 separator = . ← courier-imapに合わせる prefix = INBOX. inbox = yes } mmap_disable = yes ← mmapを利用しない(NFS対策) fsync_disable = no ← fsyncを利用しない(NFS対策) mail_nfs_storage = yes ← mail保存先がNFSであることを明示(NFS対策) mail_nfs_index = yes ← mailのindex保存先がNFSであることを明示(NFS対策) protocol imap { ← imap関連の設定。今回は特に設定なし } protocol pop3 { ← pop3関連の設定。今回は特に設定なし } protocol lda { ← dovecotのlocal配送システムを利用する場合の設定(今回はない) } auth default { ← 認証関係の設定 mechanisms = plain login ← 認証メカニズム。今回はplainとloginだけ。CRAM-MD5とかを利用する方法は今のところ不明 passdb passwd { ← password情報はシステム標準のpasswdを利用する } userdb passwd { ← user情報はシステム標準のpasswdを利用する } user = root ← password databaseを検索する時のUserID } } dict { ← dovecotが利用する辞書に関する情報。pluginが利用する場合が多いらしい } plugin { ← dovecot pluginに関する設定。今回は設定しない }
postfixにはSASL機能がない。従って、SASLでの認証を行うには、Cyrus-SASLを利用するか、dovecotのSASL機能を利用する必要がある。
管理するアプリケーションが増えると運用が大変になるので今回はdovecotのSASL機能を利用する。
postfixのmain.cfに以下の設定を追加
# For SASL smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = /var/spool/postfix/private/auth smtpd_sasl_security_options = noanonymous
今回の環境では、systemのパスワードファイルを使って認証する関係で、noplaintextを指定してはいけない。これを指定すると認証方法がなくなる。 なお、Virtual Hosting/Domainを利用する際に、LDAPと連動させてSystemのアカウントとMailのアカウントを分離する方法を記載する。
main.cfの各restrictionに以下を加える
restriction | parameter |
---|---|
smtpd_helo_restrictions | permit_sasl_authenticated |
smtpd_recipient_restrictions | permit_sasl_authenticated |
dovecotのdovecot.confに以下を加える
ssl = yes ← SSLを生かす ssl_cert_file = /etc/dovecot/certs/serv.cert ← Server証明書を指定 ssl_key_file = /etc/dovecot/private/serv_key.pem ← Server証明書の鍵を指定 ssl_ca_file = /etc/dovecot/certs/CAs.pem ← Server証明書に署名している中間証明書ファイルをcatしたもの ....(省略).... auth default { ← 既に存在するはず # Postfix SMTP Auth socket listen { ← 存在しているかもしれない client { ← 追加 path = /var/spool/postfix/private/auth ← 追加。Directoryはpostfixの設定と合わせること mode = 0660 ← 追加 user = postfix ← postfixの実行時のUID group = postfix ← postfixの実行時のGID } ← 追加 } ← 存在しているかもしれない } ===== postfixでTLS ===== ここまでが全部設定できたら、MTAのTLS対応を行う。 機能を一つ一つじっくり試しながら実装しないと、結局最初からやり直しになってしまう事が多く、Debugもはかどらないので注意。 まず、main.cfにTLS関係の設定を入れる <code> # for TLS smtpd_use_tls = yes ← smtpdはTLSを許容する smtpd_tls_CAfile = /etc/dovecot/certs/CAs.pem ← Server証明書に署名している中間証明書ファイルをcatしたもの smtpd_tls_cert_file = /etc/dovecot/certs/serv.cert ← サーバー証明書ファイル smtpd_tls_key_file = /etc/dovecot/private/serv_key.pem ← サーバー秘密鍵ファイル smtpd_tls_session_cache_database = btree:/var/db/postfix/smtpd_scache ← TLS sessionのキャッシュデータ smtpd_tls_loglevel = 1 ← TLSのdebug用 logレベル #smtpd_tls_loglevel = 3 ← 細かいDebugをするなら、loglebelを3にする
今回は、Wildcard証明書を発行したので、証明書も共用する。しかし、証明書は本来ホスト毎、サービス毎に分けるのが筋なので、別々に証明書を作って利用しても良い。 その場合いには、証明書ファイルを適切な名前に置き換えること。
次に、OP25B対策として、submission関連の設定をする。また、smtpdに関する設定も行う。master.cfに以下の様な変更を加える。
....(省略) .... smtp inet n - n - - smtpd ← 標準 submission inet n - n - - smtpd ← コメントを外して生かす(この行末のsmtpdをsmtpd -vに置き換えると、debugに便利) -o smtpd_enforce_tls=yes ← submissionでの通信では、TLSを強制する -o smtpd_sasl_auth_enable=yes ← SASL認証を生かす -o smtpd_client_restrictions=permit_sasl_authenticated,reject ← SASL認証を行ったclientに対してはClient確認を行わない smtps inet n - n - - smtpd ← コメントを外して生かす(この行末のsmtpdをsmtpd -vに置き換えると、debugに便利) -o smtpd_tls_wrappermode=yes ← smtpdがTLSをWrapperとして利用できるようにする -o smtpd_sasl_auth_enable=yes ← SASL認証を生かす # -o smtpd_client_restrictions=permit_sasl_authenticated,reject ← この行を生かせという記述が散見されるが、これを生かすとなぜかエラーになる。 #628 inet n - n - - qmqpd .... (省略) .... tlsmgr unix - - n 300 1 tlsmgr ← 1000?を300に置き換える .... (snip) ....
これでpostfixを再起動すると、postfixがTLSで通信するようになる。
ここまで設定すると、Web Mailも利用できるようになると嬉しい。というわけで、Webmailに関する設定を行う。
今回はWeb MailのシステムとしてSquirrel Mailを利用する。
Installはpkgsrcから行った。Squirrelmailを参照
Squirrelmail側はほとんど設定することがない。こちら側の設定はSquirrelmailを参照。
今回は、dovecotとsquirrelmailを同じサーバーで動かしているので、IMAPsを利用する必要がない。これは、UNIX Domain Socket(localhost)を利用して通信するため。 そのため、dovecotに以下の設定を追加。
この設定は、dovecot.confに以下の行を追加することで設定できる。
protocols = imaps imap ← imapを追加 protocol imap { listen = 127.0.0.1:143 [::1]:143 ← 127.0.0.1/::1からだけimapでの通信を許可 ssl_listen = *:993 [::]:993 ← SSLでの通信はどこからでも許可 }
これで、SquirrelMailが利用できるようになる。
postfixは、sendmail互換のMilterを利用できる。
milterは、Mailに対するFilterとして動作するため、これを利用することで様々な制御が行えるようになる。
今回は、j-checkmail(Mail Filter)とenma(SPF対応)を利用することにする。なお、将来dkimに対応するため、dkim-milterも入れてはあるのだが今回はまだ設定しない。
SSL/TLSは、本質的には暗号化をするので、Debugが大変である。また、SASLは認証なので、十分にテストすべきである。しかし、telnetだけでチェックをするのはなかなか難しかった。
今回はまったErrorに関して
cannot get RSA certificate from file
smtpd_tls_cert_file
で指定しているファイル名が間違っていた。当然SSL/TLS出来るわけがない。修正して問題は解決Error: command not recognized
smtpd_tls_loglevel = 3
を加え、master.cfのsmtpdに-vを加えてみた-o smtpd_client_restrictions=permit_sasl_authenticated,reject
を指定しているとこのエラーになった。なおDebugの際、wiresharkを利用してtcp.port==25とかtcp.port==587とかでfilterしながらpacketを見ると、SSL通信しているかどうかが判る。
Mail ServerでVirtual Hostingする場合の設定。
MailのVirtual Hostを提供する場合、ユーザー管理がまず問題になる。今回は、LDAPを利用してユーザー管理を行う事にする。
今回参考にしたページ
* postfixの送受信に関するポリシーは、MTA/SMTP Serverと同じとする * POP/IMAPの利用に関するポリシーは、MDA/pop3,IMAP Serverと同じとする
LDAPを利用するので、以下の項目に関して事前に決めておく。
管理する仮想ドメイン | example.net , example.com |
メール管理アカウント(for postfix) | virtmail (UID: 900) |
メール保存ディレクトリ | /var/mail/example.net, /var/mail/example.com |
LDAP Data構造 | 図参照 |
LDAP suffix | o=example |
LDAP bind DN | cn=Manager, o=example |
LDAP bind passwd | ldap-pass |
また、LDAPの管理にはphpLDAPadminを利用する
次にOpenLDAPの設定を行う。
attributetype (1.1.2.1.1.1 NAME 'mailForward' DESC 'forward address' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) attributetype (1.1.2.1.1.2 NAME 'mailAlias' DESC 'alias address' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) attributetype (1.1.2.1.1.4 NAME 'mailDir' DESC 'path of maildir' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) attributetype (1.1.2.1.1.7 NAME 'accountActive' DESC 'active or not active' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE) attributetype (1.1.2.1.1.8 NAME 'domainName' DESC 'domain name' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) attributetype (1.1.2.1.1.10 NAME 'transport' DESC 'transport' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) attributetype (1.1.2.1.1.11 NAME 'mailDrop' DESC 'drop address' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) objectClass (1.1.2.2.1.1 NAME 'mailGroup' DESC 'ML Group Account Object' SUP inetOrgPerson MUST ( accountActive $ domainName $ mailDrop )) objectClass (1.1.2.2.1.2 NAME 'mailUser' DESC 'mail user Object' SUP inetOrgPerson MUST ( transport $ mailDir $ homeDirectory $ accountActive $ domainName $ userPassword ) MAY ( mailForward $ mailAlias ))
include /usr/pkg/etc/openldap/schema/mail.schema ← 追加 ....(省略).... index uid,mail eq,pres,sub ← もし指定されていなければ、追加
# /usr/pkg/sbin/slapindex
/etc/rc.d/slapd start
# Root node dn: o=example ← dnの定義 objectClass: organization o: example ← dnで指定した値を記載 dn: ou=vmail,o=example ← vmailがexampleの配下にあることを示す(vmailコンテナーの作成) objectClass: organizationalUnit ou: vmail ← ou=vmailを定義
# example.net dn: dc=example.net,ou=vmail,o=example ← example.netコンテナーの作成 objectClass: dcObject ← 必ずdcObjectであることを定義する objectClass: organization dc: example.net ← dcObjectであるので、dcを定義。 o: example ← Organization情報を記載。 # user container dn: ou=user,dc=example.net,ou=vmail,o=example ← User格納用コンテナーの作成 objectClass: organizationalUnit ou: User # example.com dn: dc=example.com,ou=vmail,o=example ← example.netコンテナーの作成 objectClass: dcObject ← 必ずdcObjectであることを定義する objectClass: organization dc: example.com ← dcObjectであるので、dcを定義。 o: example ← Organization情報を記載。 # user container dn: ou=user,dc=example.com,ou=vmail,o=example ← User格納用コンテナーの作成 objectClass: organizationalUnit ou: User
# 実ユーザーの場合 # test1 メール転送無し dn: uid=test1,ou=User,dc=example.net,ou=vmail,o=example ←アカウントの情報 ou以下はコンテナー情報 objectClass: mailUser ← mail.schemaで定義したObject Classを記載 cn: TEST ← 一般には名字(Last name/Family name) sn: Test-1 ← 一般には名前(First name) uid: test1 ← UID (dnで定義した値) userPassword: himitu ← パスワード。ここではPlainで記載した。 homeDirectory: /home/vmail/example.net/test1 ← Home Directory mailDir: example.net/test1/Maildir/ ← Mail Directory mail: test1@example.net ← Mail address transport: virtual ← postfix用定義。virtual transportを利用する accountActive: TRUE ← Accountが有効かどうか domainName: example.net ← ドメイン名 # test2 メール転送あり dn: uid=test2,ou=User,dc=example.net,ou=vmail,o=example objectClass: mailUser cn: TEST sn: Test-2 uid: test2 userPassword: himitu homeDirectory: /home/vmail/example.net/test2 mailDir: example.net/test2/Maildir/ mail: test2@example.net mailForward: test2@example.com ← メールの転送先 transport: virtual accountActive: TRUE domainName: example.net # いわゆるalias。 # postmaster メール管理者。作成するべき dn: uid=postmaster,ou=User,dc=example.net,ou=vmail,o=example objectClass: mailGroup ← Alias定義 mail: postmaster@example.net ← Mail Address uid: postmaster ← UID cn: postmaster sn: ML User domainName: example.net accountActive: TRUE mailDrop: test1@example.net ← postmaster当てのメールを転送するユーザー mailDrop: test2@example.com # webmaster dn: uid=webmaster,ou=User,dc=example.net,ou=vmail,o=example objectClass: mailGroup mail: webmaster@example.net uid: webmaster cn: webmaster sn: ML User domainName: example.net accountActive: TRUE mailDrop: test2@example.net
Topの作成 $ ldapadd -x -h ldap.server.hostname -D "cn=Manager,o=example" -w ldap-pass -f Top.ldif ドメインの登録 $ ldapadd -x -h ldap.server.hostname -D "cn=Manager,o=example" -w ldap-pass -f Vdom.ldiff ユーザの登録 $ ldapadd -x -h ldap.server.hostname -D "cn=Manager,o=example" -w ldap-pass -f example.net.ldif
今回の設定では、LDAPに登録するmail情報のために mail.schemaを利用している。
objectClass名 | 説明 |
---|---|
mailUser | ユーザ用メールアカウント |
属性名 | 説明 | 参照先 |
---|---|---|
transport | SMTPのtransport設定(基本的に“virtual”で固定) | Postfix |
domainName | 所属ドメイン名 | Postfix |
mailDir | SMTPのメール配送先ディレクトリ | Postfix |
accountActive | アカウントの有効/無効をTRUE/FALSEで指定 | Postfix、Dovecot |
mailForward | 転送先メールアドレス | Postfix |
mailAlias | 別名メールアドレス(エイリアス) | Postfix |
属性名 | 説明 | 値の例 | 必項属性 | |
---|---|---|---|---|
cn | ラストネーム | TEST | 必項 | |
sn | ファーストネーム | Test-1 | 必項 | |
uid | ユーザID | test | 必項 | 今回は必ずしも数字である必要はない |
userPassword | パスワード | HIMITSUNOMOJIRETU | 必項 | |
homeDirectory | ユーザのホームディレクトリ | /home/vmail/examplenet/[uid] | 必項 | |
mailDir | ユーザのMailDirディレクトリ(SMTPの配送先) | example.net/[uid]/MailDir/ | 必項 | |
ユーザのメールアドレス | test1.example.net | 必項 | ||
mailForword | 転送先メールアドレス | foo@some.domain | 任意 | |
mailAlias | 別名メールアドレス(Alias) | postmaster@example.net | 任意 | |
accountActive | アカウントの有効/無効をTRUE/FALSEで指定 | TRUE | 必項 | |
domainName | 所属ドメイン名(dn:のdc=の値) | example.net | 必項 |
ここまで設定できれば、あとは postfixがLDAPの情報を利用できるようにするだけである。
main.cfに以下の設定を加える
# for Virtual Domains with LDAP virtual_mailbox_limit = 104857600 ← 少なくともmessage_size_limit以上にすること transport_maps = ldap:/etc/postfix/transport.cf ← transportの検索(LDAP) virtual_alias_maps = ldap:/etc/postfix/account.cf,ldap:/etc/postfix/group.cf ← アカウントやグループデータの検索(LDAP) virtual_mailbox_base = /home/vmail ← メールボックスを置くディレクトリ virtual_mailbox_domains = ldap:/etc/postfix/VIRTUAL/vdomain.cf ← 仮想ドメインの検索(LDAP) virtual_mailbox_maps = ldap:/etc/postfix/VIRTUAL/maildir.cf ← Mail保存ディレクトリの検索(LDAP) virtual_uid_maps = static:900 ← 仮想メールボックスのUID(固定) virtual_gid_maps = static:900 ← 仮想メールボックスのUID(固定) local_transport = local ← 仮想domain出はない場合のtransport手法の指定
main.cfで定義したファイルの作成
server_host = localhost #server_host = ldap1.some.domain, ldap2.some.domain ← サーバーが複数ある場合 search_base = ou=vmail,o=example query_filter = (&(objectClass=mailUser)(|(mail=%s)(mailAlias=%s))(accountActive=TRUE)) result_attribute = transport
server_host = localhost #server_host = ldap1.some.domain, ldap2.some.domain ← サーバーが複数ある場合 search_base = ou=vmail,o=example query_filter = (&(objectClass=mailUser)(|(mail=%s)(mailAlias=%s))(accountActive=TRUE)) result_attribute = mail, mailForward
server_host = localhost #server_host = ldap1.some.domain, ldap2.some.domain ← サーバーが複数ある場合 search_base = ou=vmail,o=example query_filter = (&(objectClass=mailGroup)(mail=%s)(accountActive=TRUE)) result_attribute = mailDrop
server_host = localhost #server_host = ldap1.some.domain, ldap2.some.domain ← サーバーが複数ある場合 search_base = ou=vmail,o=example query_filter = (domainName=%s) result_attribute = domainName
server_host = localhost #server_host = ldap1.some.domain, ldap2.some.domain ← サーバーが複数ある場合 search_base = ou=vmail,o=example query_filter = (&(objectClass=mailUser)(|(mail=%s)(mailAlias=%s))(accountActive=TRUE)) result_attribute = mailDir
通常どおり、postfixを再起動する。
通常どおり、メールの試験をする。特に、Mailの送受信に関しては、正しくメールが配送されているかを確認すること。 /var/log/maillogや、main.cfで指定したhome dir、mail dir等を見ながら、何が起こっているのか確認する必要がある。
dovecotの設定を行う。これは非常に簡単。
auth defaultで、ldapでの認証を行う
auth default { <---認証の設定 mechanisms = plain passdb ldap { args = /usr/pkg/etc/dovecot-ldap.conf } userdb ldap { args = /usr/pkg/etc/dovecot-ldap.conf }
# Debug #debug_level = 3 ← Debug用 hosts = localhost tls = no auth_bind=yes ldap_version = 3 base = ou=vmail,o=example deref = never scope = subtree user_attrs = homeDirectory=home user_filter = (&(objectClass=mailUser)(mail=%u)(accountActive=TRUE)) pass_attrs = uid=mail pass_filter = (&(objectClass=mailUser)(mail=%u)(accountActive=TRUE)) default_pass_scheme = PLAIN
これで設定は終了。通常どおりに再起動して、試験を行うこと。
Downloadページから最新版のphpLDAPadminをダウンロードする。