天天看点

马哥linux高薪中级-POSTFIX邮件服务(二)

四、POSTFIX+CYRUS-SASL 结合实现用户身份认证

1、cyrus-SASL简介

<a href="http://www.cnblogs.com/silenceli/p/4031262.html" target="_blank">Cyrus SASL介绍(翻译)</a>

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

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用来检查客户端提供的邮件地址,因此,其访问表中可以使用完整的邮件地址,如[email protected],也可以使用域名如,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

Connected to www1.dtedu.com.

220 Welcome to our 37-test.localdomain ESMTP,Warning: Version not Available!

helo localhost

250 37-test.localdomain

mail from:[email protected]

250 2.1.0 Ok

rcpt to:gongbing

554 5.7.1 &lt;unknown[10.40.0.57]&gt;: 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、重新加载配置文件并检查

mail from:aaa    

rcpt to :[email protected]

501 5.5.4 Syntax: RCPT TO:&lt;address&gt;

554 5.5.1 Error: no valid recipients

实现sasl认证功能,这里实验条件默认情况下是不许发送邮件到外网,通过linux自带的用户账户及密码认证就实现了认证后发送邮件的功能。

helo 10.40.0.37

mail from:gongbing

rcpt to:[email protected]

quit

221 2.0.0 Bye

Connection closed by foreign host.

auth login

334 VXNlcm5hbWU6 用户名为openssl base64位编码

Z29uZ2Jpbmc=

334 UGFzc3dvcmQ6 密码为openssl base64位编码

MTIzMTIz

235 2.7.0 Authentication successful

rcpt to:[email protected]

250 2.1.5 Ok

354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;

ni hao a 

.

250 2.0.0 Ok: queued as 368F887A004

openssl base64编码方法: 

BingGongtekiMacBook-Pro:~ binggong$ echo -n "123123" |openssl base64

BingGongtekiMacBook-Pro:~ binggong$ echo -n "gongbing" |openssl base64

本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1916983,如需转载请自行联系原作者

继续阅读