分享
 
 
 

Sendmail SMTP SASL认证详尽指南

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

一:概述

在现代网络环境中,mail relay是个讨论得非常热烈的话题,如何在公司的邮件服务器上

允许外部用户或者移动用户进行mail relay则是人们关注的焦点,随着标准化的SASL认证

的出现并结合开放源软件Sendmail新版本中对SMTP AUTH的支持,问题已经逐渐变得明朗

而易于解决。

二:目的

本文的主要目的是要在任何一台linux系统上,不论是什么版本,我们将编译Cyrus-SASL

和Sendmail 8.11来使系统支持SASL的SMTP认证,详尽解释如何编译和实现该功能及相关

的问题。

三:环境

我所用的编译和测试环境是Redhat Linux 6.1和VA Linux 6.2.4,使用cyrus-SASL 1.5.24

和Sendmail 8.11.4。在Redhat Linux 7.1上已经不需要再编译,只需要生成自己的

sendmail.cf即可。

四:步骤

1. 从ftp://ftp.andrew.cmu.edu/pub/cyrus-mail下载最新的cyrus-sasl-1.5.24.tar.gz

放在/home/jephe目录下

#cd /home/jephe

#tar xvfz cyrus-sasl-1.5.24.tar.gz

#cd cyrus-sasl-1.5.24

#./configure --enable-login (默认配置不支持login认证机制,但对Outlook Express是必需的)

#make

#make install

这将自动安装所有的SASL库文件在/usr/local/lib/sasl/目录和头文件在/usr/local/include/目录,

但是Sendmail却在/usr/lib/sasl中寻找这些文件,因此最简单的办法就是创建符号链接,做下面的:

#cd /usr/lib

#ln -sf /usr/local/lib/sasl sasl

#cp /usr/local/lib/libsasl* /usr/lib

注意上面最后一步拷贝时把相关的符号链接文件也拷贝成了硬链接文件,再做下面的:

#cd /usr/lib

#rm -f libsasl.so libsasl.so.7

#ln -sf libsasl.so.7.1.8 libsasl.so

#ln -sf libsasl.so.7.1.8 libsasl.so.7

最后应该看上去象下面:

[jephe@smtp lib]$ ls libsasl* sasl -l

-r-x------ 1 root root 683 Jul 27 16:32 libsasl.la

lrwxrwxrwx 1 root root 16 Jul 27 16:32 libsasl.so -> libsasl.so.7.1.8

lrwxrwxrwx 1 root root 16 Jul 27 16:33 libsasl.so.7 -> libsasl.so.7.1.8

-r-x------ 1 root root 194079 Jul 27 16:32 libsasl.so.7.1.8

lrwxrwxrwx 1 root root 19 Jul 27 16:32 sasl -> /usr/local/lib/sasl

现在更改文件的许可权限

#chmod -R 500 /usr/local/lib/sasl /usr/local/lib/libsasl* /usr/lib/sasl /usr/lib/libsasl*

再编辑文件/etc/ld.so.conf,加下面的行

#/usr/lib/sasl

然后运行

#/sbin/ldconfig (不应该有任何错误警告显示)

2. 现在编译Sendmail,从www.sendmail.org下载最新的Sendmail.8.11.4.tar.gz也放于/home/jephe目录下

#cd /home/jephe

#tar xvfz sendmail.8.11.4.tar.gz

#cd /home/jephe/sendmail-8.11.4

放下面的行到devtools/Site/site.config.m4 (注意文件名不要弄错,用vi编辑新文件site.config.m4)

APPENDDEF(`confENVDEF', `-DSASL')

APPENDDEF(`conf_sendmail_LIBS', `-lsasl')

APPENDDEF(`confLIBDIRS', `-L/usr/lib/sasl')

APPENDDEF(`confINCDIRS', `-I/usr/local/include')

再用vi编辑一个新的配置文件放在cf/cf/config.mc,内容如下:(注意没有行号,此处的行号是

为了下面对每行进行解释的方便)

divert(-1) #

# Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.

# All rights reserved.

# Copyright (c) 1983 Eric P. Allman. All rights reserved.

# Copyright (c) 1988, 1993

# The Regents of the University of California. All rights reserved.

#

# By using this file, you agree to the terms and conditions set

# forth in the LICENSE file which can be found at the top level of

# the sendmail distribution.

#

#

1 VERSIONID(`$Id: generic-linux.mc,v 8.1 1999/09/24 22:48:05 gshapiro Exp $')

2 OSTYPE(linux)dnl

3 DOMAIN(generic)dnl

4 MAILER(local)dnl

5 MAILER(smtp)dnl

6 define(`confPRIVACY_FLAGS', `authwarnings,needmailhelo,novrfy,noexpn')dnl

7 define(QUEUE_DIR,`/var/spool/mqueue/q*')

8 FEATURE(`use_cw_file')dnl

9 FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl

10 FEATURE(`domaintable',`hash -o /etc/mail/domaintable')dnl

11 FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl

12 dnl FEATURE(`genericstable',`hash -o /etc/mail/genericstable')dnl

13 dnl GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')dnl

14 dnl FEATURE(allmasquerade)dnl

15 dnl FEATURE(masquerade_envelope)dnl

16 dnl MASQUERADE_AS(yourdomain.com)dnl

17 FEATURE(redirect)dnl

18 FEATURE(always_add_domain)dnl

19 FEATURE(`access_db')dnl

20 FEATURE(`blacklist_recipients')dnl

21 define(`confAUTH_MECHANISMS', `LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5')dnl

22 TRUST_AUTH_MECH(`LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5')dnl

23 DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl

24 FEATURE(`no_default_msa')dnl

25 DAEMON_OPTIONS(`Port=587, Name=MSA, M=Ea')dnl

注: 第6行 增强sendmail的安全性

第7行 使用多个邮件队列增加性能

第12-16行 此处被注释了,如果你需要这些高级设置你可以去掉前面的dnl来使用它,

但你必须清楚地知道你在做什么。

第20-25行 这些行最重要,因为它是用于SMTP AUTH的必须设置

现在你能编译Sendmail.

#cd /home/jephe/sendmail-8.11.4

#sh ./Build (如果你已经不是第一次编译,则要sh ./Build -c 清除上一次编译的内容)

#cd cf/cf

#sh ./Build config.cf

现在准备编译Sendmail,编译之前,请备份你原先版本的sendmail执行文件和配置文件,一般为

/usr/sbin/sendmail 和 /etc/sendmail.cf

#cd ../../

#sh ./Build install

#cp -f config.cf /etc/mail/sendmail.cf

#cd /var/spool/mqueue

#mkdir q1 q2 q3 q4 q5 ( 你可以随时创建更多的目录,只要以q开头即可被立刻当作队列目录使用)

#/etc/rc.d/init.d/sendmail restart

确信在编译过程中你能看见下面的行:

...-I /usr/lib/include -DNEWDB -DSASL

新版本的sendmail放所有的配置文件在/etc/mail下,你可能需要做下面的事情:

a. #cp /etc/aliases /etc/mail/aliases

b. #cp /etc/sendmail.cw /etc/mail/local-host-names

c. #/etc/rc.d/init.d/sendmail restart

现在,编译应该结束,试着运行下面的命令检查输出

#/usr/sbin/sendmail -d0.1 -bv root |grep SASL

你应该看到象下面的行

NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG

3. 准备设置SASL认证

用vi编辑新文件/usr/lib/sasl/Sendmail.conf放下面的行

pwcheck_method:pam

既然Redhat Linux普遍使用PAM,我们就用PAM 认证,后面再讲SASLDB方式的认证。

现在放下面的行到/etc/pam.d/smtp (用vi编辑新文件smtp)

#%PAM-1.0

1 #auth required /lib/security/pam_deny

2 #auth required /lib/security/pam_shells.so

3 auth required /lib/security/pam_pwdb.so shadow md5

4 auth sufficient /lib/security/pam_listfile.so item=user sense=allow file=/etc/m

ail/smtpsuperusers.allow

5 auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/mail

/smtpusers.deny

6 auth required /lib/security/pam_listfile.so item=group sense=allow file=/etc/ma

il/smtpgroup.allow

如果你有大量的POP3用户,且想使用与POP3同样的密码,则可使用PAM认证方式,上面的各行解释如下

第1行 如果你想禁止所有人mail relay时,则简单地去掉前面的注释即可

第2行 如果打开了,则如果用户的登录shell不在/etc/shells中,则禁止mail relay

第3-6行 使用PAM_listfile模块通过外部文件控制认证

第3行 必须包括此行来使用文件/etc/shadow密码认证,放在最前面使得任何用户首先必须通过

密码认证,再检查后面的规则

第4行 只要用户被列在文件/etc/mail/smtpsuperusers.allow中,则允许relay

注意这里用的是sufficient不是required,你必须放这一行在最前面,这样

只要检测到用户被列在该文件中,则不再往下检查,无论如何允许mail relay

第5行 如果用户列在/etc/mail/smtpusers.deny,一行一个用户名,则禁止relay

第6行 如果用户所在的组列在/etc/mail/smtpgroup.allow且不在/etc/mail/smtpusers.deny中,

则允许relay

现在可以用telnet来测试:

#telnet localhost 25

Trying 127.0.0.1...

Connected to test.domain.com.

Escape character is '^]'.

220 test.domain.com ESMTP Sendmail 8.11.4/8.11.4; Sun, 10 Dec 2000 17:56:54 -0800

EHLO localhost

250-test.domain.com Hello IDENT:root@test.domain.com [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-EXPN

250-VERB

250-8BITMIME

250-SIZE

250-DSN

250-ONEX

250-ETRN

250-XUSR

250-AUTH LOGIN PLAIN

250 HELP

quit

221 2.0.0 test.domain.com closing connection

Connection closed by foreign host.

你需要看见login和plain在那里,否则不能进行smtp认证。

Outlook Express使用LOGIN认证,Netscape Mail使用PLAIN认证,Foxmail 3.11 一般使用LOGIN认证。

既然上面这些我们最常用的邮件客户程序Outlook Express和Netscape Mail不支持加密的认证方式如

DIGEST-MD5和CRAM-MD5,那么我们最好也就不要enable加密认证方式,加密的认证方式必须要设置

pwcheck_method:sasldb,用PAM只能用于login和plain两种非加密方式。如果你的大多数客户都是outlook

Express和Netscape Mail用户,假设你的pwcheck_method设成PAM,但是又enable了加密认证,这样当邮件

客户端程序如The bat(支持cram-md5加密认证)向服务器连接进行认证时,它根据服务器端的可接受的认证

机制类型的响应而自动使用cram-md5认证,这样反而不能通过认证,因为你的pwcheck_method是PAM。然而,

如果你没有enable加密认证,则The Bat根据服务器的响应自动使用login的认证机制。也就是说,它会优先

使用加密的认证,只要服务器宣称支持的话。

(Foxmail 3.11宣称支持cram-md5,仍待测试)

下面说明SASLDB认证,当你仅有很少的用户,且想用另一个数据库不用/etc/shadow来验证,则可用

SASLDB的方式,在/usr/lib/sasl/Sendmail.conf中设置

pwcheck_method:sasldb

然后进行/usr/local/sbin以saslpasswd命令创建至少一个新用户,如

./saslpasswd jephe

Password: *******

Again (for verification): *******

这将创建文件/etc/sasldb,你不得不改变许可权限至400

#chmod 400 /etc/sasldb

然后可以检查哪些用户在数据库中

./sasldblistusers

user: jephe realm: smtp.domain.com mech: DIGEST-MD5

user: jephe realm: smtp.domain.com mech: PLAIN

user: jephe realm: smtp.domain.com mech: CRAM-MD5

如果有错误,检查/var/log/mailog和/var/log/messages.

现在再次用telnet检查,现在应该出现Digest-md5和cram-md5加密认证。

#telnet localhost 25

Trying 127.0.0.1...

Connected to test.domain.com.

Escape character is '^]'.

220 test.domain.com ESMTP Sendmail 8.11.4/8.11.4; Sun, 10 Dec 2000 17:56:54 -0800

EHLO localhost

250-test.domain.com Hello IDENT:root@test.domain.com [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-EXPN

250-VERB

250-8BITMIME

250-SIZE

250-DSN

250-ONEX

250-ETRN

250-XUSR

250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5

250 HELP

quit

221 2.0.0 test.domain.com closing connection

Connection closed by foreign host.

4. 设置你的Outlook Express and[1] [url=http://www.chinamx.com.cn/Article/os/Linux/200605/20060530123822_28675_2.html][2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有