文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Sendmail Relay 规则及配置文件用法详解

Sendmail Relay 规则及配置文件用法详解

时间:2006-02-15  来源:panzifei

Sendmail relay规则及配置文件用法汇总  
 
 
 
第一部分 mail relay 规则详解  
一. 软件环境:Sendmail 8.9.3至8.12  
 
二. 默认情况下的relay规则  
 
在默认情况下,也就是安装完系统(Sendmail服务器)不做任何设置的情况下,则只能 
在本机上收发邮件,  
网络上(局域网或Internet)的任何其它主机不能向该SMTP服务器发送邮件,若希望 
能实现发送,则需满足下  
面的任何一个条件即可(不需要同时满足):  
 
1. 发送者身份属于“本地或者被允许的发送者”。  
2. 接收者身份属于“本地或者被允许的接收者”。  
3. 发送者通过SMTP AUTH认证(自Sendmail 8.10起)  
 
也就是说,不管是邮件的发送者还是邮件接收对象只要其中之一属于本地或被允许 
的时候,Sendmail邮件服务  
器才允许relay你的邮件.那么什么是“本地/被允许的发送者”呢?  
实际上只有一种,就是列在文件/etc/mail/relay-domains(默认安装后无此文件, 
你可以创建它)或者  
/etc/mail/access中的域名或者IP地址行,如:  
 
abc.com (/etc/mail/relay-domains)  
abc.com relay (/etc/mail/access)  
 
注:  
a.我们假定某公司域名为abc.com  
b.上面的两行含义相同,只是在不同的文件中所要求的语法不同而已,在 
/etc/mail/access文件中需要加上  
relay.  
===先讨论域名的情况:  
 
回到前面所说的何谓“本地/被允许的发送者”,如果在relay-domains/access文 
件中列出的是域名,  
则对发送者的IP地址先查找/etc/hosts文件(一般是如此,因为默认情况下对 
Linux服务器来说,查找DNS是  
先查找/etc/hosts文件看是否有此IP地址对应的主机域名,如无再做反向DNS查找 
,如果能够反向查找出来,  
且查找出来的主机的域部分属于上面两个文件中列出的域名,再对该主机名做正向 
DNS查找出的IP地址  
(主机的A记录)与发送者IP地址相同,则允许relay邮件,这表明发送者属于被允 
许的发送者。  
 
也就是说,先看/etc/host.conf文件中的定义,一般是这样:  
order hosts,bind  
multi on  
 
其中的order行指明先查/etc/hosts,再找DNS数据库。现在举个例子:  
如下图:  
  
 
在内部LAN上有一台windows PC,简称机器A,主机名为jephe.abc.com向一台连接内 
部LAN和Internet的  
一台Sendmail SMTP服务器,简称机器B发送邮件,地址分别为192.168.11.12 和  
192.168.11.5 ,  
SMTP服务器外部地址为1.2.3.4  
专线连接Internet.假定该公司域名为abc.com,机器B既是SMTP服务器也是DNS服务 
器,在此我们不考虑  
防火墙的设置,即在内部LAN方向上所有的机器对于192.168.11.5内部网卡接口可 
以自由进入(允许所有  
的通过192.168.11.5来自/去往192.168.11.0/24网段的TCP/IP包)。  
 
如果在机器B的/etc/mail/relay-domains或者/etc/mail/access文件中有一行  
abc.com  
或者  
abc.com relay  
当A向B发送邮件时,若B能在它的/etc/hosts中找到一行如  
192.168.11.12 jephe.abc.com  
则允许A向B发送邮件,也就是接收从A发来的所有邮件,不管是去向哪里,因为这 
种情况符合第一种relay  
规则,即发送者是被允许的发送者。此时不需要再查找DNS了,到此为止。邮件已 
经被接收。  
如果在/etc/hosts中找不到与192.168.11.12(发送者IP地址)对应的行,则再查找 
DNS,对192.168.11.12做  
反向解析,如果能在反向DNS数据库中找到对应192.168.11.12的主机记录,且找出 
来的主机名再从DNS中  
正向查找若两者一致,则允许relay,跟上面的情况一样,属于第一种被允许的 
relay规则。  
如:  
在DNS数据库中找到192.168.11.12对应的DNS主机名为jephe.abc.com.  
且又在@abc.com域的DNS中查找到对应于主机jephe的A类记录地址为192.168.11. 
12,则满足条件。  
发送者属于本地域,即被允许的发送者。  
 
需要注意的是,必须正反向解析都需要能解析且一致才行,否则不允许relay,且会 
在/var/log/maillog中  
记录一行警告信息说"may be forged"(可能被伪造的)  
 
但也并非所有记录"may be forged"信息到/var/log/maillog文件中的情况都不允 
许relay,也有的情况下  
虽然记录了一条警告消息说"may be forged",但邮件仍然被接收了,是在下面的情 
况下:  
 
例如: 在B机上/etc/mail/relay-domains中有下面两行  
abc.com  
yahoo.com  
 
[注:在此不再累述关于/etc/mail/access,因为前面已经说了在 
/etc/mail/relay-domains  
中的一行如  
abc.com  
相当于/etc/mail/access中一行  
abc.com relay  
故在下文中不再累述,只提/etc/mail/relay-domains或者/etc/mail/access.]  
 
若A向B发送邮件到 [email protected] . 在B机的/etc/hosts中没有相应的对应于 
192.168.11.12的记录行。  
且在B机(DNS服务器)上不能对IP地址192.168.11.12做反向查找,或者能做反向 
查找如查找出来为  
jephe.abc.com但在正向查找(对abc.com域的主DNS数据库中查找对应于主机 
jephe的A记录)中没有对应于  
主机jephe的A记录,或者有但找出来的IP地址不是192.168.11.12的话。  
但是。接收者是[email protected],域yahoo.com在/etc/mail/relay-domains中。 
则还是允许relay。  
但就会记录警告消息may be forged到/var/log/maillog文件中,这种允许属于第 
二种mail relay规则:  
接收者是被允许的接收者。因此,只要是正反向DNS不一致总会记录该警告消息到 
maillog中。  
Sendmail不是单纯地查看反向DNS解析,而后正反都要匹配,否则不relay,为什么 
如此?在后面我们会举  
例说明。  
 
由此我们引出===什么是“本地的或者被允许的接收者”?  
 
这个比较简单,也就是接收者的email地址的域部分被列在 
/etc/mail/relay-domains或者/etc/mail/access  
文件中,如上面的情况,发到@yahoo.com域的任何接收者都被允许接收。  
注意一个范围问题,如果发送者的域名(根据前面说的/etc/hosts或者正反向DNS 
一致的解析)被列在这两个  
文件中,则该发送者可以发送给任何人的邮件,都能被接收,但若不是这种情况, 
则只能发送到接收者的  
email地址的域名在这两个文件中的那些接收者。后者的情况接收对象的范围要比 
前者小。  
 
再引出另一个值得注意的问题,就是在文件relay-domains或者access中列出的域 
名既是针对发送者来说的,也  
是针对接收者而言的。对于发送者来说,检查/etc/hosts,和正反向DNS,对于接 
收者而言,仅检查接收者邮件  
地址的域部分。  
 
还有,对于第二种mail relay规则,还多一种情况,即:  
若接收者的域名部分被列在/etc/sendmail.cw中,则该接收者也属于本地接收者。 
  
(默认情况下,sendmail.cw是在/etc下,当然你也可以直接更改/etc/sendmail. 
cf中的sendmail.cw路径)  
然后检查别名文件aliases (具体路径靠你的定义)去扩展别名。  
 
举个例子:  
  
 
假若公司abc.com在北京,上海和深圳有分公司,总部在北京,放一台mail 服务器 
  
在北京电信局,且其它各分公司,上海,北京,深圳都各自用专线连到当地的ISP 
。  
所有外部进入发到[email protected]的邮件都首先经过存放在北京电信局的mail. 
abc.com  
邮件主机,在该邮件服务器上的/etc/sendmail.cw中有一行abc.com,则发到 
@abc.com的邮件  
经过mail.abc.com时检查别名文件aliases.  
若有三行如下:  
 
shuser:[email protected]  
bjuser:[email protected]  
szuser:[email protected]  
 
则发到[email protected],[email protected][email protected]的邮件分别被别名为  
[email protected],[email protected][email protected],然后分发到各分公 
司的Sendmail SMTP  
邮件服务器。  
 
注意:Sendmail检查别名文件是不停地做检查直到不能再做为止。具体是这样的, 
象上面的文件中的  
的三行,如果mail.abc.com收到一封信是[email protected],发现abc.com在 
sendmail.cw中,则接收该邮件  
(为什么?因为接收者的email地址的域部分在sendmail.cw文件中则是本地接收者 
,relay规则第二点)  
本地接收者则检查别名文件,别名到[email protected],然后再把别名出来的 
email地名域部分,现在是  
sh.abc.com,与sendmail.cw中的列出的域比较,若仍符合则继续别名下去直到不 
能符合条件为止。  
 
现在引出一个问题就是注意不要使得别名检查循环下去,象上面的情况下,若加 
sh.abc.com到sendmail.cw中  
则出现别名检查循环而出错。  
现在,经过别名之后如何再发送邮件呢?一般的发送邮件过程是这样的:  
 
若上面的服务器mail.abc.com收到一封发到[email protected]的信,则先经过别名为 
[email protected]后  
 
1. Sendmail请求DNS给出主机sh.abc.com的CNAME记录,如有,假若CNAME到shmail. 
abc.com,则再次请求  
DNS查找看是否有shmail的CNAME记录,直到没有为止  
2. 现在我们假定没有任何CNAME记录存在,仍然是[email protected].则Sendmail 
请求DNS给出sh.abc.com的  
MX记录,并得到一个这样的记录:  
sh MX sh.abc.com  
3. Sendmail请求DNS给出sh.abc.com的A记录(IP地址),返回值为1.2.3.4  
4. 与1.2.3.4建立SMTP连接,然后发送邮件.  
 
前面说明了在/etc/mail/relay-domains或者/etc/mail/access中有域名的情况,若 
只有IP地址呢?  
若  
 
192.168.11.12  
或者  
192.168.11.12 relay  
 
则直接就是单纯地指发送者机器的IP地址. 可以是内部网段的保留地址  
A类: 10.0.0.0--10.255.255.255 (10.0.0.0/8)  
B类: 172.16.0.0-172.31.255.255 (172.16.0.0/12)  
C类: 192.168.0.0--192.168.255.255 (192.168.0.0/16)  
也可以是外别真实IP地址,如果如此,由直接允许一个拨号上来的真实IP地址relay 
邮件.  
注意下面的两个问题:  
 
问题1: 公司对移动用户的考虑.  
在上面的图二中的左边部分实际就是图一.以图一为例.假若上海公司某员工不在公 
司里时,用笔记本拨  
上海电信163上网,该员工不能简单地设置发送邮件服务器为sh.abc.com(1.2.3. 
4).既使你的Outlook  
Express中设置的邮件地址为[email protected] .为什么?  
 
因为Sendmail根本不检查你的发送者邮件地址,而是你拨号上来的IP地址,但是你拨 
号上来的IP地址是动态  
随机分配的,而且由该IP地址反向解析出来的域名是ISP的域名,不是@abc.com ,实 
际上,在你拨号上来得到  
一个IP地址后向sh.abc.com发送邮件时,建立到1.2.3.4的25端口的TCP连接时, 
Sendmail只知道你的IP地址,  
然后在应用层收到数据后反向检查DNS查找该IP地址对应的域名,但是它是ISP的域 
名.与你的组织毫无关系.  
而且大多数ISP没有为拨号IP地址段设置反向DNS查找记录.  
 
故对那些拨到ISP的公司员工,需要用公司的服务器作为发送邮件服务器的话,公司 
的邮件服务器没法配置  
使得仅仅允许公司的员工做它做为发送邮件服务器,没法仅仅relay公司的在外的需 
拨到ISP的员工的信.  
 
当前的解决办法:  
a. 公司设置自己的拨入服务器,仅仅公司员工可以用自己的用户名和密码拨入后发 
送邮件.  
b. SMTP-After-POP3方法, 修改POP3程序,拨到ISP后先收一次自己的信,POP3检测 
到收信者IP地址后  
再动态地加这个IP地址到relay-domains或者access文件中,允许relay默认半个小 
时.  
c. sendmail 8.10加入了SMTP用户认证功能,发送邮件时提示输入用户名和密码后 
允许relay.  
 
问题2: 为什么必须正反向解析一致,为什么may be forged?  
假若一黑客组织操纵了一个ISP机构,如果你的Sendmail仅仅检查反向DNS解析出来 
的域名,如是你的公司域名  
则允许relay mail的话,则被黑客集团操纵的ISP机构可以把其所拥有的IP地址段在 
自己的反向DNS数据库中  
设置反向解析出来的域为你的公司域名,然后你的sendmail不加区别地relay它.认 
为该ISP的用户为自己的  
本地/被允许的发送者,则后果可想而知.  
 
上面介绍了Sendmail控制mail relay的几个文件:  
sendmail.cw  
access  
relay-domains  
aliases  
总结一下:  
<< Sendmail 怎样才会 relay your mail? >>  
条件一: 发送者是被允许的发送者:  
这要看文件/etc/mail/relay-domains或者/etc/mail/access两文件中列出的域名 
和IP地址行,  
对IP地址,就检查发送者的IP地址是否允许,若不符合,且有域名在里面,则检查 
/etc/hosts和正反向DNS  
解析看是否有对应记录,看反向解析出来的域名是否符合条件.  
条件二: 本地/被允许的接收者.  
同样地是要看/etc/mail/relay-domains或者/etc/mail/access文件,看接收者邮件 
地址的域部分是否  
列在上述两文件中,另外还多一项检查文件就是sendmail.cw,列在该文件中的域名 
被认为是本地接收者.  
检查别名文件进行扩展.  
 
其它情况都拒绝relay.  
 
第二部分 sendmail 配置文件  
 
为了解释所有的配置文件,下面列出的M4源文件enable了所有的本书提到的配置文 
件如下:  
=====================================  
include(`../m4/cf.m4')  
define(`confDEF_USER_ID',``8:12'')  
OSTYPE(`linux')  
undefine(`UUCP_RELAY')  
undefine(`BITNET_RELAY')  
 
define(`confAUTO_REBUILD')  
define(`confTO_CONNECT', `1m')  
define(`confTRY_NULL_MX_LIST',true)  
define(`confDONT_PROBE_INTERFACES',true)  
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')  
define(`ALIAS_FILE',`/etc/mail/aliases')  
define(`confPRIVACY_FLAGS',`authwarnings,needmailhelo,noexpn,novrfy')  
FEATURE(`smrsh',`/usr/sbin/smrsh')  
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')  
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')  
FEATURE(`domaintable',`hash -o /etc/mail/domaintable')  
FEATURE(`genericstable',`hash -o /etc/mail/genericstable')  
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')  
FEATURE(allmasquerade)  
FEATURE(masquerade_envelope)  
MASQUERADE_AS(mydomain.com)  
FEATURE(redirect)  
FEATURE(always_add_domain)  
FEATURE(use_cw_file)  
FEATURE(local_procmail)  
MAILER(procmail)  
MAILER(smtp)  
FEATURE(access_db)  
FEATURE(`blacklist_recipients')  
========================================  
所有的配置文件如下:  
/etc/mail/mailertable  
/etc/mail/domaintable  
/etc/mail/genericstable  
/etc/mail/genericsdomain  
/etc/mail/virtusertable  
 
我们以上面图二中的最左边的上海部分的网络结构为例子来说明上面五个配置文件 
的适用规则和用法.  
你不用在意我举的例子中的网络环境,不管举什么例子,你只要搞懂了各个文件的在 
什么情况下适用就行.  
重新画图如下:  
 
  
 
/etc/mail/virtusertable用法  
1.假如在sh.abc.com上/etc/sendmail.cw中有下面两行:  
public.sta.net.cn  
sh.abc.com  
且/etc/mail/aliases中有下面两行(假定/etc/sendmail.cf中路径为 
/etc/mail/aliases)  
admin:[email protected]  
jwu:[email protected]  
则当从[myPC]发送邮件到[email protected] (outgoing server:sh.abc. 
com)时.  
这封信最终被发往哪里去了?  
 
 
===>答: 一般情况下,最终应被发送到[email protected]信箱中.为什么?  
因为经过了两次别名检查.最后yahoo.com不在/etc/sendmail.cw文件中,故不再检 
查别名.直接  
发送到[email protected].  
 
2.但不完全如此,在下面的情况下有例外(并非一定要做别名检查到底的).  
若在/etc/mail/virtusertable中有下面的行  
@sh.abc.com %1@[192.168.11.1]  
且 /etc/sendmail.cw中有  
sh.abc.com  
且/etc/mail/aliases中有一行  
 
jwu: [email protected]  
 
则发到[email protected]的信是解析到[email protected]还是jwu@[192.168.11.1]呢?  
 
====>答: 解析到jwu@[192.168.11.1]  
 
再来看个例子:  
3.若还是上面的图三, /etc/mail/virtusertable 中有  
@sh.abc.com %1@[192.168.11.1]  
/etc/sendmail.cw中有  
sh.abc.com  
public.sta.net.cn  
/etc/mail/aliases中有:  
admin:[email protected]  
jwu:[email protected]  
则发到[email protected]的信最终被交到哪里[email protected]还是 
jwu@[192.168.11.1]?  
===>答: jwu@[192.168.11.1]  
 
结论:  
a.当接收者邮件地址的域部分在/etc/sendmail.cw中又在 
/etc/mail/virtusertable中时,  
优先检查virtusertable文件,应用该文件中的定义规则.(例子2)  
b.要应用virtusertable规则,则接收者邮件地址的域部分必须在/etc/sendmail. 
cw文件中存在(例子2和3)  
c.若接收者邮件地址的域部分在/etc/sendmail.cw文件中但不在virtusertable文 
件中有相应的定义  
则先只应用sendmail.cw中的定义去扩展别名,一旦扩展出的别名接收者邮件的域部 
分在virtusertable  
中有定义行时则决不再别名下去,马上运行virtusertable中的定义规则(例子3)  
 
 
/etc/mail/mailertable用法  
注意: 并不是只要邮件送到该服务器且接收得的域部分在mailertable中有relay 
定义就可以被relay,  
仍然需要满足文章前面提到的两个前提条件,athen与SH不一样之处就是athena上 
有/etc/mail/access定义  
relay所有发到[email protected]的邮件而SH没有。  
 
跨越DNS的MX的记录,优先于MX记录,可以与MX记录指定的主机设定不同.  
4.如果 /etc/mail/mailertable有  
sh.abc.com relay:[192.168.11.1]  
且/etc/sendmail.cw中有  
sh.abc.com  
且/etc/mail/virtusertable中有  
@sh.abc.com %1@[192.168.11.1]  
则发到[email protected]的信去向是哪里?  
===>答: 运用virtusertable规则,转变为jwu@[192.168.11.]后再发送到内部主机 
shmail  
 
但a.如果没有/etc/mail/virtusertable则查找本地别名文件  
b.如果/etc/sendmail.cw也没有或为空,则检查/etc/mail/mailertable发送到  
[email protected]的信到内部主机shmail(192.168.11.1)  
 
 
注:转变为jwu@[192.168.11.1]再发送和把发往[email protected]的信发到192.168. 
11.1主机是不一样的  
概念. 如果从邮件头信息来看,则前者是received by shmail[192.168.11.1]  
for jwu@[192.168.11.1]  
;而后者是 received by shmail[192.168.11.] for [email protected]  
 
结论:  
a. 优先级顺序是virtusertable>sendmail.cw>mailertable>DNS MX记录  
b. mailertable的运用不需要接收者邮件地址的域部分在sendmail.cw中存在.  
c. mailertable用来跨越DNS,优先于DNS的MX记录.  
 
/etc/mail/domaintable 用法  
在任何情况下,domaintable都是最优先检查的,作用有二:一主要是防止对自己 
公司的域名的误打,  
二是对自己公司新旧域名的替换。例子5如下:  
5. 若/etc/mail/domaintable中有yahoo.com sh.abc.com  
且/etc/sendmail.cw中有sh.abc.com  
且/etc/mail/virtusertable中有@sh.abc.com %1@[192.168.11.1]  
且/etc/mail/mailertable中有 sh.abc.com relay:[192.168.11.1]  
则发到[email protected]的信最后发到哪里去了。  
===> 转变为jwu@[192.168.11.1].  
因为首先检查domaintable文件,[email protected]被进行域替换为[email protected]
然后发现  
sh.abc.com在/etc/sendmail.cw中且在virtusertable中,则优先检查 
virtusertable中的规则转变  
邮件地址为jwu@[192.168.11.1]  
假如上面的情况下,/etc/sendmail.cw中没有sh.abc.com行,则被域替换后则去检 
查mailertable中的规则  
,然后发送邮件地址[email protected]到192.168.11.1服务器。  
 
无论在哪里情况下(指mailertable还是virtusertable),最后收件人收到信后检 
查邮件头信息时,在  
message header中的to:行都是[email protected]. 你在message header中找不到任 
[email protected]的信息,  
但在message envelope中的第一个received行中有[email protected]的记录。  
 
结论:  
1.无论什么时候,domaintable都是优先检查,且没有任何附加条件,无条件检查 
,与sendmail.cw中是否有某  
域名无关。  
2.一般地用来做域名更换,假如你的公司@abc.com可能被员工误打为abd.com,则 
放入下面的行到  
/etc/mail/domaintable  
abd.com abc.com  
 
/etc/mail/genericstable and /etc/mail/genericsdomain 的用法  
 
作用: 重写发送者邮件地址,考虑下面的图四:  
 
  
考虑上面的情况,在公司LAN上有两台PC,A 和 B.在内部的邮件服务器C上的帐号分 
别为  
[email protected] 和 [email protected],通过PPP方式连入ISP,且两个人在ISP  
上各自有自己的邮件地址[email protected][email protected].现在需要做到:  
如果jwu要发送一个封件给tom,则希望被服务器C收到并直接在本地交付给B,且发 
送者  
邮件地址为[email protected],但若jwu要发送一个信给外部互联网上某用户,则希 
望被对方  
收到后的发送者邮件地址为[email protected],即在ISP上的邮件帐号。  
====》则需要服务器C上的Sendmail能做到这一点。这就要用到genericstable 
 和  
genericsdomain.在下面的条件同时满足时才能做到。  
 
先考虑不管是发送给tom还是互联网上某用户都更改为[email protected]的情况:  
1. jwu在自己的PC A机上的Outlook Express中设置客户端邮件地址为  
[email protected]  
2. 服务器C在/etc/mail/genericstable中设置下面的行  
jwu [email protected]  
3. 服务器C在/etc/mail/genericsdomain中有下面的行  
domain.com  
上述三个条件同时满足时,则jwu向C发信给任何人时,发送者邮件地址都重写为  
[email protected],同样的情况应用于tom.  
假如要求发送给本地用户如tom时发送者邮件地址为[email protected],则没有基于  
 
M4的解决方案,你需要找到/etc/sendmail.cf中的下面行删除两行。  
S10  
R<@> $n errors to mailer-daemon  
R@ <@ $*> $n temporarily bypass Sun bogosity  
R$+ $: $>50 $1 add local domain if needed  
R$* $: $>94 $1 do masquerading <-- delete this line  
#  
# Header sender rewriting  
#  
S30  
R<@> $n errors to mailer-daemon  
R@ <@ $*> $n temporarily bypass Sun bogosity  
R$+ $: $>50 $1 add local domain if needed  
R$* $: $>93 $1 do masquerading <-- delete this line  
 
再举个例子,考虑下面的图五  
  
 
在SMTP服务器上设置下面的:  
/etc/mail/genericstable  
jwu [email protected]  
/etc/mail/genericsdomain  
test.com  
如果该SMTP服务器从互联网上收到一封发送者邮件地址为[email protected]的信  
,则发送者邮件地址被重写为[email protected],且message envelope中的return  
address也是  
[email protected]  
 
结论:  
a.当发送者邮件地址的用户部分和域部分被分别列在/etc/mail/genericstable和 
/etc/mail/  
genericsdomain两个文件中时,发送者邮件地址被重写为 
/etc/mail/genericstable中被定义的  
邮件地址.  
b.不管是从局域网发进来的还是从互联网上进来的,只要是经过Sendmail服务器处 
理时就检查规则  
 
第三部分 Sendmail Masquerading  
常用的几个伪装规则:  
1.MASQUERADE_AS(yourdomain.com)  
2.FEATURE(allmasquerade)  
3.FEATURE(masquerade_envelope)  
4.MASQUERADE_DOMAIN(mydomain.com)  
5.FEATURE(masquerade_entire_domain)  
 
MASQUERADE_AS(yourdomain.com) 指出其它所有的伪装规则起作用后伪装成哪个域 
名。  
默认情况下仅伪装from:行和reply to:行的邮件地址.  
 
FEATURE(allmasquerade) 伪装message header中的to:地址  
FEATURE(masquerade_envelope) 伪装message envelope部分的return address,当 
不能交  
付邮件并退回给发送者时会用到该地址.  
 
问题一:伪装在什么情况下发生?  
当下列条件同时满足时实现伪装:  
a. 客户端Outlook Express中的地址的域部分在/etc/sendmail.cw文件中,即为本 
地域.  
b. 客户端直接发送邮件到sendmail服务器或者是sendmail服务器收到某个从互联 
网进来的邮件  
,但from行指出的发送者邮件地址的域部分在/etc/sendmail.cw中  
也就是只要经过了这台Sendmail邮件服务器的话,  
=====>然后伪装发送者邮件地址的域部分为 MASQUERADE_AS(yourdomain.com) 中 
指定的域  
yourdomain.com  
 
举个例子:  
如果/etc/sendmail.cw中有一行  
yahoo.com  
且设置了MASQUERADE_AS(domain.com)  
且发送者客户端设置了邮件地址为 [email protected].则  
经过了这台装有Sendmail的SMTP服务器时,发送者邮件地址被重写成jwu@domain. 
com  
如果接收者是[email protected],且设置了FEATURE(allmasquerade),则也重写接收者 
地址为  
[email protected]  
 
再举个例子:  
如果MASQUERADE_AS(domain.com)被设置了,且设置了MASQUERADE_DOMAIN部分,则 
伪装整个域中  
的所有主机。例如设置了如下:  
MASQUERADE_AS(masq.com)  
MASQUERADE_DOMAIN(foo.org)  
MASQUERADE_DOMAIN(bar.com)  
FEATURE(masquerade_entire_domain)  
则*foo.org和*bar.com都被转化为masq.com,否则只有foo.org和bar.com被转化为 
masq.com.  
 
第四部分 常见问题处理方法  
 
1. 我有一个用户离开了公司,但仍然收到许多关于他/她的邮件,我怎么让别人知道 
此人已经使用  
新的邮件地址.  
===>加下面的行到M4宏配置文件中  
" FEATURE(`redirect')dnl "  
然后加下面的行到aliases文件中  
olduser: [email protected]  
所有发到旧的邮件地址的人将收到一个新邮件地址的通知消息.  
 
2.为什么我更改了上面各种配置文件后仍然不起作用?  
在任意配置文件更改后都要运行makemap,例如:  
#makemap hash mailertable < mailertable  
但是对于sendmail.cw和relay-domains文件的更改要用下面的命令重启Sendmail  
 
#killall -HUP sendmail  
对aliases文件的更改要运行  
#newaliases  
 
3. 我按要求配置了所有的文件,发现我仍然不能发送邮件.为什么?  
首先保证你的Sendmail后台正在运行.用#ps -aux | grep sendmail检查  
若在运行,再检查看你能否#telnet mailserver 25.若仍不能看能否#ping  
mailserver  
注意:sendmail连接在TCP的端口25上进行,且TCP连接是双向的,你要检查路由表,  
 
看能否对进来的一个TCP连接产生的回复包能正确地沿相反方向回复给发送者.  
 
4.我怎么检查一封邮件的发封过程?  
在Sendmail邮件服务器上执行下面的命令.  
# echo testing | /usr/sbin/sendmail -v [email protected]  
相关阅读 更多 +
排行榜 更多 +
合合合军团

合合合军团

策略塔防 下载
街头滑板

街头滑板

体育竞技 下载
武者生存

武者生存

体育竞技 下载