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
《图一》
《图二》:为g1用户设置电子邮件地址
《图三》:group1组的电子邮件地址为:[email protected]
下图为未对postfix设置别名(组)下的SMTP回应:
Recipient address rjected: user unknown is virtual mailbox table
下图为增加了组查询功能后的测试结果:
日志如下:
六、后记:
此系统只是一个基本的配置教程,并未增加反垃圾、反病毒邮件和WEBMAIL功能。
参考网站:
http://www.linuxmail.info/postfix-active-directory-ldap-lookup-howto/