在默认情况下,也就是安装完系统(Sendmail服务器)不做任何设置的情况下,则只能在本机上收发邮件,网络上(局域网或Internet)的任何其它主机不能向该SMTP服务器发送邮件。这往往并不能满足需要。
对于内部的邮件服务器或者相对简单的网络环境,允许发送邮件的用户的IP地址相对固定或者完全是内部IP地址,则配置非常简单。
允许其他机器使用邮件服务器发送邮件
若希望能实现发送,则需满足下面的任何一个条件即可(不需要同时满足):1. 发送者身份属于“本地或者被允许的发送者”;2. 接收者身份属于“本地或者被允许的接收者”。
/etc/mail/relay-domains
在配置文件/etc/sendmail.cf
中,指定了该文件的路径:
# Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains
/etc/mail/relay-domains
示例:
localhost.localdomain localhost 127.0.0.1 10.0.0
即在列表中出现的主机,可以使用本邮件服务器发送邮件。
/etc/mail/access
除了使用文件relay-domains
外,还可以使用access
文件确定允许relay的主机,在配置文件/etc/sendmail.cf
中,指定了该文件的路径:
# Access list database (for spam stomping) Kaccess hash -o /etc/mail/access.db
/etc/mail/access
示例:
localhost.localdomain RELAY localhost RELAY 127.0.0.1 RELAY 10.0.0 RELAY
access文件和relay-domains格式的区别在于access文件中,允许relay的主机名添加RELAY关键字。
其它的关键字还有:
OK
当有别的规则阻挡,仍旧允许
RELAY
允许转寄
REJECT
拒绝这个来源的信件
DISCARD
丢弃。这种情况下,邮件看上去是正常投递了,但是由于没有人接 受,邮件会自动地“消失”在网络中。
错误代码+任何其他字符串
将向发信者返回这个字符串作为出错信息。错误代码是R FC 822定义的标准出错代码。如: 550 We don like a spammer!
属于本地/被允许的发送者,则RELAY
如果在relay-domains
或者access
文件中列出的是域名,则对发送者的IP地址先查找/etc/hosts
文件(一般是如此,如果文件/etc/host.conf
采用默认配置的话),如果没有,再查找DNS。查找DNS的过程是:先做IP地址的反向DNS查找,如果能够反向查找出来,且查找出来的主机的域部分属于上面两个文件中列出的域名,再对该主机名做正向DNS查找,若查找出的IP地址(主机的A记录)与发送者IP地址相同,则允许relay邮件,这表明发送者属于被允许的发送者。
如果正反向解析不一致,则会在/var/log/maillog中记录一行警告信息说"may be forged"(可能被伪造的)。如果收信人也不在access文件列表中,则拒发邮件。
本地或者被允许的接收者,则RELAY
相对于发送者,这个就非常简单了。只要接收者的email地址的域部分被列在/etc/mail/relay-domains或者/etc/mail/access 文件中,邮件被允许接收。
对于移动用户的情况,往往网络拓扑复杂,设置/etc/mail/relay-domains
,或者/etc/mail/access
就不够了。
当前的解决办法有:
公司设置自己的拨入服务器,仅仅公司员工可以用自己的用户名和密码拨入后发送邮件.
SMTP-After-POP3方法, 修改POP3程序,拨到ISP后先收一次自己的信,POP3检测到收信者IP地址后再动态地加这个IP地址到relay-domains或者access文件中,允许relay默认半个小时.
sendmail 8.10加入了SMTP用户认证功能,发送邮件时提示输入用户名和密码后允许relay.
显然第三种方法是最理想的。
首先检查是否支持 SASL 认证:
#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF
如果出现了 SASL,则sendmail编译时编译了SASL模块,否则需要重新编译 SASL,
设置口令验证,需要修改宏文件 sendmail.mc,如下:
define(QUEUE_DIR,`/var/spool/mqueue/q*') TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl dnl define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info') dnl FEATURE(`no_default_msa') dnl DAEMON_OPTIONS(`Port=smtp,Name=MTA')dnl DAEMON_OPTIONS(`Port=25,Name=MSA,M=Ea')dnl
测试:输入如下命令
$ telnet localhost 25 Connected to localhost. Escape character is '^]'. 220 localhost.localdomain ESMTP Sendmail 8.11.6/8.11.6; Wed, 12 Feb 2003 16:38:34 +0800 ehlo localhost 250-xxxxxxxxxxxxxxxxxxxxxxxxx, pleased to meet you 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-SIZE 250-DSN 250-ONEX 250-ETRN 250-XUSR 250-AUTH LOGIN PLAIN 250 HELP auth login
文件:/usr/lib/sasl/Sendmail.conf
pwcheck_method:pam
既然Redhat Linux普遍使用PAM,我们就用PAM 认证。为了支持加密验证,则需要使用SASLDB方式的认证。
文件:/etc/pam.d/smtp
Copyright © 2006 WorldHello 开放文档之源 计划 |