CentOS 7でPostfix+DovecotによるIMAPサーバをActiveDirectory連携させる(LDAP認証)

今回は、Postfix+Dovecotで構築されたメールサーバで、ActiveDirectory連携についてを行う。
なお、当たり前だがメールサーバ側からADサーバと通信できる必要があるので、DMZ領域にいる場合でもそこの通信を開けないといけなかったり、クラウド上にメールサーバが建ってる場合はVPNで接続したりする必要がある。ネットワーク周りから考えないとならず、諸々面倒くさいことこの上ない。
小規模なグループで用いるメールサーバであれば、少人数なので普通にpamでローカルユーザで管理してID統合は行わないか、おとなしくGSuiteやOffice 365を使ったほうがいいだろう(これらにはローカルADと同期するツールが公式で提供されているので)。

前提として、すでにADおよびメールサーバ(Postfix+Dovecot)は構築済みであり、AD接続用のユーザなども作成済みとする(今回の例では「ldap」というユーザを使用)。
また、ユーザの認証情報についてはメールサーバ側で持たないものとし、メールデータはメールサーバ側に作成。ADユーザのディレクトリは自動的に作成するようにする。

 

1.Postfixの設定ファイルを編集する

もうすでにメールサーバ自体は構築済なので、Postfixの設定ファイル末尾に以下の内容を追記する。

●/etc/postfix/main.cf

virtual_transport = virtual
virtual_mailbox_domains = $mydomain
virtual_mailbox_base = /var/spool/virtual
virtual_alias_maps = ldap:/etc/postfix/ldap-alias.cf
virtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cf
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
local_recipient_maps = proxy:unix:passwd.byname $alias_maps $virtual_mailbox_maps

 

また、「/etc/postfix/main.cf」内で「mydestination」を定義している場合は、そのままだとエラーになるので以下のように空にする。

●/etc/postfix/main.cf

mydestination =

 

追記した内容にある「/etc/postfix/ldap-alias.cf」「/etc/postfix/ldap-mailbox.cf」ファイルをそれぞれ新規で作成する。

●/etc/postfix/ldap-alias.cf

server_host = ActiveDirectoryサーバのホスト名orIPアドレス(複数ある場合はカンマ区切り)
search_base = cn=Users,dc=adtest,dc=local
bind = yes
bind_dn = ldap@adtest.local
bind_pw = パスワード
scope = one
query_filter = (mail=%s)
result_attribute = mail

 

●/etc/postfix/ldap-mailbox.cf

server_host = ActiveDirectoryサーバのホスト名orIPアドレス(複数ある場合はカンマ区切り)
search_base = cn=Users,dc=adtest,dc=local
bind = yes
bind_dn = ldap@adtest.local
bind_pw = パスワード
scope = one
query_filter = (mail=%s)
result_attribute = mail
result_format = /home/%u/Maildir/

 

以下のコマンドを実行して無事AD認証が行えることを確認する。

postalias -q adtest@adtest.local ldap:/etc/postfix/ldap-mailbox.cf
postalias -q adtest@adtest.local ldap:/etc/postfix/ldap-alias.cf
[root@BS-PUB-POSTFIX-01 ~]# postalias -q adtest@adtest.local ldap:/etc/postfix/ldap-mailbox.cf
/home/adtest/Maildir/
[root@BS-PUB-POSTFIX-01 ~]# postalias -q adtest@adtest.local ldap:/etc/postfix/ldap-alias.cf
adtest@adtest.local

 

上記テストコマンドを実行して問題がなければ、Postfixを再起動し(設定ファイル中で定義した)ディレクトリを作成する。

systemctl restart postfix
mkdir -p /var/spool/virtual
chown 10000.10000 /var/spool/virtual/

 

この状態で、mailxコマンドでコンソールからActiveDirectoryユーザにメールを送信して、無事所定のディレクトリ(この場合、「/var/spool/virtual/」配下)に置かれることを確認する。

[root@BS-PUB-POSTFIX-01 ~]# mailx adtest2@adtest.local
Subject: test
test
.
EOT
[root@BS-PUB-POSTFIX-01 ~]# ls -al /var/spool/virtual/home/adtest2/Maildir/new/
合計 8
drwx------ 2 10000 10000   62 12月  4 23:28 .
drwx------ 5 10000 10000 4096 12月  4 23:26 ..
-rw------- 1 10000 10000  592 12月  4 23:28 1480861684.Vfd00Ic0b3568M934659.BS-PUB-POSTFIX-01
Sponsored Links

2.Dovecotの設定ファイルを編集する

次に、Dovecotの設定ファイルを編集する。
まず、「/etc/dovecot/conf.d/10-auth.conf」に以下のコマンドを実行し、「/etc/dovecot/conf.d/auth-ldap.conf.ext」ファイルの読み込みを行わせるようにする。

sed -i '/auth-ldap.conf.ext/s/^#//' /etc/dovecot/conf.d/10-auth.conf

 

「/etc/dovecot/conf.d/auth-ldap.conf.ext」ファイルで読み込まれている「/etc/dovecot/dovecot-ldap.conf.ext」ファイルを新規作成し、そこにActiveDirectoryへの接続情報を記載する。

●/etc/dovecot/dovecot-ldap.conf.ext

hosts = ActiveDirectoryサーバのホスト名orIPアドレス
base = cn=Users,dc=adtest,dc=local
ldap_version = 3
auth_bind = yes
auth_bind_userdn = adtest\%u
pass_filter = (&(objectclass=person)(uid=%u))

 

以下のコマンドで、IMAPサーバにログインできることを確認する。

[root@BS-PUB-POSTFIX-01 ~]# telnet localhost imap
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
. login adtest2 P@ssw0rd
. OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE] Logged in

 

ひとまずこれで、IMAPサーバとしてAD連携して動作するようになった。
SMTPサーバとしてもAD連携する場合はSMTP-Authについてsaslauthの設定を変えてやる必要があるのだが、今回はそこまでは行わないことにする。

 

【参考】

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*