sendmail.cf生成器说明(1)
发信人: albin (阿乐斌), 信区: LINUX
标 题: LINUX选修课讲义:sendmail.cf生成器说明(1)
发信站: 碧海青天 (Fri Jun 11 21:34:40 1999), 转信
版权声明:
本文内容为大连理工大学LINUX选修课讲义,欢迎大家转载,但禁止使用本材料进行
任何商业踉或赢利性活动。转载时请保留本版权声明。
作者:何斌武,hbwork@dlut.edu.cn,大连理工大学网络中心,April 1999.
URL: ftp://ftp.dlut.edu.cn/pub/PEOPLE/albin/
原著: Eric Allman
------------------------------------------------------------------------------
感谢我的导师钱飞教授(http://come.or.jp/~fei/)多年来对大工校园网建设的无私帮
助及对我的热心指导,在他的帮助下,大工校园网建设取得了一定的成绩,我也从他那学
到了很多,不仅是专业方面的知识,更多的是如何待人,如何作人。
--------------------------------------------------------------------------------
定制自己的sendmail配置文件sendmail.cf
一.M4 的简要介绍
Sendmail使用M4宏处理器来“编译”其配置文件。对于M4来说,最重要的是要知道
M4是基于流处理的,也就是说,M4并不理解行内容。因此在一些地方你可能看到类似于
类似于表示"delete through newline"的词dnl;在M4可通过使用dnl删除所有以dnl开始
的包括换行符的所有字符。在大多数情况下sendmail使用这一功能以避免在其输出中含
有过多的不必
要的空行。
其他重要的指令(directive)是define(A,B),可用此指令定义宏A的值为B。当读到这
些宏的时候将会进行宏扩展,但可使用对两个值均用单引号以防止扩展。如下所示:
define('SMART_HOST','smart.foo.com')
警告:M4的宏即使在注释行中也将进行扩展,如下行:
# See FEATURE(foo) above
在其输出结果中并不会以你所期望的形式出现,因为M4将会对FEATURE(foo)进行扩展,
这一情况同样适用于如下情况:
# And then define the $X macro to be the return address
因为define是M4的一个保留关键字。如果你想使用M4关键字则应用单引号将其包含起来
,如'like this'.
二、定义操作系统类型变量:OSTYPE
在定义文件中必须定义一个操作系统环境变量,否则配置文件的生成将会中断(puke).
有若干个操作系统环境变量可用,具体可到ostype目录下查看当前可用变量的列表。这一
变量将会更改象别名文件及邮件排队目录等的位置。这些文件中的一部分是彼此相同的。
在定义文件中OSTYPE必须在所有的MAILER定义之前。通常情况下,OSTYPE宏定义应
紧跟在版本(version)信息之后,而MAILER定义总是在定义文件的最后。
一般情况下操作系统定义写起来。他们可以定义如下变量(如所有的均使用默认值则
相应的ostype文件可以为空)。但因为所列出的已支持操作系统不象源代码支持系统那样
广泛,因此在源代码中可能并未包括相应的ostype文件。
变量名 说明(方括号中为默认值)
ALIAS_FILE [/etc/aliases] 文件格式的alias文件位置。可以使用
以逗号分开的文件名列表(但要确认使用引号将含有逗
号的值括起来,如:define('ALIAS_FILE','a,b'),将a,b作为alias文件的列表,如未引号
则define()只能看到一个"a")
HELP_FILE [/usr/lib/sendmail.hf] 此文件中含有对SMTP的HELP
命令进行响应时要列出的信息。
QUEUE_DIR [/var/spool/mqueue]邮件队列文件所在目录
STATUS_FILE [/etc/sendmail.st]此文件中含有状态信息
LOCAL_MAILER_PATH [/bin/mail]用于投递本地邮件的程序
LOCAL_MAILER_FLAGS [rmn]local mailer要用到的标志,永远包含标志lsDFM。
LOCAL_MAILER_ARGS [mail -d $u]在投递本地邮件时所传送的参数。
LOCAL_MAILER_MAX [undefined]如定义了此参数,则为此邮件服务器所能接收
的本地邮件大小。
LOCAL_MAILER_CHARSET [undefined]如果定义了此参数,则被转化为MIME格式的从
其他地址到local mailer的含有8位字符的信息将被标为此字符集。
LOCAL_SHELl_PATH [/bin/sh]用于投递经过管道处理的邮件的shell.
LOCAL_SHELL_FLAGS [eu]prog mailer用到的标志。在此标志中永远包含标志
lsDFM.
LOCAL_SHELL_DIR [$z:/]shell运行时所要查找的目录路径。
USENET_MAILER_PATH [/usr/lib/news/inews]用于提交news的程序名称。
USENET_MAILER_FLAGS [rlsDFMmn]usenet mailer的投递标志。
USENET_MAILER_ARGS [-m -h -n]usenet mailer的命令行参数。
USENET_MAILER_MAX [100000]usenet mailer所能接收的最大信息大小。
SMTP_MAILER_FLAGS [undefined]SMTP mailer附加标志。对所有基于SMTP的
mailer其默认标志为mDFMUX;基于esmtp的邮差(mailer)
加上'a'标志;而基于"smtp8"的邮差则加上'8'。
SMTP_MAILER_MAX [undefined]使用smtp,smtp8或esmtp邮差所能传输的信息最
大容量。
SMTP_MAILER_ARGS [IPC $h]传递给smtp邮差的参数。仅当您需要改变默认端口
时才需要更改此参数。
ESMTP_MAILER_ARGS [IPC $h]传递给esmtp邮差的参数。
SMTP8_MAILER_ARGS [IPC $h]传递给smtp8邮差的参数。
RELAY_MAILER_ARGS [IPC $h]传递给relay邮差的参数。
SMTP_MAILER_CHARSET undefined]如果定义了此参数,则被转化为MIME格式的从
其他地址到任一个smtp mailer的含有8位字符的信息将被标为此字符集。
UUCP_MAILER_PATH [/usr/bin/uux]用于发送uucp邮件的程序。
UUCP_MAILER_ARGS [undefined]
UUCP_MAILER_ARGS [uux - -r -z -a$g -gC $h!rmail ($u) ]
UUCP_MAILER_MAX [100000]
UUCP_MAILER_CHARSET [undefined]
FAX_MAILER_PATH [/usr/local/lib/fax/mailfax]用于提交FAX信息的程序。
FAX_MAILER_ARGS [mailfax $u $h $f]传递给FAX邮差的参数。
FAX_MAILER_MAX [100000]FAX所能接收的最大信息容量。
POP_MAILER_PATH [/usr/lib/mh/spop]pop邮差的路径名。
POP_MAILER_FLAGS [Penu]pop邮差附加标志。同时总是加上标志lsDFM。
POP_MAILER_ARGS [pop $u]传给pop邮差的参数。
PROCMAIL_MAILER_PATH [/usr/local/bin/procmail]procmail程序的路径名。此外
FEATURE(local procmail)也用到此参数。
PROCMAIL_MAILER_FlAGS [SPhnu9]加给Procmail邮差的标志。同时总是加上"DFM"标
志。但FEATURE(local procmail)不用此参数而用到参数
LOCAL_MAILER_ARGS.
PROCMAIL_MAILER_MAX [undefined]procmail邮差所接收的最大信息容量。
MAIL11_MAILER_PATH [/usr/etc/mail11]
MAIL11_MAILER_FLAGS [nsFx]
MAIL11_MAILER_ARGS [mail11 $g $x $h $u]
PH_MAILER_PATH [/usr/local/etc/phquery]phquery程序的位置。
PH_MAILER_FLAGS [ehmu]
PH_MAILER_ARGS [phquery -- $u]
CYRUS_MAILER_FLAGS [A5@]
CYRUS_MAILER_PATH [/usr/cyrus/bin/deliver] The progam used to deliver
cyrus mail.
CYRUS_MAILER_ARGS [deliver -e -m $h -- $u] The arguments passed to
deliver cyrus mail.
CYRUS_MAILER_MAX [undefined] If set, the maximum size message that
will be accepted by the cyrus mailer.
CYRUS_MAILER_USER [cyrus:mail] The user and group to become when
running the cyrus mailer.
CYRUS_BB_MAILER_FLAGS [undefined] The flags used by the cyrusbb mailer.
The flags lsDFMnP are always included.
CYRUS_BB_MAILER_ARGS [deliver -e -m $u] The arguments passed to deliver
cyrusbb mail.
三、定义域:DOMAIN
可以将所有于网域(DOMAIN)有关的定义写入一个文件,在定义文件中使用宏
DOMAIN来引用此文件。比如,在示例文件Berkeley域文件中包含了若干内部目标主机的定义。
UUCP_RELAY 这个主机接收UUCP格式的邮件。如果未定义,则所有的UUCP
必须直接相连。
BITNET_RELAY 这个主机接收 BITNET地址格式的邮件。如果未定义此变量
则.BITNET伪域格式的邮件不能工作。
DECNET_RELAY 接收DECNET地址格式邮件的主机。如果未定义,则.DECNET
伪域格式及node::user格式的邮件不能工作。
FAX_RELAY 接收到.FAX伪域邮件的主机。在定义文件中的fax邮差将会
覆盖此值。
LOCAL_RELAY 不赞成使用此项。这个主机将处理所有的不含有@domain的
邮件。如未设定此项,则假设这样的邮件由本服务器处理。
这允许您建立一个主控服务器,在此主机中存有整个公司
或部门的别名数据库。这一情况只适用于小型场合并且需要
有一些用户代理。
LUSER_RELAY 这一主机将处理所有的lusers, 即那些非本地帐号或别名但
其形式上却明显表明为本地名称的邮件。
所有这些可用"mailer:hostname"(mailer为内部邮差名,如uucp-new, hostname为
此邮差相应的主机名)或只用一个"hostname",后一种情况使用一个默认邮差类型(通常
为"relay",SMTP之变型)。
警告:如果你对自已的网域设定了一个通配符的MX记录,则在定义这些变量时应使
用以点结束的主机名,以免你发出的邮件又返回到自已的主机上。
必要时在域(domain)文件中也可以定义一个网域(使用"DD")并设定相应与此
域有关的特性。如果希望使用同一个邮件名称对你的主机进行伪装,可在此处使用
MASQUERADE_AS.
设定域文件不是必须的--尤其是你只使用一个单机并与其他场合相分离时就无须使用
此设置。使用此机制只是为了将所有于网域有关的信息放同一个文件中。
四、定义邮差:mailer
sendmail 8.8.6版所支持的邮差类型较以前的版本要少,因为当前的网络类型较以
前要简单。总的来说,在你的.mc文件的最后写入mailer定义,MAILER(stmp)永远位于
MAILER(uucp)之前--因为一些特性及定义可能修改其他邮差(mailer)的定义,如SMTP
邮差将会修改UUCP邮差的定义。
邮差类型 说明
local local及prog邮差。大多数情况下你需要此邮差除非要将你
所有的邮件中继到另一个主机。此邮差将自动包含。
smtp 简单邮件传输协议(Simple Mail Transport Protocol)邮
差。SMTP不能将主机隐藏在网关或其他相关细节之后;它
假设所有的主机均运行名字服务器。实际上此邮差定义了
四个邮差:smtp为到其他服务器的常规(旧格式)SMTP邮差,
esmtp为扩展SMTP,smtp8到其他服务器的SMTP邮件不进行
8位数据到MIME格式的转换(当然此时你已知道另一端的
服务器可进行完全的8位数据处理),relay则进行到SMART
HOST/LUSER RELAY/MAIL HUB的邮件传输。
uucp Unix-to-Unix Copy Program mailer.实际上此定义包括
了两个邮差:"uucp-old"(也称为uucp)和"uucp-new"(也称
为suucp).
usenet Usenet(network news) delivery. 如果指定了此邮差,
将在规则0中加入一个附加规则以实现将所有到用户
"group.usenet"的本地邮件转交给"inews"程序。应注意
这适用于所有的新闻组,因此也可能带来一些安全上的
问题。
fax FAX传输。这需要一定的专业知识并且是基于Sam Leffer
的HylaFAX软件。
pop Post Office Protocol
procmail 到procmail的接口。设计此接口主要为了用mailertables.
如一个常见的问题是“如何将一个指定网域的邮件转交给
一个用户”,如果定义了此邮差,则可以设定如下内容
的mailertable:
host.com procmail:/etc/procmailrcs/host.com
其中/etc/procmailrcs.host.com内容如下:
:0 # forward mail for host.com
! -oi -f $1 person@other.host
上面的设定将把所有的形式为(anything)@host.com的邮件
发往person@other.host.在procmail脚本中,$1是发送者
的名字,而$2则是接收者的名字。如果你同FEATURE(local
procmail)一起使用此邮差,则应先列出此特性。
mail11 DECnet mailll邮差,仅当你有从
gatekeeper.dec.com:/pub/DEC/gwtools取到的mail11程序
(当然要有DECnet)时才有用。此程序及邮差只支持Phase
IV DECnet;要支持Phase V还需一些其他程序。
phquery phquery program.
cyrus cyrus and cyrusbb mailers. The cyrus mailer deliver
to local cyrus user. This mailer can mke use of
the "user+detail@local.host" syntax, it will
deliver the mail to the user's "detail" mailbox
if the mailbox's ACL permits. The cyrusbb mailer
delivers to a system-wide cyrus mailbox if the
mailbox's ACL permits.
local mailer可以接收"user+detail"这样格式的邮件,在此格式中"+detail"并
不用于邮箱的匹配,它主要用于一些特定的本地邮件程序(可参见
FEATURE(local_procmail)). 如"eric+sendmail"和"eirc+sww"指的是同一个用户,
但是附加的,"sendmail"和"sww"可对用户进行邮件排序提供参数。
五、定义特性:FEATURE
可以使用宏"FEATURE"来申请一些指定特性。如在.mc文件中使用:
FEATURE(use_cw_file)
用上面的定义告知sendmail你需要读取文件/etc/sendmail.cw以获得类$w的值。特
性定义可有一个可选项参数---如:
FEATURE(mailertable, dbm /usr/lib/mailertable)
可用特性列表如下:
use_cw_file 读取文件/etc/sendmail.cw以取得此主机的别名。当你使用
MX记录将此主机定义为其他主机的邮件交换机时可能需要使用
此特性。如果这些主机名是静态的,在你的配置文件中使用
"Cw ..."可能更好一些。此文件名可通过
confCW_FILE重新定义。
use_ct_file 读取文件/etc/sendmail.ct以取得系统“信任”的用户名字,
这些用户可以使用-f设置其发信信封上的from地址而不产生
警告信息。可以通过confCT_FILE来重新定义此文件名。
redirect 拒绝所有到"address.REDIRECT"的信件并返回(发送者)如
下信息:"551 User mot local; please try
". 使用此特性你可以把那些已非本地的用户用其新地址加上一 个".REDIRECT"作为其别名。 nouucp 对UUCP地址格式的邮件不作任何处理。 nocanonify 不传递地址到$[...$]进行验证。通常这一特性只有在那些作 为邮件网关的场合或者其用户代理能自已进行地址验证时使用。 此外可能要用到"define('confBind_OPTS','-DNSRCH -DEFNAMES')" 来关闭正常地址解析作与些特性类似的工作。 stickyhost 如果设置此特性,则发往"user@local.host"的邮件将被标为 “粘贴(sticky)”,也就是说,本地邮件地址不与用户数据 库(UDB,User Database)进行匹配且不通过规则5(处理)。 当需要设置"user"和"user@local.host"不同的情况下可能 需要此特性,如设置一个清楚的由网域连接的一个名字空间。 在8.7以前的版本中这一默认设置,需通过nosticky来关闭之。 mailertable 包含一个用于覆盖到特定域路由(routing)的"mailer table". 此特性参数定义可以是一个关键词定义。如未指定任何参数, 其定义通常是: hash -o /etc/mailertable 在此数据库中的关键字必须是FQDN(fully qualified domain names)或者是以.开头的局部网域名,如"vangogh.CS.Berkeley.edu" 或".CS.BERKELEY.EDY". 其值定义必须是如下形式: mailer:domain 其中"mailer"是内部邮差名称,而"domain"则是信件发发往的 网域。这个映象不影响信息的标头内容。 domaintable 包含一个用于提供域名映象的"domain table".实际上此特性的 使用应局限于你自已的网域(domain).当改变你自已的域名时 可能有用(如你公司由oldname.com改为newname.com)。 此特性的定义可以是关键词定义,如未措定任何参数,其定 义值通常是: hash -o /etc/domaintable 在此表中的关键字必须是域名;其值是新的域名(完全域名)。 在domaintable中的任何定义都将影响到信息标头,也就是 说对这一部分的处理是在规则3中进行的。 bitdomain 查看指定表中的bitnet主机并试着将其转化为internet地址。 可以通过John Gardiner Myers发布的bitdomain程序建立此 表。此特性的定义可以是关键词定义,如未措定任何参数, 其定义值通常是: hash -o /etc/bitdomain.db 此表中的关键字是bitnet主机名,值则是主机相应的Internet 主机名。 uucpdomain 与UUCP hosts特性类似。默认映象定义是: hash -o /etc/uudomain.db 现已无现成工具生成此数据库。 always_add_domain 在本地发送邮件时也加上其主机域名。通常对非完全名称不加。 但如果你使用一个共享的信息存贮却未使用相同的用户命名 空间,则在本地主机上也应加上其主机名。 allmasquerade 如果使用了伪装(masquerading,使用MASQUERADE_AS),则此特 性将使接收者的地址也伪装为来自所伪装为主机。通常此地址 为本地主机的名称。虽然这对普通用户来说是正确的,但这 也可能破坏本地的别名。比如当你发给"localalias",早先的 sendmail会查找别名数据库并将此信件发往所有的接收者,但 在其发出的邮件中将含有标题"TO: localalias@masqueradehost". 当此别名不存在时将导致此申请失败。仅当你能确保在所伪装 的主机范围内,其整个命名空间替换了所有的本地主机命名。 limitd_masquerade 通常情况下$w所列出的所有主机将被伪装。如果使用了此特 性,则只对那些$m所列出的主机进行伪装。当你在同一个主机 上使用了多个其命名空间脱节的网域时此特性将会很有用。 masquerade_entire_domain 如使用了伪装且设置了MASQUERADE_DOMAIN,此特性将引起 地址重写,使所要伪装的网域整个被隐藏。所有含有被伪装 域名的主机用伪装域名(通常是MASQUERADE_AS)进行重写。 示例如下: MASQUERADE_AS(masq.com) MASQUERADE_DOMAIN(foo.org) MASQUERADE_DOMAIN(bar.com) 则*foo.org和*bar.com将被转换为masq.com。如未使用此特性, 只有foo.org和bar.com被伪装。 注: 只能对你管辖内的网域和其下层网域可使用此特性进行伪装。 masquerade_envelope 用此特性告知sendmail将信封和信件头中上的发送者和接收 者进行伪装。 genericstable 这一特性使对本地网域或$=G中所列出网域中起始(originating) 的特定地址在镜像中查找并转化为另一格式,这一格式可以改变域名和 用户名。这与userdb功能有些类似。用于伪装的相同类型地址也被进行 查找(???),如除非当allmasquerade和/或masquerade_envelope 特性使用时才仅对信件头的发送者地址(进行查找)。这些地址必须在 由宏GENERICS_DOMAIN或GENERICS_DOMAIN_FILE(与MASQUERADE_DOMAIN和 MASQUERADE_DOMAIN_FILE很类似)中所给出的名字列表中。 FEATURE(genericstable)的参数可以是其镜像定义;其默认镜像定义是: hash -o /etc/genericstable 此表中的关键字可以是完整的地址或非完全名称(先试前者);其值则是 相应的新用户地址。如果新的用户地址未包含域名则使用$j。应注意 的是被查找的地址必须是完全的地址。对于本地邮件,则必须使用特 性FEATURE(always_add_domain)以使其地址转变为完整的地址。 virtusertable 一个指定域格式的别名允许在同一个主机上使用多个虚拟域。比如说 如虚拟用户表含有如下内容: info@foo.com foo-info info@bar.com bar-info @baz.org jane@elsewhere.net 则到地址info@foo.com的邮件将发往地址foo-info,到info@bar.com 的邮件将被发往bar-info,而到域bar.com内的任何人的地址将会发往 jane@elsewhere.net. 如起始地址中的用户名将以如下形式以%1作为 传递: @foo.org %1@elsewhere.com 则表示someone@foo.org将发给someone@elsewhere.com. 在左(手)边的主机(foo.com,bar.com和baz.org)必须在$=w中。其 默认镜像定义是: hash -o /etc/virtusertable 可在FEATURE宏定义中用第二个参数指定一个新的定义,如: FEATURE(virtusertable, dbm -o /etc/mail/virtusers) nodns 关闭DNS的使用,除非你只运行UUCP这样的网络否则不应使用此特性。 nullclient 这是一个特殊情况--它生成一个除了支持将所有的邮件通过本地的基 于SMTP的网络转递到一个中心邮件HUB之外不含任何内容的配置文件。 其参数是此邮件HUB的主机名。 唯一可与nullclient一起使用的其他特性是"nocanonify"(这样可以 使非完全地址可通过SMTP连接进行发送;通常情况下地址将使用伪装 名字转变为完全邮件名称,此伪装名字默认值为邮件HUB主机的名字)。 在此特性使用是不应定义任何邮差。当然也不进行别名处理或转寄。 local_procmail 使用procmail作为本地邮差。这个邮差可以使用"user+indicator@ local.host"格式;通常情况下+indicator将被丢掉,但在默认情况下 将用-a参数传递给procmail. 此特性的参数是procmail的路径名,此 路径的默认值是PROCMAIL_MAILER_PATH。应注意的是这一特性对本地 邮差并不使用PROCMAIAL_MAILER_FLAGS或PROCMAIL_MAILER_ARGS;相 反它使用LOCAL_MAILER_FLAGS和LOCAL_MAILER_ARGS. bestmx_is_local Accept mail as though locally addressed for any host that lists us as the best possible MX record. 这会产生一些额外的DNS传输, 但对于小到中等信息流量的主机来说完全能正常工作。这一特性与使用通 配符的MX记录不相兼容。如果你对自己网域内的所有主机使用了通配符(*) MX记录,则不应使用这一特性。 smrsh 对到程序的邮件使用使用sendmail发行版所带的SendMail Restricted SHell (smrsh)而不是/bin/sh。这可以提高本地系统管理员控制对那些通过邮件 (方式)而运行程序的能力。如果对此特性加参数的话通常是smrsh的路 径;否则假设为/usr/local/etc/smrsh. 六、Hacks 某些功能我们不能称这为特性,为了与特性进行区别,将其放到hack子目录下并通 过HACK宏来调用。通常这些均与你的特定场合有关。本发行版包含了一个与BERKELEY 域有关的HACK "cssubdomain"(这使sendmail可以Berkeley.EDU或cs.Berkeley.EDU两种 方式来接收本地邮件;如将一个主机短时间内移到子域时即可使用此功能)。 七、特定场合配置:Site Configuration 注:这一部分内容实际上已相对陈旧,只所以保留本部分内容是为了向后兼容。如果 你执行新的安装则应使用mailertables. 应特别强调的是,对于新形式的UUCP_mailers 如uucp_uudom本部分内容并不工作。 八、调整规则集合:Tweaking Rulesets 对于更为复杂的配置,你可以定义特定的规则。宏LOCAL_RULE_3将产生用于规范名字 的一组规则。在此所作的任何修改均会在邮件头上反映出来。 一个常见的情况是将老的UUCP地址使用宏UUCPSMTP转换为SMTP地址。示例如下: LOCAL_RULE_3 UUCPSMTP(decvax, decvax.dec.com) UUCPSMTP(research, research.att.com) 将使"decvax!user"和"research!user"的地址分别转换为"user@decvax.dec.com" 和"user@research.att.com"。 同样这一定义也可以用于在数据库映象中查找主机: LOCAL_RULE_3 R$* < @ $+ > $* $: $1 < @ $(hostmap $2 $) > $3 此镜象应在LOCAL_CONFIG部分进行定义,示例如后面所示。 与规则3类似,可用LOCAL_RULE_0引入一个新的地址解析规则。比如你可以根据需 要加入新的规则用以解析通过MX记录所接收的主机名。如下所示: LOCAL_RULE_0 R$+ <@ host.dom.ain.> $#uucp $@ cnmat $: $1 < @ host.dom.ain.> 当有对cnmat.Berkeley.EDU的MX记录指向此主机时你可能需要上面的规则;这个 规则将捕捉到此域的信息并将其通过UUCP转发到目的地。 同样你也可以用LOCAL_RULE_1和LOCAL_RULE_2修改规则1和2,通常情况下这两个 规则集是空的。 此外还有一个很类似的宏LOCAL_CONFIG.这个宏可在固定选项设置之后但在规则定 义之前加入一些定义,可用于声用本地数据库镜像或其他任何东西。如下所示: LOCAL_CONFIG Khostmap hash /etc/hostmap.db Kyplocal nis -m hosts.byname 九、伪装及中继:Masquerading and Relaying 可以使用如下行将你的主机伪装为另一个主机: MASQUERADE_AS(host.domain) 这使得人此主机发出的信件将被标上来源于指定的主机host.domain,而不是$j. 常见的伪装是将自己的主机伪装为自己的子域(比如,我不可能伪装为一个MIT的域)。 这个行为可以被若干特性所修改;特别是masquerade_envelope,allmasquerade, limited_masquerade和masquerade_entire_domain. 所伪装成的名字不进行正常的验证,因此很重要的一点是你的一个真实名称,也就 是说是一个完整的主机名而不是别名(CNAME).但是如果使用了一个别名(CNAME),则接收 方可以对其进行完整性验证,因此不能通过这种方式来欺骗CNAME镜像。 通常被伪装的地址只是那些来源于此主机的地址(也就是说是非完全名称或者是在 $=w中所给出的本地域名)。可以通过如下方式扩大此列表: MASQUERADE_DOMAIN(otherhost.domain) 如上定义的作用是虽然所有到user@otherhost.domain的信件不会在本地进行发送, 但所有包含user@otherhost.domain的信件被中继时其地址将被重写为含有MASQUERADE_AS 的地址。在此定义中的参数可以是以空格分开的名字列表。 如果这些主机名是在一个文件中,则可以使用如下定义从此文件中读取主机名列表: MASQUERADE_DOMAIN_NAME(filename) 通常情况下只有邮件头的地址将被伪装。如还希望将信封地址进行伪装,则应使用: FEATURE(masquerade_envelope) 但总是有一些用户不应被伪装--也就是说,应该使用其内部名而不应是伪装后的地址。 Root即是一例。可以用如下定义增加此用户列表: EXPOSED_USER(usernames) 这将加入用户到类E中;同时你有可能需要如下行: FE/etc/sendmail.cE 你也可以将所有的非完全名字(不合格的,即那些不含@host的名字)中继到一个 中继主机上去。比如当你有一个中心邮件服务器时,你可以将其中继到此主机上,这样 用户就不用建立自己的.forward文件或别名。可以通过如下行实现此功能: define("LOCAL_RELAY",mailer:hostname) 当mailer为默认值"relay"时可以省略此参数。此外如果有一些用户你不想他们的邮 件被中继,如当你对其建有本地别名时就不希望对其邮件进行中继。root即是最常见的 一例,因为通常root被作为本地别名处理。可用如下行增加此用户列表: LOCAL_USER(usernames) 上面一行向类L中加入用户;实现类似功能也可用下行: FL/etc/sendmail.cL 在使用共享邮件缓冲区/var/spool/mail时,你可能需要所有进来的邮件都发往一个 中心邮件HUB上,对此可使用下行: define('MAIL_HUB',mailer:hostname) 与上面一样,"mailer"为默认值"relay"时可以省略。如果你同时定义了LOCAL_RELAY 和MAIL_HUB且使用了FEATURE(stickhost),使用非完全名称的邮件将发往LOCAL_RELEY 而其他用本地名称的邮件将发往MAIL_HUB. 在$=L中的所有邮件名将会在本地进行发送, 因此对这些用户你必须建立.forward文件或使用别名。 假设你在主机mastodon.CS.Berkeley.EDU上并且使用了FEATURE(stickyhost),则如下 组合的设置将会有如下效果: email sent to.... eric eric@mastodon.CS.Berkeley.EDU LOCAL_RELAY set to mail.CS.Berkeley.EDU (delivered locally) mail.CS.Berkeley.EDU (no local aliasing) (aliasing done) MAIL_HUB set to mammoth.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU (aliasing done) (aliasing done) Both LOCAL_RELAY and mail.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU MAIL_HUB set as above (no local aliasing) (aliasing done) 如果未使用FEATURE(stickhost)设置则LOCAL_RELAY和MAIL_HUB作用相同,只是 MAIL_HUB优先处理而已。 如果希望所有发出去的信件均通过一个中央中继节点统一处理的话,也可以定义 SMART_HOST。总结如下: .LOCAL_RELAY用于那些非完整的名字(如"eric") .MAIL_HUB用于那些由本地主机名组成的完全名称(如"eric@mastodon.CS.Berkeley.EDU") .SMART_HOST用于使用其他主机形成的完全名称。 但是我们应该清楚其他的中继(如UUCP_RELAY,BITNET_RELAY,DECNET_RELAY以及 FAX_RELAY)的处理要比SMART_HOST优先级高,因此如果你真的希望一切邮件均通过 一个独立的中央节点时则不应定义其他的中继--更好的方法是找到或建立一个能达到 此功能的最小配置文件。 为了防止不必要的主机名重复,保持邮件系统正常工作,最好在指定主机名时以 点结束。如下: define(`MAIL_HUB', `host.domain.') 注意结尾处的点 ---^ 十、加入新的邮差和规则集(Adding New Mailers or Rulesets) 有时你可能需要加入一个全新的邮差(Mailer)或规则集(ruleset).对此二者的定义 则应分别使用结构MAILER_DEFINITIONS和LOCAL_RULESETS。如下所示: MAILER_DEFINITIONS Mmymailers,... ... LOCAL_RULESETS Scheck_relay ... 十一、非基于SMTP的配置 主要如于如UUCP-ONLY或UUCP_primarily节点,本部分略。 12. 主机名定义:Who Am I 通常情况下宏$j自动定义为所在主机的完整网域名称(Fully Qualified Domain Name, FQDN). Sendmail 先调用gethostname然后再调用gethostbyname以得到你的主 机名。比如在有些情况下gethostname只返回主机名的基本部分(如"foo");而gethostbyname 返回FQDN("foo.bar.com"). 但有时(实际上很少如此),gethostbyname不能返回FQDN. 此时你应该用confDOMAIN_NAME来定义你的完整网域名称FQDN.通常其定义格式如下: Dmbar.com define(`confDOMAIN_NAME', `$w.$m')dnl 13. 定义邮差表(Mailertable) 如要使用FEATURE(mailertable),你必须创建一个外部的数据库,此数据库中含有 到不同网域的路由信息。 比如文本格式的mailertable文件内容如下: .my.domain xnet:%1.my.domain uuhost1.my.domain suucp:uuhost1 .bitnet smtp:relay.bit.net 通常此文件存在/etc/mailertable中,而其实际的邮差数据库则通过如下方式建立: makemap hash /etc/mailertable.db < /etc/mailertable 其语法很简单。所有左过的(LHS,Left Hand Side)不是以点开头的记录匹配所指定 的完整主机名,而以点开始的则指任何以此域名结尾的地址--即同以通配符*开始一样。 此匹配是按所能匹配的多少来完成的--比如说,在如上示例中虽然先列出了.my.domain ,但"uuhost1.my.domain"却要使用第二个进行匹配,因为后者更清淅。 ----未完待续----- -- [m[1;34m※ 来源:.碧海青天 bbs.dlut.edu.cn.[FROM: helius.dlut.edu.][m |