Sendmail relay规则及配置文件用法汇总 sendmail配置

FreeBSD Sendmail配置外部SMTP中继完整指南 Sendmail作为经典MTA,其默认设计遵循RFC 5321端到端直连模型,不原生支持现代云SMTP服务所需的SASL认证与TLS加密。要实现与Gmail、SendGrid等外部SMTP中继的安全对接,必须突破base系统限制,通过Ports重新编译启用SASL和TLS模块,并采用环境变量注入凭据、强制STARTTLS握手、智能路由重写等关键技术手段。该方案兼顾协议合规性与生产安全性,适用于FreeBSD 10.1等长期稳定版本,是传统邮件网关接入云生态的核心工程实践。 阅读详情
Sendmail relay规则及配置文件用法汇总
推荐:Einstein  发表日期:2000年10月11日  阅读次数:390
--------------------------------------------------------------------------------

        第一部分  mail relay 规则详解
一. 软件环境:Sendmail 8.9.3

二. 默认情况下的relay规则

在默认情况下,也就是安装完系统(Sendmail服务器)不做任何设置的情况下,则只能在本机上收发邮件,网络上(局域网或Internet)的任何其它主机不能向该SMTP服务器发送邮件,若希望能实现发送,则需满足下面的任何一个条件即可(不需要同时满足):

1. 发送者身份属于“本地或者被允许的发送者”。
2. 接收者身份属于“本地或者被允许的接收者”。

也就是说,不管是邮件的发送者还是邮件接收对象只要其中之一属于本地或被允许的时候,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          ¦ Internet
  ¦windows PC¦ ----------->¦sendmail server¦
  (192.168.11.12) SMTP  (192.168.11.5)¦(1.2.3.4)
    (A)    发送邮件    (B)
  jephe.abc.com      sh.abc.com
        ( 图一 )
在内部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发送邮件到 someone@yahoo.com . 在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的话。
但是。接收者是someone@yahoo.com,域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 (具体路径靠你的定义)去扩展别名。

举个例子:
          Internet
-------------------------¦-------------------------
(eth0:1.2.3.4)¦    Beijing Telecom    ¦      ¦
  [SMTP server]    [SMTP server]  [SMTP server] [SMTP server]
  sh.abc.com    mail.abc.com  bj.abc.com  sz.abc.com
  (eth1:192.168.11.5)  (DNS)      ¦      ¦
    ¦  ____            ¦      ¦
  ____¦____¦_PC_¦          ___ __¦_____ _____¦______
    (LAN) ¦              (LAN)      (LAN)
      ¦(192.168.11.1)
    [mailhost]
       
          (图二)

假若公司abc.com在北京,上海和深圳有分公司,总部在北京,放一台mail 服务器在北京电信局,且其它各分公司,上海,北京,深圳都各自用专线连到当地的ISP。
所有外部进入发到someone@abc.com的邮件都首先经过存放在北京电信局的mail.abc.com
邮件主机,在该邮件服务器上的/etc/sendmail.cw中有一行abc.com,则发到@abc.com的邮件经过mail.abc.com时检查别名文件aliases.
若有三行如下:

shuser:shuser@sh.abc.com
bjuser:bjuser@bj.abc.com
szuser:szuser@sz.abc.com

则发到shuser@abc.com,bjuser@abc.com和szuser@abc.com的邮件分别被别名为shuser@sh.abc.com,bjuser@bj.abc.com和szuser@sz.abc.com,然后分发到各分公司的Sendmail SMTP
邮件服务器。

注意:Sendmail检查别名文件是不停地做检查直到不能再做为止。具体是这样的,象上面的文件中的的三行,如果mail.abc.com收到一封信是shuser@abc.com,发现abc.com在sendmail.cw中,则接收该邮件(为什么?因为接收者的email地址的域部分在sendmail.cw文件中则是本地接收者,relay规则第二点)
本地接收者则检查别名文件,别名到shuser@sh.abc.com,然后再把别名出来的email地名域部分,现在是sh.abc.com,与sendmail.cw中的列出的域比较,若仍符合则继续别名下去直到不能符合条件为止。

现在引出一个问题就是注意不要使得别名检查循环下去,象上面的情况下,若加sh.abc.com到sendmail.cw中则出现别名检查循环而出错。
现在,经过别名之后如何再发送邮件呢?一般的发送邮件过程是这样的:

若上面的服务器mail.abc.com收到一封发到shuser@abc.com的信,则先经过别名为shuser@sh.abc.com后

1. Sendmail请求DNS给出主机sh.abc.com的CNAME记录,如有,假若CNAME到shmail.abc.com,则再次请求DNS查找看是否有shmail的CNAME记录,直到没有为止
2. 现在我们假定没有任何CNAME记录存在,仍然是shuser@sh.abc.com.则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中设置的邮件地址为jephe@abc.com .为什么?

因为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

我们以上面图二中的最左边的上海部分的网络结构为例子来说明上面五个配置文件的适用规则和用法.你不用在意我举的例子中的网络环境,不管举什么例子,你只要搞懂了各个文件的在什么情况下适用就行.
重新画图如下:

-----------------Internet-----------------
  ¦ (1.2.3.4)
[SMTP server] sh.abc.com
  ¦ (192.168.11.5)
  ¦
  ¦    jephe.abc.com(192.168.11.12)
_____¦_____________________[myPC]______[shmail](192.168.11.1)____
      [shanghai internal LAN] shmail.abc.com   


  (图三)

        /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:jwu@sh.abc.com
jwu:jwu@yahoo.com
则当从[myPC]发送邮件到admin@public.sta.net.cn (outgoing server:sh.abc.com)时.这封信最终被发往哪里去了?

===>答: 一般情况下,最终应被发送到jwu@yahoo.com信箱中.为什么?
因为经过了两次别名检查.最后yahoo.com不在/etc/sendmail.cw文件中,故不再检查别名.直接发送到jwu@yahoo.com.

2.但不完全如此,在下面的情况下有例外(并非一定要做别名检查到底的).
若在/etc/mail/virtusertable中有下面的行
  @sh.abc.com %1@[192.168.11.1]
且 /etc/sendmail.cw中有
sh.abc.com
且/etc/mail/aliases中有一行
jwu: wat@yahoo.com

则发到jwu@sh.abc.com的信是解析到wat@yahoo.com还是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:jwu@sh.abc.com
jwu:wat@yahoo.com
则发到admin@public.sta.net.cn的信最终被交到哪里wat@yahoo.com还是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用法
跨越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]
则发到jwu@sh.abc.com的信去向是哪里?
===>答: 运用virtusertable规则,转变为jwu@[192.168.11.]后再发送到内部主机shmail

但a.如果没有/etc/mail/virtusertable则查找本地别名文件
b.如果/etc/sendmail.cw也没有或为空,则检查/etc/mail/mailertable发送到  jwu@sh.abc.com的信到内部主机shmail(192.168.11.1)

注:转变为jwu@[192.168.11.1]再发送和把发往jwu@sh.abc.com的信发到192.168.11.1主机是不一样的概念. 如果从邮件头信息来看,则前者是received by shmail[192.168.11.1] for jwu@[192.168.11.1];而后者是 received by shmail[192.168.11.] for jwu@sh.abc.com
结论:
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]
则发到jwu@yahoo.com的信最后发到哪里去了。
===> 转变为jwu@[192.168.11.1].
因为首先检查domaintable文件,jwu@yahoo.com被进行域替换为jwu@sh.abc.com.然后发现sh.abc.com在/etc/sendmail.cw中且在virtusertable中,则优先检查virtusertable中的规则转变邮件地址为jwu@[192.168.11.1]
假如上面的情况下,/etc/sendmail.cw中没有sh.abc.com行,则被域替换后则去检查mailertable中的规则,然后发送邮件地址jwu@sh.abc.com到192.168.11.1服务器。

无论在哪里情况下(指mailertable还是virtusertable),最后收件人收到信后检查邮件头信息时,在message header中的to:行都是jwu@sh.abc.com. 你在message header中找不到任何jwu@yahoo.com的信息,但在message envelope中的第一个received行中有jwu@yahoo.com的记录。

结论:
1.无论什么时候,domaintable都是优先检查,且没有任何附加条件,无条件检查,与sendmail.cw中是否有某域名无关。
2.一般地用来做域名更换,假如你的公司@abc.com可能被员工误打为abd.com,则放入下面的行到
/etc/mail/domaintable
abd.com abc.com
       
        /etc/mail/genericstable and /etc/mail/genericsdomain 的用法

作用: 重写发送者邮件地址,考虑下面的图四:

    [PC]A (jwu)
    ¦
    ¦          C    PPP Link
_____LAN_______________[SMTP/POP3 server]------- ISP-------Internet
        ¦    jwu@domain.com  @isp.net
        ¦    tom@domain.com  jephe@isp.net
      [PC]B (tom)          tomyh@isp.net


            (图四)
考虑上面的情况,在公司LAN上有两台PC,A 和 B.在内部的邮件服务器C上的帐号分别为jwu@domain.com 和 tom@domain.com,通过PPP方式连入ISP,且两个人在ISP上各自有自己的邮件地址jephe@isp.net和tomyh@isp.net.现在需要做到:
如果jwu要发送一个封件给tom,则希望被服务器C收到并直接在本地交付给B,且发送者邮件地址为jwu@domain.com,但若jwu要发送一个信给外部互联网上某用户,则希望被对方收到后的发送者邮件地址为jephe@isp.net,即在ISP上的邮件帐号。
====》则需要服务器C上的Sendmail能做到这一点。这就要用到genericstable 和genericsdomain.在下面的条件同时满足时才能做到。

先考虑不管是发送给tom还是互联网上某用户都更改为jephe@isp.net的情况:
1. jwu在自己的PC A机上的Outlook Express中设置客户端邮件地址为jwu@domain.com
2. 服务器C在/etc/mail/genericstable中设置下面的行
jwu  jephe@isp.net
3. 服务器C在/etc/mail/genericsdomain中有下面的行
domain.com
上述三个条件同时满足时,则jwu向C发信给任何人时,发送者邮件地址都重写为jephe@isp.net,同样的情况应用于tom.
假如要求发送给本地用户如tom时发送者邮件地址为jwu@domain.com,则没有基于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 Server]_______DDN_Link_____Internet
  (图五)

在SMTP服务器上设置下面的:
/etc/mail/genericstable
jwu  jwu@sources.com
/etc/mail/genericsdomain
test.com
如果该SMTP服务器从互联网上收到一封发送者邮件地址为jwu@test.com的信,则发送者邮件地址被重写为jwu@sources.com,且message envelope中的return address也是jwu@sources.com

结论:
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)
且发送者客户端设置了邮件地址为 jwu@yahoo.com.则经过了这台装有Sendmail的SMTP服务器时,发送者邮件地址被重写成jwu@domain.com
如果接收者是jwu@yahoo.com,且设置了FEATURE(allmasquerade),则也重写接收者地址为jwu@domain.com

再举个例子:
如果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: him@new.address.REDIRECT
所有发到旧的邮件地址的人将收到一个新邮件地址的通知消息.

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 someone@somedomain.com

原作者:Jephe 
来源:不详 
FreeBSD 10.1 下 Sendmail 对接外部 SMTP 的可信发信配置 邮件发送本质上是身份可信度的传递过程,现代邮箱系统(如Gmail、Outlook)依赖TLS加密、SASL认证、SPF/DKIM签名等机制验证发件方身份。在老旧系统如FreeBSD 10.1中,原生Sendmail默认缺乏这些安全能力,导致邮件被拒收或归入垃圾箱。通过配置Sendmail为Smart Host客户端,结合SASL认证与外部SMTP服务(如Mailgun、腾讯企业邮),可复用专业服务商的IP信誉、证书管理和投递反馈能力,实现合规、稳定、可运维的系统级告警邮件投递。本文聚焦于FreeBSD平台下 阅读详情

相关推荐

FreeBSD 10.1 下 Sendmail 对接外部 SMTP 的完整配置指南

SMTP(简单邮件传输协议)是互联网邮件投递的基础通信标准,其核心在于安全、可信的端到端传输。现代邮箱服务(如Gmail、Outlook、腾讯企业邮)强制要求TLS加密通道与SASL身份认证协同工作,否则拒绝接收——这并非技术限制,而是反垃圾邮件与零信任架构的必然要求。在FreeBSD这类强调稳定性的类Unix系统中,原生Sendmail虽语法古老,却因深度集成、可审计性强、版本兼容性高,成为对接外部SMTP服务的理想MSA(邮件提交代理)。本文聚焦Sendmail如何通过SASL凭据管理、TLS证书信任链

weixin_30666401的博客 765

Sendmail relay规则及配置文件用法汇总

第一部分 mail relay 规则详解 一. 软件环境:Sendmail 8.9.3 二. 默认情况下的relay规则 在默认情况下,也就是安装完系统(Sendmail服务器)不做任何设置的情况下,则只能在本机上收发邮件,网络上(局域网或Internet)的任何其它主机不能向该SMTP服务器发送邮件,若希望能实现发送,则需满足下面的任何一个...

weixin_34279061的博客 710

mailrelay:简单的邮件中继,可以接收未经身份验证的 SMTP 电子邮件(例如通过端口 25)并将它们中继到经过身份验证的启用 TLS 的 SMTP 服务器

邮件中继 mailrelay是一个简单的邮件中继,它可以接收未经身份验证的 SMTP 电子邮件(例如通过端口 25)并将它们中继到经过身份验证、支持 TLS 的 SMTP 服务器。 此外,它易于配置。 预构建的二进制文件可获得,适用于 Linux、MacOS、Windows、OpenBSD。 用例 一些较旧的设备,例如扫描仪、多功能打印机、RAID 卡或带监控的 NAS 盒,只能通过端口 25 发送没有任何身份验证或加密的电子邮件mailrelay可以将这些电子邮件发送到您的 Gmail、Fastmail 或其他提供商。 在本地 PC 或服务器上运行mailrelay并将您的设备(例如扫描仪)设置为向其发送邮件。 mailrelay可以为任何 Go 支持的平台编译,包括 Linux、MacOS、Windows。 加密 mailrelay使用 TLS 连接到您的 SMTP 提供商。

Sendmail relay规则及配置文件用法汇总 sendmail配置 (转)

Sendmail relay规则及配置文件用法汇总 sendmail配置 (转)[@more@]SendMail relay规则及配置文件用法汇总推荐:Einstein 发表日期:2000年10月11日 阅读次数:390--...

cuiji1279的博客 876

E-MailRelay:SMTP电子邮件代理和中继服务器-开源

E-MailRelay是一个简单的SMTP代理和中继MTA,用C ++编写,适用于Linux和Windows。 作为代理,所有消息都可以通过用户定义的程序(例如垃圾邮件过滤器)传递,该程序可以在消息通过时对其进行丢弃,重新寻址或编辑。

folium离线地图实战:从下载到部署的完整指南

本文提供了一份完整的folium离线地图实战指南。针对网络不稳定或内网环境下的地图应用需求,详细讲解了如何下载离线地图瓦片数据,并通过两种核心方法(直接替换URL与创建TileLayer)将其集成到folium中。文章还涵盖了部署优化、边界处理及资源本地化等关键步骤,帮助你构建完全脱离网络依赖的交互式地图应用。

weixin_29061041的博客 274

开源的邮件smtp代理程序mailrelay

来自github: https://github.com/wiggin77/mailrelay mailrelay is a simple mail relay that can take unauthenticated SMTP emails (e.g. over port 25) and relay them to authenticated, TLS-enabled SMTP servers. Plus it's easy to configure. Prebuilt binaries are av

技术、思维 2449

网络虚拟化介绍(OVS、DVS)

网络虚拟化概念网络虚拟化就是把网络层的一些功能从硬件中剥离出来,建立新的网络虚拟层;该虚拟层可以接管网络服务和配置,实现网络服务与物理层的解耦,打破物理资源限制;通过网络虚拟层能够在一个物理网络上模拟出多个逻辑网络,并且多用户在逻辑网络上相互隔离,保证网络安全网络虚拟化的特点隔离性:不同租户的流量相互之间不能互访;但是IP/MAC地址都可以独立规划可移动性:虚拟机可以跨二层/三层迁移,甚至可以跨广域网迁移(迁移前后虚拟机Vlan和IP地址都不会发生变化)可扩展性:逻辑网络的规模和数量可扩展。

m0_49864110的博客 1万+

sendmail的relay功能使用

公司机器都是内网ip,除特殊需要外,均无外网ip,但是有的内网机器上运行的应用需要调用本机的sendmail来发送邮件,无外网又发送不了,sendmail的relay功能就可以解决这个问题。我们需要一台具有外网权限的机器设置为server,其他需要发送邮件的内网机器均指向这台机器即可,量小的话,不需要单独一台具有外网ip的机器,放在线上具有外网权限的一台机器即可假如192.1...

weixin_33711641的博客 300

微信小程序网关逆向分析:从协议、签名到会话管理的安全架构剖析

在现代Web与移动应用开发中,API网关作为客户端与后端服务之间的关键通信枢纽,承担着协议转换、流量调度、安全防护与性能优化等核心职责。其工作原理通常涉及统一的请求路由、身份认证、参数校验与响应聚合。从技术价值看,深入理解网关机制不仅能帮助开发者构建更健壮、可扩展的微服务架构,还能为安全评估、性能调优与故障排查提供基础。在移动生态如微信小程序中,网关设计尤为关键,它需要处理微信特有的登录态、数据加密与防重放攻击等安全需求。本文聚焦于微信小程序网关的逆向分析方法,通过结合网络抓包与代码反编译技术,深入解析其通

weixin_29323493的博客 442

AI初识—LLM、Ollama、Llama都是些个啥?

LLM指的是大语言模型(Large Language Model),是一种基于深度学习的模型,能够理解和生成自然语言。它通过大量文本数据进行训练,具备了理解上下文、生成连贯文本和回答问题的能力。著名的LLM包括OpenAI的GPT系列和Google的BERT。在AI技术快速发展的背景下,LLM、Ollama和Llama代表了现代自然语言处理的不同方面。LLM为我们提供了强大的语言理解能力,Ollama为模型的部署和管理提供了便利,而Llama则在效率和多样性上不断推进。

小蜗牛的珍贵百宝箱 4628

什么是邮件转发(mail relay) (转)

什么是邮件转发(mail relay) (转)[@more@] 什么是邮件转发(Mailrelay) webmaster@Linuxaid.com.cn">技巧管理员(2000-12-24 10:18)〖ti...

csd3176的博客 746

FPGA实战:用Verilog实现Costas环载波同步(附Vivado2019.2仿真步骤)

本文详细介绍了如何在FPGA上使用Verilog实现Costas环载波同步,包括核心原理、Vivado2019.2工程配置、代码实现及仿真验证。通过正交下变频、相位误差检测和环路滤波等关键模块的设计,帮助开发者掌握数字通信系统中的载波同步技术,并提供了实用的调试和优化技巧。

k0l1m2n3o的博客 134

suse配置sendmail

根据图19-1的流程分析可知,MTA主要的功能就是收信与信件转发,即Relay,上一小节提到收信的部分主要与监听接口以及主机名称有关,那能否应用Relay的功能呢?这就是本小节所需要了解的内容。在SendMail的默认情况下只有SendMail服务器本机(localhost)可以进行信件转发,其他任何客户端都无法使用这台MTA。也就是说,除非您在这台MTA上使用Mail指令,或者使用X Window内的MUA来发信,其他的非本机用户都没有应用Relay的能力。那么这台MTA还有什么用途呢?所以,需要针对客户

njhwwgc的专栏 4162

Anomalib实战指南:从零开始构建自定义异常检测数据集

本文提供了一份详细的Anomalib实战指南,指导用户从零开始构建自定义异常检测数据集。文章深入解析了数据准备的核心步骤、目录结构规范,并对比了PatchCore与FastFlow等关键模型的适用场景。通过清晰的代码示例,手把手演示了环境配置、模型训练与推理评估的全流程,旨在帮助开发者快速掌握这一工业视觉异常检测利器,有效解决实际生产中的缺陷识别难题。

weixin_29054245的博客 643

Unity3D实战:用EasyAR4.0稀疏空间地图打造AR导航应用(附完整代码)

本文详细介绍了如何使用Unity3D和EasyAR4.0的SparseSpatialMap功能构建AR导航应用。通过稀疏空间地图技术,开发者可以创建室内导航系统,解决传统GPS在室内环境中的局限性。文章包含完整代码示例,涵盖环境配置、地图构建、导航实现及性能优化等关键步骤,助力开发者快速掌握AR导航开发技巧。

t8u9v0的博客 1197

REDHAT 7.1 sendmail配置FAQ

REDHAT 7.1 sendmail配置FAQ1、如何获得sendmail:从REDHAT公司网站http://www.redhat.com或你的安装光盘上获得:sendmail-cf-8.11.0-8.i386.rpm使用rpm -ihv sendmail-cf-8.11.0-8.i386.rpm安装从http://www.sendmail.org获得sendmail.8.12.0.tar.g

解惑 4275

《YOLOv8-seg改进》专栏指导书册 &手把手创新教程

学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研;1)手把手教你如何训练YOLOv8-seg;2)模型创新,提升分割性能;3)独家自研模块助力分割;

会AI的学姐 3810

介绍sendmail中mail relay的规则

                          介绍sendmail中mail relay的规则 以前总结和写的一些教程的一些资料,一直没时间发布到博客上面,五一到了,终于有点时间发布啦!关于Linux上面还会有RHCE系列的学习笔记发表 一.什么是第三方的Mail Relay?  当一台邮件服务器处理一封邮件时,该封邮件的发送者(the sender)和接收者(the rec...

weixin_33692284的博客 1013

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

保姆级讲解 sendmail服务器的搭建、配置与管理

万字详细解析sendmail的基本功能和项目模拟搭建 不容错过

熙灿 WaitAyaka 优快云 B站 贴吧同名 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一文带你搭建属于自己的邮件服务器(基于sendmail)

一文带你搭建属于自己的邮件服务器(基于sendmail)

weixin_44151123的博客 6433

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

在RHFC3下配置sendmail服务器

 * 本文的目的是配置一个sendmail master服务器,以供自己学习研究使用* 硬件环境:一台PC,RH FC3* 192.168.1.21 是sendmail服务器,hostname 是atslxt001* 时间:2005年8月22日星期一* 作者:kilvon* 版本:2.0* 24-Aug-2005 添加了几个参数说明 1. 一般配置信息Backend process: sendma

kilvon的专栏 1251

Sendmail的安装配置

Sendmail的配置文件/etc/mail/sendmail.cf :Sendmail的主配置文件;/etc/mail/access :中继访问控制;/etc/mail/domaintable ;域名映射;/etc/mail/local-host-names ;本地主机别名;/etc/mail/mailertable :为特定的域指定特殊的路由规则;/etc/mail/virtusertable

ddawn的专栏 2463
上一篇: [安装]ISO文件解析
下一篇: 带SMTP认证功能的sendmail配置 sasl库
hem
hem
博客等级 码龄26年 19粉丝 287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值