2014-08-20 13:03:19
来 源
中存储网
邮件服务器
sendmail的rpm包默认已经支持了cyrus-sasl认证方式,也就是说,sendmail会在cyrus-sasl的工作目录下自动创建相关认证配置文件,并监听25号端口,就不用你去手动自己建立配置文件和监听端口了。

1.软件准备
操作系统:Redhat5.0

邮件系统:
sendmail-devel-8.13.8-2.el5
sendmail-cf-8.13.8-2.el5
sendmail-doc-8.13.8-2.el5
sendmail-8.13.8-2.el5

m4-1.4.5-3.el5.1

pop3认证:dovecot-1.0-1.2.rc15.el5

smtp认证:

cyrus-sasl-lib-2.1.22-4
cyrus-sasl-2.1.22-4
cyrus-sasl-plain-2.1.22-4
cyrus-sasl-devel-2.1.22-4
cyrus-sasl-md5-2.1.22-4

安装上述所有的RPM包  #我安装的包相对比较多一些 有些可能不用安装 不过都装上没什么坏处:)#

sasl这里,我要说一句,网上有人说“sendmail-8.13已经包含cyrus-sasl的功能,所没必要再安装cyrus-sasl”
大哥大姐们,没有cyrus-sasl用什么做认证.....sendmail官方只是说,sendmail的rpm包默认已经支持了cyrus-sasl认证方式,也就是说,sendmail会在cyrus-sasl的工作目录下自动创建相关认证配置文件,并监听25号端口,就不用你去手动自己建立配置文件和监听端口了。当有请求进入25号端口的时候,sendmail会自动找到/usr/lib/sasl2/Sendmail.conf读取认证方法。下面我会详细解释

3.认证配置

pop3:
网上说修改/etc/dovecot.conf文件,将第17行的:#protocols = imap imaps pop3 pop3s的#去掉。其实不用,它默认已经启用了这些服务,除非你只想用dovecot-auth的认证,你可以改成protocols = none,否则不用改。
smtp:
注意,smtp稍微麻烦一下。
我讲下原理:
当用户请求进入25号端口后,sendmail调用cyrus-sasl的saslauthd进程,saslauthd要求对方输入本地系统用户的用户名和密码,当用户输入好后,saslauthd会去查找系统的/etc/shadow文件,密码确认无误,放行,告诉sendmail,这个用户合法,可以使用邮件服务来发邮件。
这时候你去/usr/lab/sasl2/下看看,sendmail已经做好了一个sendmail.conf文件,里面指明了:pwcheck_method=saslauthd,说明sendmail认证时就要调用saslauthd
所以要实现上述功能,就要设置cyrus-sasl的saslauthd,给它指定认证方式。
首先,进入/etc/sysconfig/,打开saslauthd的脚本,找到第7行的:
MECH=
等号后面不管写什么,我们都要改成:
MECH=shadow
保存
这样saslauthd才会去找shadow文件给用户做认证。
其实saslauthd还可以用自己的用户名和密码数据库做验证,但这样不方便,还要另外创建用户,不如直接用系统自身存在的用户名和密码。
4.Sendmail配置.
配置邮件服务器名称:
打开/etc/mail/local-host-names
加入你 @后面的邮箱地址。比如我这里是

那么,你要在local-host-names文件里的第二行添加:
inspur.com
保存
当然
local-host-names还可以设置邮箱别名,这个不多说,大家查文档看看。
改好后还要去你的dns服务器上,打上mx标志,添加A标记,用来解析dns名和地址。

具体步骤如下:

[root@localhost ~]# nslookup
> set type=mx
> inspur.com
Server:         10.100.1.12
Address:        10.100.1.12#53

Non-authoritative answer:
inspur.com      mail exchanger = 10 mailgate.inspur.com.

Authoritative answers can be found from:
inspur.com      nameserver = ns1.inspur.com.
inspur.com      nameserver = ns2.inspur.com.
ns1.inspur.com  internet address = 202.102.145.20
ns2.inspur.com  internet address = 202.102.182.92

配置sendmail.mc:
打开/etc/mail/sendmail.mc文件,
找到:
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
把前面的dnl注释去掉,变成:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
上面两句的意思是:
放行那些通过EXTERNAL, LOGIN, PLAIN, CRAM-MD5或DIGEST-MD5等方式验证的邮件用户,无视access文件中的设置。
confAUTH_MECHANISMS,确定系统支持的认证方式。LOGIN PLAIN 方式下,outlook用的多。
还不算完,找到:
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, )dnl
改成:
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, )dnl
这样所有ip地址都可以通过smtp端口使用我们的邮件服务器了。
-----------------------------------------------------------
这里要说一句,不要改
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
这句话!保持注释状态。
上面那句话,网上好多文章都说把Port=submission,改成Port=25,说是强制所有用户在25端口上做认证。
我不知道sendmail以前的版本是怎么样设置smtp认证的。sendmail8.13不用这么设置,这句话人家sendmail的意思是:取消注释后,一旦当25号端口被重定向或者被屏蔽,或者在25号端口打不开的情况下,马上使用587备用端口给用户做认证。
本来人家sendmail就已经打开了25端口(Port=smtp了已经),你却在这里还Port=25,把备用端口也改成25,这不是让sendmail的sm-client认
证进程和sendmail的主进程抢端口么....
-----------------------------------------------------------
到此为止,保存sendmail.mc
用m4重新生成sendmail.cf文件
# m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
启动dovecot进程:
/etc/init.d/dovecot start
启动saslauthd进程:
/etc/init.d/saslauthd start
启动sendmail进程:
/etc/init.d/sendmail start
把这些进程加入到启动脚本中去:
chkconfig dovecot on
chkconfig saslauthd on
chkconfig sendmail on
ok,所有设置全部完成,可以正常认证和收发邮件了。

测试下是否正常:

telnet  localhost 25
mail from:发件人地址
ricp to: 收件人地址
data

详细过程如下:

[root@localhost ~]# telnet  localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.13.8/8.13.8; Wed, 2 Apr 2008 20:35:12 +0800
mail from :gu_song_song@hotmail.com
250 2.1.0 gu_song_song@hotmail.com... Sender ok
rcpt to:pine1986@gmail.com
250 2.1.5 pine1986@gmail.com... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
HELLO
just test it
.
250 2.0.0 m32CZClF003739 Message accepted for delivery
quit
221 2.0.0 localhost.localdomain closing connection
Connection closed by foreign host.

[root@localhost ~]#

然后就可以去邮箱查看下是否收到邮件:) 如果可以收到 说明成功了 :)

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。