solaris8 x86上:终于实现smtp认证!搞定sendmail+sasl+qpopper

发表于:2007-06-09来源:作者:点击数: 标签:
[这个贴子最后由wzy9681在2002/12/1109:04am编辑] Solaris8中带SMTP认证的sendmail配置 使用的软件: Solaris8x86 Sendmail-8.12.6 cyrus-sasl-1.5.28 一、准备工作 1.首先要下载sasl库,该函数库提供了 安全 认证所需函数,下载地址是(ftp://ftp.andrew.cmu.

[这个贴子最后由wzy9681在 2002/12/11 09:04am 编辑]

Solaris8中带SMTP认证的sendmail配置
使用的软件:
Solaris 8 x86
Sendmail-8.12.6
cyrus-sasl-1.5.28

一、准备工作 
1.首先要下载sasl库,该函数库提供了安全认证所需函数,下载地址是(ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/ ,版本1.5.28,注意2.X 版本无法与sendmail结合,因为API还未做修改.
2.下载sendmail(http://www.sendmail.org),版本在8.10.0以上的sendmail才支持SMTP认证功能。
3.注意选择客户端电子邮件软件。并不是所有的客户端电子邮件软件都支持SMTP认证功能,几种常见的版本要求是这样的:Netscape Messenger 的版本要4.6以上、Outlook和Outlook Express要5.0版本以上、Eudora pro的版本要在4.3以上、Foxmail 的版本要在4.0以上,每一种软件的认证方法是不一样的,编译sasl库的时候和配置sendmail略有不同。这里就大家最常见的Outlook Express 5.0和Foxmail的设置方法介绍如下。 
二、安装sasl库 
1.解压cyrus-sasl-1.5.28.tar.gz到你选定的目录gunzip cyrus-sasl-1.5.28.tar.gz 
tar xvf cyrus-sasl-1.5.28.tar
2.安装sasl
cd cyrus-sasl-1.5.28
./configure --enable-login --with-pwcheck --disable-gssapi --disable-digest --disable-cram --disable-krb4 --enable-plain
#disable的那些solaris不支持的
make
make install
3.说明:
Outlook Expresss使用LOGIN的认证方法,sasl库缺省并不支持这种方式,所以要在生成配置文件时特别加入,另外,Outlook的口令验证方式也不是缺省的方式,所以也需要加入--with-pwcheck的选项。
4.新建目录/var/pwcheck
mkdir /var/pwcheck
        此目录供pwcheck命令使用,该命令是一个后台程序,负责检查用户的输入口令,
        以root权限使用shadow口令文件。
5.在/usr/lib/sasl目录下建立文件Sendmail.conf,加入如下一行:
pwcheck_method:pwcheck
如果该文件已经存在,直接修改即可。
到此,sasl库函数的安装就完成了。

三、编译和配置sendmail
1.解压sendmail软件到你希望的目录,进入sendmail-8.12.6目录。按如下步骤操作:
gzip sendmail.8.12.6.tar.gz
tar -xvf sendmail.8.12.6.tar
cd sendmail-8.12.6
2.进入devtools/Site/目录并创建site.config.m4文件
cd devtools/Site/
vi site.config.m4
在该文件中加入如下两行文字,把SMTP认证功能编译到sendmail中:
APPENDDEF(`confENVDEF',`-DSASL')
APPENDDEF(`conf_sendmail_LIBS',`-lsasl')
以下两行来自www.sendmail.org上对sun solaris 8的说明
APPENDDEF(`confMAPDEF', `-DLDAPMAP')
APPENDDEF(`confLIBS', `-lldap')
注意:行末没有空格,逗号前后没有空格。前后引号`'并不相同。
3. (可选)备份/etc/mail/sendmail.cf 和/usr/lib/sendmail的执行文件。
4.  回到sendmail-8.12.3目录,再进入sendmail目录,开始编译sendmail:(如果不是第一次编译,需要加入-c选项,sh Build -c清除以前的配置)
sh Build 
5.  进入sendmail-8.12.3目录下的 cf/cf/把与操作系统对应的.mc文件复制为sendmail.mc,这里选择solaris
cd ../cf/cf/
cp generic-solaris.mc sendmail.mc
6.  编辑sendmail.mc,加入你需要的FEATURE. 
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5')dnl
*dnl define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')
FEATURE(`no_default_msa')dnl
DAEMON_OPTIONS(`Port=25, Name=MTA')dnl
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
注意:FEATURE要加在MAILER语句的前面。
说明:
"TRUST_AUTH_MECH"的作用是使sendmail不管access文件中如何设置,都能relay那些通过LOGIN,
PLAIN或DIGEST-MD5方式验证的邮件。
"confAUTH_MECHANISMS"的作用是确定系统的认证方式。
"confDEF_AUTH_INFO"的作用是当你的计算机作为客户机时,
向另外一台有smtp认证功能的主机进行认证,用户和密码存放在auth-info文件中,在这个例子中并不需要这个功能,所以注释掉了。
7.  生成sendmail.cf文件
sh Build sendmail.cf
8.  把sendmail.cf安装到/etc/mail/sendmail.cf,submit.cf安装到/etc/mail/submit.cf;可以使用复制的方法,更简单的方法是在cf/cf/下运行:
sh Build install-cf
9.  由于sendmail安全的要求,需要建立以smmsp为名字的组和以smmsp为名字的用户,
具体参考sendmail/SECURITY文档:
groupadd smmsp
usradd -g smmsp smmsp
10. 回到sendmail-8.12.6目录,再进入sendmail目录,运行"sh Build install",完成最后的安装。或使用如下命令:
Make;make install
11. 现在基本上可以了, 重新启动机器或sendmail后运行下面命令测试sendmail:
telnet localhost 25
ehlo localhost
注意有没有以下的信息出现.
250-xxxxxxxx
250-xxxxxxx
250-AUTH LOGIN PLAIN
250-xxxxxx

可能会略有不同,不过你选定的认证方式AUTH LOGIN PLAIN一定要有的。如果显示没有问题,服务器端的配置你已经成功了。
如果没有出现上面的信息,请运行“sendmail -O loglevel=14 –bs”仔细检查问题所在。
12. 结束服务器端的配置之前,我们还要做一件事,运行pwcheck这个daemon程序,这样才能完成用户认证功能。“pwcheck &”该文件位于sasl的安装目录下,可将其复制到/usr/bin目录下。

四、Outlook Express 5.0 的配置
1.打开你的Outlook Express,修改你的账号属性,在服务器选项,选取我的smtp服务器需要认证选项,然后进入配置。
2.不要选取安全口令认证,sendmail并不支持这个选项。是选取使用pop3同样的口令还是选择另外输入用户和密码,这就看你的爱好和设置了,这不是关键。如果你在服务器上有一个真实账号,不妨选取使用同样的口令,如果没有账号,选用其他的用户口令同样可以。


 坚持向左 回复于:2002-12-06 15:03:07
好啊,正是我要的,折腾几天了,一直没有搞定

 sunmarmot 回复于:2002-12-06 15:24:12
好东东,支持一下

 iricyan 回复于:2002-12-06 15:30:13
支持,我已经收藏了,谢谢!

 YT 回复于:2002-12-07 05:22:06
发了2边啊?PFPF,YDYD

 tnnd 回复于:2002-12-07 09:45:57
不如qmail+checkpassword

 unix菜鸟 回复于:2002-12-07 10:55:21
谢谢!

 wzy9681 回复于:2002-12-07 17:18:36
但我发现,只有合法用户在本地网才可以发送。如果他们从外地上网,就不能发信!
这是怎么回事?

 YT 回复于:2002-12-07 22:32:13
relay-domains ?

 wzy9681 回复于:2002-12-08 12:05:41
跟relay-domains 有关吗? 这个文件应该怎么设置?我现在这个文件是空的.但本地可以发,外地却不行

 chenjn 回复于:2002-12-08 13:03:46
我编译sasl1.5.28怎么不正常呢?
错误信息如下:
gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../include -I/usr/local/include -Wall -W -g -O2 -c checkpw.c  -fPIC -DPIC
cc1: warning: changing search order for system directory "/usr/local/include"
cc1: warning:   as it has already been specified as a non-system directory
checkpw.c: In function `shadow_verify_password':
checkpw.c:534: warning: implicit declaration of function `getspnam'
checkpw.c:534: warning: assignment makes pointer from integer without a cast
checkpw.c:537: dereferencing pointer to incomplete type
checkpw.c:538: warning: implicit declaration of function `crypt'
checkpw.c:538: warning: assignment makes pointer from integer without a cast
checkpw.c:539: dereferencing pointer to incomplete type
checkpw.c: In function `passwd_verify_password':
checkpw.c:612: warning: implicit declaration of function `getpwnam'
checkpw.c:612: warning: assignment makes pointer from integer without a cast
checkpw.c:615: dereferencing pointer to incomplete type
checkpw.c:617: warning: assignment makes pointer from integer without a cast
checkpw.c:619: dereferencing pointer to incomplete type
make[2]: *** [checkpw.lo] Error 1
make[2]: Leaving directory `/home/chenjn/cyrus-sasl-1.5.28/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/chenjn/cyrus-sasl-1.5.28'
make: *** [all-recursive-am] Error 2


 laixi 回复于:2002-12-08 17:02:19
[这个贴子最后由laixi在 2002/12/08 05:07pm 编辑]

to:chenjn
sasl参数加起了没有阿
to:wzy9681
不会把,外网跟内网发信都一样阿,只要能连的到就可以了,不过我习惯内网不用验证

 chenjn 回复于:2002-12-08 17:51:34
参数肯定没有问题

 ewebboy 回复于:2002-12-08 18:28:37
jia ru jing hua!

 YT 回复于:2002-12-08 22:45:07
觉得是的啊
要是relaydomain里面没有你,你就只能给同事发e-mail啊。


 ewebboy 回复于:2002-12-08 23:34:23
 建议加入精华! 

 YT 回复于:2002-12-09 00:10:09
同意,并且支持!  

 wzy9681 回复于:2002-12-09 13:09:39
但是我的问题仍然没有解决。本地合法用户在外网时仍然没有办法发信。还是拒绝。
我现在又只好改回不验证的状态。好苦!
据说,smtp验证是最高级别,即使是access和relay-domains里面没有设置也可以,但我这里死活不行。

 wzy9681 回复于:2002-12-10 11:20:15
谁对这个有研究?帮我一把!

 wzy9681 回复于:2002-12-10 12:06:56
外网仍然有问题!救我!!!!!!!!!!!!!!!!!!!!

 jodgen 回复于:2002-12-10 12:48:37
[这个贴子最后由jodgen在 2002/12/10 12:49pm 编辑]

我已经配置了sendmail + qpoper,运行了好几个月了,现在能加上sasl吗?
我的系统是solaris 9 for sparc

 wzy9681 回复于:2002-12-10 14:26:43
当然可以的。sasl很安装简单,只要编译参数对救可以

 wzy9681 回复于:2002-12-10 15:02:43
终于搞定了。还是在mc文件里改了些东西

 wzy9681 回复于:2002-12-10 15:06:35
有点错误,在第二版里改正了

 agang 回复于:2003-08-12 14:46:10
to chenjn 你的gcc版本太低,要3.2.1以上才能编译正常,这个是gcc的bug

 bigbilly 回复于:2003-09-04 10:01:27
我正在裝sendmail 8.12.9 and cyrus-sasl-1.5.28 

當我運行cyrus-sasl-1.5.28 
./configure 後 


# ./configure 
loading cache ./config.cache 
checking host system type... i386-pc-solaris2.9 
checking for a BSD compatible install... config/insta 
checking whether build environment is sane... yes 
checking whether make sets ${MAKE}... ./configure: ma 
no 
checking for working aclocal... missing 
checking for working autoconf... missing 
checking for working automake... missing 
checking for working autoheader... missing 
checking for working makeinfo... missing 
checking for gcc... no 
checking for cc... no 
configure: error: no acceptable cc found in $PATH 

但我已經裝gcc 3.3 

教教我吧!!!!!!!!!!!!!!!!

 williamw2000 回复于:2003-09-29 00:35:52
wzy9681, you're good man!

原文转自:http://www.ltesting.net