Postfix+Dovecot+Windows Active Directory集成认证

Postfix+Dovecot(用户认证及pop3/imap服务)+Windows Active Directory

作者: 邓卫华

历史记录:

2009-11-20      完成初稿

2009-11-22      修正了当AD中域用户被禁止了后还可以收到邮件的问题。

2009-11-22     发现当用设置了“用户过期”属性时并到期后无法控制,暂未解决(暂时的想法是在LINUX(windows)下写一个脚本运行当发现用户过期后就设置useraccountexpires属性为禁止。)

2009-11-27    修正了在dovecot-ldap.cf配置文件中密码与前文建的用户不正确造成dovecot认证不通过。

                   修正了dovecot.conf文件中的错别字,sock listen应为socket listen和mod应为mode

前言:

现在大部公司都使用Windows的域但是为了节省软件采购成本邮件系统往往采用Linux来实现,因此Windows Active Directory 与 postfix邮件的用户密码集成统一认证就成了关键,不然用户还需要记住两个密码非常不方便,本文使postfix+pop3/imap采用windows AD的用户与密码来对postfix的邮件帐号来进行认证。

Postfix:实现邮件smtp功能。

Dovecot:实现为Postfix的认证与提供Pop3/imap的功能。

一、 修改本机IP地址及时区

1、修改主机

#vi /etc/hosts

增加:

10.0.3.4 mail mail.test.com

2、修改网卡设置为固定IP地址

#vi /etc/sysconfig/network-scripts/ifcfg-eth1 (如果您只有一个网卡,则应该是ifcfg-eth0)

增加:

#BOOTPROTO=DHCP

IPADDR=10.0.3.4

NETMASK=255.255.255.0

GATEWAY=10.0.3.1 (或都修改/etc/sysconfig/network文件)

3、修改DNS服务器

#vi /etc/resolv.conf

增加:

Nameserver 10.0.3.3 (根据您的网络情况设置您的DNS服务器)

Nameserver 192.168.0.14

4、修改时区及时间

#ln �Csf /usr/share/zoneinfo/Asia/Chongqing /etc/localtime (修改时间区为重庆)

Ntpdate 192.168.0.14

注:时间服务器最好设置为您的windows 域服务器,否则如果邮件服务器和域控制器的时间相关太大的话会出现认证不成功。

=======网络主机的配置完成,下面开始配置邮件相关软件=====

二、安装postfix及依赖的软件(以下的操作请严格注意版本的匹配!!否则配置文件可能和我这里的不一样)

1、软件下载

Postfix 2.6 Patch Levels 5 (版本必须要>2.4 否则后面配置的AD邮件组会失败)

#wget http://www.postfix.cn/source/official/postfix-2.6.5.tar.gz

Dovecot 1.2.7

Wget http://dl.atrpms.net/all/dovecot-1.2.7-0_102.el5.i386.rpm (官方网站提供的连接)

mysql-5.0.77-3.el5 (如果从源码包安装dovecot的话应该不需要mysql的库文件)

postgresql-libs-8.1.11-1.el5_1.1(若从源码包安装dovecot的话应该不需要的库文件libpq.so.4)

OpenLDAP的库文件

#yum install openldap-devel openldap-client

[root@mail software]# rpm -qa |grep openldap

openldap-2.3.43-3.el5

openldap-devel-2.3.43-3.el5

openldap-clients-2.3.43-3.el5

2、软件安装

#yum install mysql

#yum install postgresql-libs.i386

#rpm �Civh dovecot-1.2.7-0_102.el5.i386.rpm

编译与安装Postfix2.6 patch level 5

#tar zxvf postfix-2.6.5.tar.gz

#cd postfix-2.6.5

根据文档来编写编译文件:

postfix SASL(dovecot) http://www.postfix.org/SASL_README.html

postfix ldap http://www.postfix.org/LDAP_README.html

#groupadd vmail

#useradd vmail �Cg vmail //通过group文件和运行vipw命令确认vmail用户和组的id号是多少,以后会用到。

#groupadd postdrop

#groupadd postfix

#useradd postfix �Cg postfix

# make tidy

# make makefiles CCARGS=’-DUSE_SASL_AUTH �CDDEF_SERVER_SASL_TYPE=\”dovecot\” -I/usr/include �CDHAS_LDAP’ \ AUXLIBS=”-L/usr/lib -lldap �CL/usr/lib �Cllber”

# make

# make install

#make clean

3、验证正确安装

#postconf �Ca

看到dovecot说明集成dovecot认证正确。

#postconf �Cm

看到ldap说明集成LDAP认证正确。

三、配置POSTFIX集成Windows 2008 AD认证

1、配置postfix

#postconf �Ce myhostname=mail.test.com

#postconf �Ce mydomain=test.com

#postconf �Ce myorigin=’$mydomain’

#postconf �Ce mydestination=’$myhostname,localhost.$mydomain,localhost’

#postconf �Ce mynetworks=127.0.0.0/8

#postconf �Ce home_mailbox=’Maildir/’

#####注释:配置Dovect SASL认证

#postconf �Ce smtpd_sasl_type=dovecot

#postconf �Ce smtpd_sasl_path = ‘/var/run/dovecot/auth-client’ (这个地方要注意dovecot.conf中auth client部份的路径,需要保持一至)

######注释:启用SASL认证。

#postconf �Ce smtpd_sasl_auth_enable=yes

#postconf �Ce smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

#postconf �Ce broken_sasl_auth_clients=yes

######注释:查找LDAP服务器的用户

#postconf �Ce virtual_mailbox_base=’/data/vmail’ (根据你的用户存放的路径来决定)

#postconf �Ce virtual_mailbox_domains=’$mydomain’

#postconf �Ce virtual_mailbox_maps=’ldap:/etc/postfix/ldap-users.cf’

//以上这个文件是查询LDAP目录的配置文件。

#postconf �Ce virtual_transport=virtual

#postconf �Ce virtual_uid_maps=static:501 /vmail用户的ID号,可以通过vipw来确认。

#postconf �Ce virtual_gid_maps=static:502 /vmail组的ID号,可以通过less /etc/group来确认。

2、配置WINDOWS 2008 AD

运行dcpromo提升为域控制器(略),并增加test和vmail用户,密码123

3、配置Postfix的LDAP用户查询

#vi /etc/postfix/ldap-users.cf

server_host = 10.0.3.3 //AD服务器的IP地址

search_base = dc=test,dc=com //域名

version =3

query_filter = (&(objectclass=person)(|(mail=%s)(othermailbox=%s))(!(userAccountControl=66050)))

bind=yes

bind_dn = [email protected]

bind_pw = 123

result_attribute= sAMAccountName

result_format = %s/Maildir/

#-----------end----------

说明:userAccountControl参数的值请见:

 http://support.microsoft.com/?scid=kb;zh-cn;305144&x=11&y=11

十进制: 66050为十六进制的值为:0x10202, 0x10000=用户密码不过期,0x00200=普通帐户,0x00002=帐户被禁用,所有的值累加。

确认postfix的LDAP查询正确,请运行以下命令:

#postmap �Cq [email protected] ldap:/etc/postfix/ldap-users.cf

以上命令中请确认test用户存在,并在WINDOWS的“活动目录用户与计算机”中为test用户的邮件地址设置为: [email protected]

如果返回:Test/Maildir/ 说明配置完全正确

4、配置Dovecot为Postfix提供用户和密码验证。

修改/etc/dovecot.conf中的

listen = *

log_path = /var/log/dovecot.log

mail_location = maildir:/data/vmail/%u/Maildir

protocols = imap pop3

protocol imap {

}

protocol pop3 {

pop3_client_workarounds = outlook-no-nuls oe-ns-eoh

}

protocol managesieve {

}

protocol lda {

auth_sock_path = /var/run/dovecot/auth-master

postmaster_address = [email protected]

hostname = mail.test.com

}

auth default {

mechanisms = plain login

username_format = %Lu

passdb ldap {

args = /etc/dovecot-ldap.conf

}

userdb static {

args = uid=501 gid=502 home=/data/vmail/%u

}

user = root

socket listen {

master {

path = /var/run/dovecot/auth-master

mode = 0600

}

client {

path = /var/run/dovecot/auth-client

mode = 0660

user = postfix

group = postfix

}

}

}

#------------end----------

增加/etc/dovecot-ldap.conf

hosts = 10.0.3.3

dn = [email protected]

auth_bind = yes

dnpass = 123

auth_bind_userdn = test\%u

ldap_version = 3

base = dc=test,dc=com

scope = subtree

deref = never

user_filter = (&(objectClass=person)(sAMAccountName=%u))

pass_attrs = (&sAMAccountName=%u)(userPassword=password))

pass_filter = (&objectClass=person)(SAMAccount=%u))

default_pass_scheme = CRYPT

#-------完成。

四、启动并测试

1、启动postfix

#postfix start

#tail /var/log/maillog

#netstat �Can |grep 25

如果出现表示postfix正常。

#telnet 10.0.3.4 25 可以看到以下提示:

ehlo mail

220 mail.test.com ESMTP Postfix

ehlo mail

250-mail.test.com

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH PLAIN LOGIN

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

2、启动dovecot

#dovecot

#tail /var/log/dovecot.log

#netstat �Can |grep 110

如果出现表示dovecot正常

#telnet 10.0.3.4 110

+OK Dovecot ready.

user test

+OK

pass 123

+OK Logged in.

list

+OK 0 messages:

.

quit

+OK Logging out.

失去了跟主机的连接。

smtp的密码认证可以通过outlook/outlook express来测试,或者用perl得得出加密码密码手工认证。

五、增加功能: postfix向WINDOWS 2008 AD邮件组中的用户发送邮件。

要求:postfix的版本必须>2.4以上。

#postconf �Ce virtual_alias_maps = ‘ldap:/etc/postfix/ldap-groups.cf’

#vi /etc/postfix/ldap-groups.cf

server_host = 10.0.3.3

search_base = dc=test,dc=com

version = 3

query_filter = (&(objectclass=group)(mail=%s))

leaf_result_attribute = mail

special_result_attribute = member

bind = yes

bind_dn = [email protected]

bind_pw = 123

#-------end

测试:

如图一所示:组group1包含两个成员:g1和g2

clip_image002

《图一》

clip_image004

《图二》:为g1用户设置电子邮件地址

clip_image006

《图三》:group1组的电子邮件地址为:[email protected]

下图为未对postfix设置别名(组)下的SMTP回应:

Recipient address rjected: user unknown is virtual mailbox table

clip_image008

下图为增加了组查询功能后的测试结果:

clip_image010

日志如下:

clip_image012

六、后记:

此系统只是一个基本的配置教程,并未增加反垃圾、反病毒邮件和WEBMAIL功能。

参考网站:

http://www.linuxmail.info/postfix-active-directory-ldap-lookup-howto/

你可能感兴趣的:(windows,postfix,Directory,Active,Dovecot)