免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4564 | 回复: 6
打印 上一主题 下一主题

用pam_ldap+openldap作postfix的sasl认证详解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-22 17:23 |只看该作者 |倒序浏览
用openldap+postfix作邮件服务的文章很多,但是要继续作sasl的却很少.网上有一篇debian的.但和FREEBSD毕竟有差别.所以自己做了试试.

1.为什么要用openldap认证.
用openldap做存储邮件用户帐号的优点太多了,但如果smtp认证的帐户存储在其他地方就不好管理了.
当然,你如果用单一smtp帐号认证,你完全可以跳过本文.

2.怎么利用openldap现存的收件帐号.
利用pam的pam_ldap可以读取收件帐号,cryus_sasl2可以使用pam.postfix可以利用cyrus_sasl2.
所以postfix可以利用openldap里面的收件帐号作sasl认证.

3.服务器装frebsd5.3并升级ports
建议装好vim,它对各种.conf文件都有很好的错误提示能力.
cd /usr/ports/editors/vim-lite/
make install clean

4.工作站用yellowdog(和fedora2基本一样)
装gq管理openldap.
http://sourceforge.net/projects/gqclient/
说实话其他的ldap管理工具没用过,GQ已经十分出色了.(gtk)

5.postfix
/usr/ports/mail/postfix/
安装时选中sasl2,openldap
master.cf不动.
main.cf加
#打开sasl认证
smtpd_sasl_auth_enable=yes
#兼容oe和netscape
broken_sasl_auth_clients=yes
#指定/usr/local/lib/sasl2/smtpd.conf的名子.下面就是smtpd,不是smtpd.conf
smtpd_sasl_application_name=smtpd

6.openldapserver
/usr/ports/net/openldap22-server
如果想充分利用sasl可到/usr/ports/net/openldap22-sasl-server
这个太麻烦,自己google一下吧!

7.pam_ldap
/usr/ports/security/pam_ldap/
Make install clean后会有/usr/local/etc/ldap.conf.dist文件
改为ldap.conf


#ldap主机
host localhost
#搜索的基础路径
base ou=mailaccounts,dc=example,dc=net
#绑定的dn
binddn cn=postfix,ou=daemons,dc=example,dc=net
#绑定的密码
bindpw 你的密码
#搜索范围 :向下
scope sub
#搜索过滤器
pam_filter objectclass=*
#密码散乱方式
pam_password crypt

在/usr/local/etc/pam.d/目录里建立文件smtp
内容:
auth required pam_ldap.so debug
password required pam_ldap.so debug
account required pam_ldap.so debug

这样,pam就有了smtp的校验方式.

8.cyrus-sasl2-saslauthd
先前装postfix选中sasl时已经装了cyrus-sasl2只需要装这个
/usr/ports/security/cyrus-sasl2-saslauthd
就可以了.
cd /usr/local/lib/sasl2/
ln -s Sendmail.conf smtpd.conf
修改内容:
#密码检测方式,用saslauthd服务来务认证
pwcheck_method: saslauthd

9.调试.
a.测试sasl-->;pam--->;openldap
testsaslauthd -s smtp -u 用户 -p 密码
成功会出现:OK "Success."

b.测试postfix
执行
perl -MMIME::Base64 -e 'print encode_base64("user\0user\0passwd";'
得到乱码.
AGNoZW5qaWFucGluZwBybWNybWM=
telnet localhost 25
auth plain AGNoZW5qaWFucGluZwBybWNybWM=
看结果.

论坛徽章:
0
2 [报告]
发表于 2005-01-22 17:33 |只看该作者

用pam_ldap+openldap作postfix的sasl认证详解

main.cf
#使用本地的biff服务提醒用户邮件到达
biff=no
#出现在smtp问候标记里220状态码的文字??
smtpd_banner=$myhostname Esmtp No NCE
#客户端访问服务器符合debug_peer_list表达式的冗余增量??
debug_peer_level=2
#发件人接收队列里面的信息标题的时间?
delay_warning_time=4
#所有的postfix管理命令所在的目录
command_directory=/usr/local/sbin
#main.cf和master.cf文件所在的目录
config_directory=/usr/local/etc/postfix
#postfix的支援程序和守护程序所在的目录
daemon_directory=/usr/local/libexec/postfix
#属于postfix队列和守护程序的unix系统帐号
mail_owner=postfix
                                                                                                                           
#邮件系统在inter网上的主机名
myhostname=example.net
#邮件系统在internet上的域名
mydomain=example.net
#本地邮件系统发送邮件显示的发送地址,默认域名
myorigin=$mydomain
#通过本地发送邮件的域名列表
mydestination=$myhostname,localhost.$mydomain
#是比陌生人更有特权的被信任的SMTP客户列表
mynetworks=127.0.0.0/8,10.101.0.0/16
#可选的去掉email地址的子域列表
masquerade_domains=$mydomain
#当不服从地址伪装的用户名和$masquerade_domains匹配时可选的列表?????
masquerade_exceptions=root,mailer_daemon,postmaster
#===================ldap================================================
#默认的邮件传送方式,virtual是虚拟方式
local_transport=virtual
#用来查询的本地接收邮件的名字或地址的数据表
local_recipient_maps=$virtual_mailbox_maps
#可选的用来查询匹配$virtual_mailbox_domains的所有地址的数据表
virtual_mailbox_maps=ldap:ldapsource
#包括信封信息的最大信息字节数
message_size_limit=10280000
#本地个人mailbox或maildir的最大空间
mailbox_size_limit=20480000
#为mailbox写入信息时邮件传送代理所查询的每个用户的ID的数据表
virtual_uid_maps=ldap:ldapuid
#虚拟传送方式将查询的用户组数据表
virtual_gid_maps=static:1001
#个人mailbox或maildir的最大空间
#virtual_mailbox_limit=ldap:ldapquota
virtual_mailbox_limit=51200000
#虚拟传送代理从$virtual_uid_maps查询到的结果和这个用户最小ID值将比较????
virtual_minimum_uid=500
#虚拟传送代理查询$virtual_mailbox_maps的路径,所需要的首部.??
virtual_mailbox_base=/var/mail/example.net/
#===================CYRUS-SASL2============
smtpd_sasl_auth_enable=yes
broken_sasl_auth_clients=yes
smtpd_sasl_application_name=smtpd
#===================LDAP===================
ldapquota_timeout=10
ldapquota_server_host=example.net
ldapquota_search_base=ou=mailaccounts,dc=example,dc=net
ldapquota_server_port=389
ldapquota_domain=example.net
ldapquota_query_filter=(&(mail=%s)(accountstatus=active))
ldapquota_result_attribute=quota
ldapquota_bind=yes
ldapquota_bind_dn=cn=postfix,ou=daemons,dc=example,dc=net
ldapquota_bind_pw=yoursecret
ldapuid_timeout=10
ldapuid_server_host=example.net
ldapuid_server_port=389
ldapuid_search_base=ou=mailaccounts,dc=example,dc=net
ldapuid_domain=example.net
ldapuid_query_filter=(&(mail=%s)(accountstatus=active))
ldapuid_result_attribute=uidnumber
ldapuid_bind=yes
ldapuid_bind_dn=cn=postfix,ou=daemons,dc=example,dc=net
ldapuid_bind_pw=yoursecret
ldapsource_timeout=10
ldapsource_server_host=example.net
ldapsource_server_port=389
ldapsource_search_base=ou=mailaccounts,dc=example,dc=net
ldapsource_domain=example.net
ldapsource_query_filter=(&(mail=%s)(accountstatus=active))
ldapsource_result_attribute=mailbox
ldapsource_bind=yes
ldapsource_bind_dn=cn=postfix,ou=daemons,dc=example,dc=net
ldapsource_bind_pw=yoursecret
#some basic restrictions for SMTP Doucmented in the postfix document
smtpd_client_restrictions=
smtpd_helo_restrictions=
smtp_sender_restrictions=
                                                                                                                           
#classic way to configure postfix to user Pop-before-smtp
        #permit_mynetworks,
#smtpd_reciplent_restrictions=
#        reject_non_fqdn_recipient,
#        check_client_access hash:/usr/local/etc/postfix/pop-before-smtp,
#        check_relay_domain,
#        reject_unauth_pipelining,
#        reject_unknow_sender_domain,
#        reject_unknow_receipient_domain,
#        reject_unauth_destination,
#        reject_invialid_hostname,
#        reject_non_fqdn_hostname,
#        permit
readme_directory = no
sample_directory = /usr/local/etc/postfix/sample/
sendmail_path = /usr/local/sbin/sendmail
setgid_group = maildrop
manpage_directory = /usr/local/man
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
queue_directory = /var/spool/postfix

论坛徽章:
0
3 [报告]
发表于 2005-01-22 17:40 |只看该作者

用pam_ldap+openldap作postfix的sasl认证详解

qmail.schema
http://www.zytrax.com/books/ldap/ape/qmail.html

论坛徽章:
0
4 [报告]
发表于 2005-01-22 17:41 |只看该作者

用pam_ldap+openldap作postfix的sasl认证详解

authldap.schema
http://www.tom.sfc.keio.ac.jp/~torry/ldap/data/authldap.schema

论坛徽章:
0
5 [报告]
发表于 2005-01-22 17:44 |只看该作者

用pam_ldap+openldap作postfix的sasl认证详解

在装postfix时可以选择courier-imap
装完后需要装/usr/ports/mail/courier-authlib/
然后在/usr/local/etc/authlib/修改
authdaemonrc加:
authmodulelist="authldap"

authldaprc改:
LDAP_SERVER             localhost
LDAP_PORT               389
LDAP_PROTOCOL_VERSION   2
LDAP_BASEDN             ou=mailaccounts,dc=example,dc=net
LDAP_BINDDN             cn=courier,ou=daemons,dc=example,dc=net
LDAP_BINDPW             yoursecret
LDAP_TIMEOUT            15
LDAP_MAIL               mail
LDAP_DOMAIN             example.net
LDAP_GLOB_GID           1001
LDAP_HOMEDIR            homeDirectory
LDAP_DEFAULTDELIVERY    defaultDelivery
LDAP_MAILDIRQUOTA       maildirQuota
LDAP_FULLNAME           cn
LDAP_CRYPTPW            userPassword
LDAP_UID                uidNumber
LDAP_DEREF              never
LDAP_TLS                0

论坛徽章:
0
6 [报告]
发表于 2005-01-22 17:51 |只看该作者

用pam_ldap+openldap作postfix的sasl认证详解

slapd.conf

allow bind_v2
                                                                                                                           
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
# postfix
include         /usr/local/etc/openldap/schema/qmail.schema
# courier imap
include         /usr/local/etc/openldap/schema/authldap.schema
                                                                                                                           
                                                                                                                           
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args
access to attr=userpassword,clearpassword
        by anonymous auth
        by self write
        by dn="cn=admin,dc=example,dc=net" write
        by dn="cn=courier,ou=daemons,dc=example,dc=net" read
access to attr=accountstatus
        by dn="cn=courier,ou=daemons,dc=example,dc=net" read
        by dn="cn=postfix,ou=daemons,dc=example,dc=net" read
#prevents users from viewing employeenumber
access to attr=employeeNumber
        by dn="cn=admin,dc=example,dc=net" write
        by * none
                                                                                                                           
access to *
        by dn="cn=admin,dc=example,dc=net" write
        by users read
        by self write
        by * read
database        bdb
suffix          "dc=example,dc=net"
rootdn          "cn=admin,dc=example,dc=net"
rootpw          yousecret
directory       /var/db/openldap-data
index   objectClass     eq

#end

1st.ldif
dn: dc=example,dc=net
objectclass: dcObject
objectclass: organization
dc: example
o: example
description: top level of directory

2nd.ldif
dn: ou=people,dc=example,dc=net
objectClass: top
objectClass: organizationalUnit
ou: people
                                                                                                                           
dn: ou=mailaccounts,dc=example,dc=net
objectClass: top
objectClass: organizationalUnit
ou: mailaccounts
                                                                                                                           
dn: ou=daemons,dc=example,dc=net
objectClass: top
objectClass: organizationalUnit
ou: daemons

3rd.ldif
dn:cn=courier,ou=daemons,dc=example,dc=net
objectClass:person
cn:courier
sn:courier
userpassword:yousecret
                                                                                                                           
dn:cn=postfix,ou=daemons,dc=example,dc=net
objectClass:person
cn:postfix
sn:postfix
userpassword:yousecret

4th.ldif
dn: uid=testone,ou=mailaccounts,dc=example,dc=net
uid: testone
mail: testone@example.net
gidNumber: 1001
mailHost: example.net
homeDirectory: /var/mail/example.net/testone/
mailMessageStore: /var/mail/example.net/testone/Maildir/
mailQuotaSize: 200000000
mailQuotaCount: 20000
objectClass: qmailUser
objectClass: CourierMailAccount
objectClass: person
userPassword: test
accountStatus: active
uidNumber: 1100
mailbox: testone/Maildir/
sn:: 6ZmI5bu65bmz
cn:: 6ZmI5bu65bmz
telephoneNumber: 782
telephoneNumber: 136

论坛徽章:
0
7 [报告]
发表于 2005-01-22 18:07 |只看该作者

用pam_ldap+openldap作postfix的sasl认证详解

由于schema的版本问题,quota 还需要调整才能使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP