四、POSTFIX+CYRUS-SASL 结合实现用户身份认证
1、cyrus-SASL简介
2、配置内容简介:
postfix——》/var/lib/sasl2/smtpd.conf
pwcheck_method : saslauthd
math_list :PLAIN LOGIN
3、服务脚本:saslauthd
1、启动SASL 服务
/etc/init.d/saslauthd
[root@37-test ~]# chkconfig --add saslauthd
[root@37-test ~]# chkconfig --list saslauthd
saslauthd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
[root@37-test ~]# chkconfig saslauthd on
[root@37-test ~]# chkconfig --list saslauthd
saslauthd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@37-test ~]# service saslauthd start
正在启动 saslauthd: [确定]
2、SASL配置文件
/etc/sysconfig/saslauthd
# Directory in which to place saslauthd's listening socket, pid file, and so
# on. This directory must already exist.
SOCKETDIR=/var/run/saslauthd
# Mechanism to use when checking passwords. Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam
表示支持的认证方式,默认为pam,建议为shadow(linux密码)认证,其他认证包括getpwent、kerberos5、rimap、ldap。
# Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line.
# DAEMONOPTS=--user saslauth
# Additional flags to pass to saslauthd on the command line. See saslauthd(8)
# for the list of accepted flags.
FLAGS=
3、查看postfix服务器端是否支持sasl
[root@37-test ~]# postconf -a
cyrus 就是表示支持sasl方式认证
dovecot
4、查看sasl的认证功能是否成功?
[root@37-test ~]# testsaslauthd -u gongbing -p 123123
0: OK "Success."
You have new mail in /var/spool/mail/root
5、为postfix开启基于cyrus-sasl的认证功能,为/etc/postfix/main.cf添加一下几行。(取消mynetworks的其他参数,只保留127.0.0.1/8,目的是实现sasl认证。)
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
#smtpd_sasl_application_name = smtpd
smtpd_sasl_path = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
6、创建文件sasl配置文件/usr/lib/sasl2/smtpd.conf(此为32系统使用,我的是64位,所以用下面的配置文件),并添加一下两行内容:
[root@37-test ~]# vim /usr/lib64/sasl2/smtpd.conf
log_level = 3
pwcheck_method:saslauthd
mech_list:PLAIN LOGIN 两种认证机制
7、验证是否实现认证成功
[root@37-test ~]# telnet 10.40.0.37 25
Trying 10.40.0.37...
Connected to 10.40.0.37.
Escape character is '^]'.
220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!(postfix配置文件的欢迎信息)
ehlo localhost
250-37-test.localdomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN 此行表示认证功能开启
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
smtp服务器的工作过程:
客户端要发送邮件先要和邮件服务器取得联系,通过helo指令来创建连接,然后通过mail from指令确定发送者信息、rcpt to 确定收件人信息、data确定邮件内容等情况。
可以通过
smtpd_helo_restrictions 参数来限定哪些用户可以发送helo指令。
smtpd_sender_restrictions 限定哪些用户可以发送mail from 指令
smtpd_recipient_restrictions 限定哪些用户可以发送rcpt to 指令,关键在于此参数。
smtpd_data_restrictions 限定哪些用户可以发送data指令
smtpd_client_restrictions 限定哪些用户可以发起服务器连接请求
访问表:postfix可以定义一个表,来定义哪些用户或者地址可以访问。
/etc/postfix/access——hash格式————/etc/postfix/access.db
postfix有多个内置的限制条件,如上面的permit_mynetworks和reject_unauth_destination,但是管理员也可以通过访问(查找)表(access map)来自定义限制条件,自定义访问表的条件通常使用check_client_access,check_helo_access,check_sender_access,check_recipient_access运行,他们后面通常跟上type:mapname格式的访问表类型和名称,其中,check_sender_access和check_recipient_access用来检查客户端提供的邮件地址,因此,其访问表中可以使用完整的邮件地址,如admin@magedu.com,也可以使用域名如,magedu.com,或者用户名的部分,如admin。
具体格式如:
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
smtpd_helo_restrictions = check_helo_access mysql:/etc/postfix/mysql_user
实验1:
禁止10.40.0.57这台主机通过工作在10.40.0.37上的postfix服务器发送邮件,访问表使用hash的格式。
a、创建/etc/postfix/access文件,并作为客户端检查的控制文件,并定义一下内容:
[root@37-test ~]# vim /etc/postfix/access
10.40.0.57 REJECT ACCES
b、将此文件转换成hash格式
[root@37-test ~]# postmap /etc/postfix/access
[root@37-test ~]# ll /etc/postfix/
总用量 280
-rw-r--r-- 1 root root 19594 2月 5 07:14 access
-rw-r--r-- 1 root root 12288 2月 5 07:15 access.db
c、配置postfix使用此文件对客户端进行检查,编辑/etc/postfix/main.cf文件。
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
d、查看测试结果
BingGongtekiMacBook-Pro:~ binggong$ telnet 10.40.0.37 25
Trying 10.40.0.37...
Connected to www1.dtedu.com.
Escape character is '^]'.
220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!
helo localhost
250 37-test.localdomain
mail from:gongbing@dtedu.com
250 2.1.0 Ok
rcpt to:gongbing
554 5.7.1 <unknown[10.40.0.57]>: Client host rejected: ACCESS(5)
data
实验2:
禁止通过本服务器向Microsoft.com域发送邮件,访问表使用hash格式
1、创建/etc/postfix/denydstdomains文件
[root@37-test ~]# vim /etc/postfix/denydstdomains
microsoft.com reject
邮箱地址的格式如下:
user@domain 用于匹配指定邮件地址
domain.com 用于匹配此域名结尾的所有邮件地址
user 用于匹配指定的主机名,用户名的邮件地址
动作的类型:
ok 接收匹配的地址
reject 拒绝匹配的地址
deffer 拒绝匹配的地址
2、转换文件格式
[root@37-test ~]# postmap /etc/postfix/denydstdomains
[root@37-test ~]# ll /etc/postfix/denydstdomains
-rw-r--r-- 1 root root 21 2月 5 07:25 denydstdomains
-rw-r--r-- 1 root root 12288 2月 5 07:26 denydstdomains.db
3、配置main.cf文件对客户端的检查,注意访问表之间的先后顺序。
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/denydstdomains permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
4、重新加载配置文件并检查
BingGongtekiMacBook-Pro:~ binggong$ telnet 10.40.0.37 25
Trying 10.40.0.37...
Connected to www1.dtedu.com.
Escape character is '^]'.
220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!
helo localhost
250 37-test.localdomain
mail from:aaa
250 2.1.0 Ok
rcpt to :gongbing@microsoft.com
501 5.5.4 Syntax: RCPT TO:<address>
data
554 5.5.1 Error: no valid recipients
实现sasl认证功能,这里实验条件默认情况下是不许发送邮件到外网,通过linux自带的用户账户及密码认证就实现了认证后发送邮件的功能。
[root@37-test ~]# telnet 10.40.0.37 25
Trying 10.40.0.37...
Connected to 10.40.0.37.
Escape character is '^]'.
220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!
helo 10.40.0.37
250 37-test.localdomain
mail from:gongbing
250 2.1.0 Ok
rcpt to:gongbing_shenlan@163.com
501 5.5.4 Syntax: RCPT TO:<address>
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@37-test ~]# telnet 10.40.0.37 25
Trying 10.40.0.37...
Connected to 10.40.0.37.
Escape character is '^]'.
220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!
auth login
334 VXNlcm5hbWU6 用户名为openssl base64位编码
Z29uZ2Jpbmc=
334 UGFzc3dvcmQ6 密码为openssl base64位编码
MTIzMTIz
235 2.7.0 Authentication successful
mail from:gongbing
250 2.1.0 Ok
rcpt to:gongbing_shenlan@163.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
ni hao a
.
250 2.0.0 Ok: queued as 368F887A004
quit
221 2.0.0 Bye
Connection closed by foreign host.
openssl base64编码方法:
BingGongtekiMacBook-Pro:~ binggong$ echo -n "123123" |openssl base64
MTIzMTIz
BingGongtekiMacBook-Pro:~ binggong$ echo -n "gongbing" |openssl base64
Z29uZ2Jpbmc=
本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1916983,如需转载请自行联系原作者