首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

邮件服务器

技术前沿 | Qmail | IMail | MDaemon | Exchange | Domino | 其它 | Foxmail | James | Kerio | JavaMail | WinMail | Sendmail | Postfix | Winwebmail | Merak | CMailServer | 邮件与开发 | 金笛 |
首页 > 邮件服务器 > Sendmail > 18.9 sendmail高级配置原语 > 正文

18.9 sendmail高级配置原语

出处:人民邮电出版社 作者: [美]Evi Nemeth Garth Snyder Trent R.Hein 时间:2008-4-27 3:19:37

18.9  sendmail高级配置原语

在接下来的这几小节中,我们将介绍更多的宏,以及用来修改sendmail默认行为的一些最常见的FEATURE宏。我们还将讨论sendmail配置过程中的一些策略问题:安全、保密、垃圾邮件、以及使用伪装和虚拟域来隐藏信息的技术。

18.9.1  FEATURE宏

利用FEATURE宏可以把来自feature目录的m4文件包括进来,从而启用几个常见的选项。在下面的讨论中,我们把FEATURE和sendmail的其他一些宏混在一起介绍,因为它们偶尔会纠缠在一起。当sendmail中首次加入m4配置的时候,对FEATURE宏的介绍就变成了我们这一章的很大一部分。现在,它又添加了那么多的功能,FEATURE宏几乎需要它自己的专门一章来介绍了。

FEATURE宏的句法是:

FEATURE(keyword,  arg,  arg,  …)

其中keyword对应于cf/feature目录下的文件keyword.m4,而这几个arg会传递给它。确定功能的列表请参考这一目录本身的内容或cf/README文件。在下面会介绍一些常用功能。

18.9.2  use_cw_file功能

sendmail的内部类w(因此名为cw,代表class name)包含这台主机要为之接受和投递邮件的所有本地主机的名称。一台客户机可能会把它的hostname、它的nickname和localhost都包括到这个类里面。如果正在配置的主机是您的邮件枢纽主机,那么这个类w中还应该包括要为之接受电子邮件的所有本地主机和虚拟域。

use_cw_file功能从文件/etc/mail/local-host-names中定义类w(过去把它称为sendmail.cw)。可以用confCW_FILE选项配置确切的文件名,这将在后面讨论。没有这项功能的话,sendmail只接受发给它正在运行的那台机器的邮件。传入邮件的服务器必须在local-host-names文件中列出它为之处理邮件的所有主机和域名。因为sendmail只在启动时读取.cw文件,所以如果修改了.cw文件,就必须向sendmail发送一个HUP信号才能让更改生效。

FEATURE(‘use_cw_file')

调用此功能并使用local-host-names作为数据来源的文件,下面是一个local-host-names文件的例子:

 
在这个例子里,这些项都是本地托管的虚拟域。

18.9.3  redirect功能

当有人离开单位时,您通常会转发他们的邮件,或者让发给他们的邮件带着一条错误消息弹回给发件人。redirect功能支持一种更文雅的弹回邮件的方法。如果Joe Smith从oldsite.edu毕业并来到newsite.com,那么可这样启用redirect:

FEATURE(‘redirect')

并把下一行:

smithj:  joe@newsite.com.REDIRECT
添加到别名文件中,这会使得发给smithj的邮件被返回给发件人,并带有一则错误消息,建议发件人尝试改用地址joe@newsite.com。这则消息本身并不会被自动转发。

18.9.4  always_add_domain功能

这项功能会让sendmail把本地主机名添加到不完整的本地目的地址上。例如,假设从lynda@cs.colorado.edu发邮件给本地用户barb和evi。如果没有always_add_domain,那么barb收到的邮件信头中就只把登录名作为发件人和收件人地址显示出来。如果打开了always_add_domain,那么在消息离开lynda的机器时,所有的地址都会变成完整的全名。

当您在机器之间共享缓冲区目录,而这些机器并不共享一个别名文件或不具有相同的passwd文件时(顺便提一句,这样的共享可能是不应该的),也适合使用always_add_domain。在给某个并非众所周知的别名或用户发邮件时,在源机器上就会让它带有完整的地址,因此就可以回复这封邮件了。

这项功能的另一个优点是,不完整的名字经常被当作垃圾邮件而被拒收。我们建议您一定使用这项功能(除非是您在发垃圾邮件!)。


如果您正在使用MASQUERADE_AS(参考18.9.11节),always_add_domain会添加您所伪装成的主机名,而不是本地主机名。如果本地主机上的别名文件或passwd文件不是MASQUERADE_AS主机上对应文件的子集,这种约定会导致出问题。

18.9.5  nocanonify功能

sendmail一般要验证一个地址的域名部分是否是一个完整的域名,而不是一个DNS CNAME。如果不是这样的话,sendmail会重写地址。这个过程称为规范化(canonification),通常要对主机名执行一次DNS查询来完成这个过程。nocanonify功能将不做重写,并推迟发送消息所必需的DNS查找。例如,某个网点有一台主邮件枢纽,而客户机器通过主枢纽来转发他们的所有邮件,则客户可能会用:

FEATURE(‘nocanonify')

来避免在本地执行DNS查找。在一则消息在本地站点内从一台机器传送到另一台机器的时候,sendmail并不跟踪确定是否完成了DNS查找—它不能这样做。nocanonify功能让您可以控制这些DNS查找的时机。

nocanonify还可以用于MSA/MTA方案中,这种方案可在非常大的邮件站点中使用。在这种情况下,由MSA完成所有的DNS查找,运行MTA的主枢纽机指定nocanonify。

您有时候想要避免开销可能会比较大的DNS查找操作,但是您又愿意对本地域做查找。您可以用CANONIFY_DOMAIN或者CANONIFY_DOMAIN_FILE宏,从nocanonify说明中扣除掉特定的一些域,这两个宏分别可以接收一个域的列表,或者一个文件作为参数。例如,下面两行:

FEATURE(‘nocanonify')
CANONIFY_DOMAIN(‘cs.colorado.edu  cs')
会推迟除了user@cs.colorado.edu或者user@cs形式的地址之外的DNS查找操作。这几个特别的宏是在8.12版sendmail中首次引入的。

8.9.6  表和数据库

sendmail有几个FEATURE使用一种称为“表(table)”的结构来推断出邮件应该传递到哪里。一张表就是一个路由、别名、策略或其他信息的文本文件,这些信息从外部用makemap命令转换为某种数据库格式,然后作为一个内部数据库用于sendmail的各种查找操作。虽然这些数据通常一开始是一个文本文件,但是并不要求一定这样,sendmail表中的数据可以来自DNS、NIS、LDAP或者其他来源。使用集中式的IMAP或POP服务器可以缓解sendmail找出用户是谁的麻烦,而且还省掉了下面讨论的一些表。后面的表18.10总结了可以用的表。

有两种数据库得到支持:dbm/ndbm库是大多数版本的Linux的标准;而Berkeley DB是一种更具可扩展性的库,它支持多种存储方案。数据库的选择必须在编译时指定。如果可以安装DB的话,我们推荐使用它,它比dbm快而且创建的文件较小。DB可以从sleepycat.com获得。

数据库映射类型有3种可用:

dbm—使用扩展的散列算法(dbm/ndbm);
hash—使用标准的散列法方案(DB);
btree—使用B-树数据结构(DB)。

对于sendmail中大多数要应用表的地方来说,数据库类型hash—默认的—是最佳选择。使用makemap命令从文本文件中构建数据库文件,由您指定数据库的类型和输出文件的基准名。数据库的文本版本应该出现在makemap的输入中,例如:

 #  makemap  hash  /etc/mail/access  <  /etc/mail/access

乍看起来,这个命令似乎有错,会让输出文件被一个空的输出文件所覆盖。但是makemap添加了一个合适的后缀,所以实际的输出文件是/etc/mail/access.db,因此实际上没有冲突。每次改变了文本文件的内容之后,都必须用makemap命令重构数据库(但是不需要向sendmail发送HUP信号)。

在大多数情况下,数据库的关键字使用最长可能匹配的方式。和任何采用hash处理的数据结构一样,输入的文本文件中项的顺序并不重要。期待将数据库文件用作参数的FEATURE会把hash默认为数据库类型,把/etc/mail/tablename.db默认为数据库的文件名。为了覆盖这样的处理方式,要么可以给makemap命令和FEATURE指定期望的类型,要么可以通过给变量DATABASE_MAP_TYPE定义其他的值来重新设置默认值,例如:

 define(‘DATABASE_MAP_TYPE',  ‘dbm')
为了使用新的access.db数据库,应该把下面的行添加到.mc文件中:
 FEATURE(‘access_db',  ‘hash  /etc/mail/access')   
因为这一行使用默认的类型和命名方案,所以可以只写为:
FEATURE(‘access_db')

您可以指定数据库的文件名,后缀(.db)可有可无,没有后缀更好。

每次修改文本文件后不要忘记用makemap重构数据库文件,否则改动不会生效。

我们在接下来的几小节介绍mailertable、genericstable和virtusertable这几个FEATURE。在介绍垃圾邮件的一节里介绍access_db。之所以根本不介绍user_db,是因为人们已经在反对使用它,它最后会被删除。

从8.12版的sendmail开始,所有的映射和类都能把LDAP作为它们的数据来源,所以您可以让sendmail联络LDAP服务器来决定邮件的路由选择,以及信头的重写处理。只要把LDAP当作第二个参数即可:

 FEATURE(‘access_db',  ‘LDAP')
这一行让access_db采用sendmail软件发布中的cf/sendmail.schema文件里所定义的默认LDAP方案。您还可以定义您自己的数据库方案,这要用到FEATURE指令的其他参数,参见cf/README文件了解详情。

18.9.7  mailertable功能

mailertable功能把寻址到特定主机或域的邮件通过一种特殊的邮寄程序重定向到替代的目的地。它在邮件从站点发出时起作用。mailertable功能只检查地址中的主机部分,而不检查用户部分。信封地址不会被重写,因此邮件的地址仍然是同一个用户,但是是通过另一个邮寄程序发给另一台主机。mailertable最初是为应付其他的邮件系统,比如UUCP、DECnet和BITNET而设计的,但现如今这些系统通常用来把邮件从一个网关主机重定向到一台内部服务器。

要使用一个mailertable,可以在.mc文件中包括下面这样一行:

FEATURE(‘mailertable')
在mailertable里的项采用的形式如下:
 old_domain    mailer:destination

在左边关键字前面的点(.)是一个通配符,它代表该域中的任意主机。只有主机和域名允许作为mailertable的关键字,用户名则不允许是它的关键字。右边destination的值可以是一个域,一个user@new_domain子句,或者甚至可以为空(null),此时将不修改邮件信头。mailer的值必须是在一个MAILER子句中定义过的一个邮寄程序的名称,参见18.8.4节。

举个例子,假如您使用MS Exchange作为域的内部邮件服务器,但是又不太愿意让它面对Internet。您可以在Internet上放一台Linux机器,作为您的邮件网关,然后在对所有的邮件做病毒扫描或者您愿意做的任何处理之后,转发给Exchange服务器。下面是能够达到上述目的的mailertable项,假定Exchange服务器有如下所示的内部IP地址:

 my-domain    esmtp:[192.168.1.245]
不过,就像我们会在18.10.1节看到的那样,这是一种中转(relaying)的形式。您还需要在access数据库中加上下面这行:
To:  my-domain  RELAY
允许转发所有给my-domain的任何用户的邮件。这样,就完成了上面的例子。

18.9.8  genericstable功能

genericstable功能(是指“generics table”,而不是“generic stable”)类似于给要发出的邮件起别名。例如,它可以把发给trent@atrust.com的邮件映射到trent.hein@atrust.com。被重写的是信头而不是信封。邮件投递不受影响,只有回复会受影响。

用于映射主机名的机制有几种,但只有genericstable可以在映射关键字中同时包括用户名和主机名。在这一节中稍后讨论的masquerade_envelope和allmasquerade功能也可以应用到genericstable中的地址上。

只有域在generics类才能用genericstable。要在generics类加入一个域,既可以在GENERICS_DOMAIN宏中列出它,也可以把它放入由GENERICS_DOMAIN_FILE宏所指出的文件中。

例如,为了配合数据库的默认值一起使用genericstable功能,可以把:

GENERICS_DOMAIN_FILE(‘/etc/mail/local-host-names')
FEATURE(‘genericstable')

添加到.mc配置文件中。在本例中,您为之接受邮件的任何主机都被包括进来了。启用genericstable功能会稍微降低sendmail的速度,因为要检查每个发件人的地址。

18.9.9  virtusertable功能

虚拟用户表支持传入邮件的域别名。这项功能允许在一台机器上存在多个虚拟域,这在Web主机托管站点中很常见。

虚拟用户表的关键字字段要么包含一个电子邮件地址(user@host.domain),要么包含一个域的说明(@domain)。值字段是一个本地电子邮件地址或者一个外部电子邮件地址。如果关键字是一个域,那么值可以把user字段作为变量%1传递,或者把邮件传递给其他用户。如果用户的说明采用user+details这样的形式,那么变量%2将包含details,而变量%3将包含+details。随便使用您自己愿意采用的方式。

让我们来看一些例子(我们已经加上了注释):

info@foo.com foo-info            # 送给一个本地用户
info@bar.com bar-info            # 另一个本地用户
joe@bar.com error:No such user # 返回一条出错信息
@baz.org jane@elsewhere.com     # 所有的邮件都给jane
@zokni.org %1@elsewhere.com     # 给域名不同的同一用户

这些数据映射左边的所有主机关键字都必须在cw文件/etc/mail/local-host-names(或者VirtHost类)中存在;否则,sendmail将尝试在Internet上寻找该主机并把邮件投递到那里。如果DNS把sendmail指回本服务器,您就会收到一则弹回的“local configuration error(本地配置错误)”消息。很遗憾,sendmail不能分辨出这种情况下的错误消息应该是“virtusertable key not in cw file(virtusertable关键字不在cw文件中)”。

实际上涉及的事件有下面几项。

DNS MX记录必须存在,以便首先把邮件传递到正确的主机。
然后,必须存在cw项,或者必须指定VIRTUSER_DOMAIN,允许本地机器接受该邮件(或指定等价的VIRTUSER_DOMAIN_FILE)。
最后,虚拟用户表必须告诉sendmail如何处理该邮件。

采用下面的这行调用这项功能:

 FEATURE(‘virtusertable')
本章后面18.10节中的例子使用virtusertable来实现虚拟主机托管。

18.9.10  ldap_routing功能

在别名、重写和篡改方面,我们最后介绍LDAP,即Lightweight Directory Access Protocol(轻量级目录访问协议)。对于传递电子邮件和接受虚拟域的邮件来说,LDAP(参见18.5.2节了解一般性的知识)可用来替代virtusertable。它还可以管理别名、映射和类。到8.12版的时候,它在邮递列表上也能做得像模像样。

要以这样的方式使用LDAP,必须在配置文件中包括几条语句,并且必须编译构建sendmail把对LDAP的支持包括进来。在.mc文件中需要下面几行:

define(‘confLDAP_DEFAULT_SPEC', ‘-h  server -b searchbase')
FEATURE(‘ldap_routing')
LDAPROUTE_DOMAIN(‘my_domain')

来告诉sendmail,您希望在传递寻址到指定域的传入邮件时,使用一个LDAP数据库。LDAP_DEFAULT_SPEC选项标识出LDAP服务器和数据库搜索的基准名称。

在下面的例子中,搜索基准是o=sendmai.com,c=US。如果在另一个自定义的端口(不是389)上运行LDAP,请把-p ldap_port#添加到LDAP_DEFAULT_SPEC中。

sendmail要用到LDAP数据库中两个标记的值:
mailLocalAddress用于传入邮件中的地址;
mailRoutingAddress用于发送邮件的目的地的别名。
sendmail还支持标记mailHost,它如果存在,就把邮件传递给指定主机的MX记录,并把mailRoutingAddress作为收件人。

例如,LDAP项(用于一个服务程序,配置该服务程序时用根的区别名cn=root,o=sendmail.com,c=US):

 
这将使得发给eric@sendmail.org的邮件(其DNS MX记录使得邮件将被投递到sendmail.com)被发到eric@eng.sendmail.com。如果这一项还包含以下一行:
mailHost: mailserver.sendmail.com

那么发给eirc@sendmail.org的邮件地址将被改为eric@eng.sendmail.com,在查找MX记录后,发给主机mailserver.sendmail.com。


LDAP数据库项支持通配符@domain,它把要发给指定域中任何人的邮件都重新确定发送路由(就像在virtusertable中所做的那样)。


在8.12及以后的版本中,以一种配置原语LDAPROUTE_EQUIVALEN(或者LDAPROUTE_EQUIVALENT_
FILE)的形式加入了一点儿灵活性,它能让您定义采用LDAP重新路由的等价域名。例如,发送到user@host1.mydomain的邮件在正常情况下要在LDAP数据库中进行查询,然后作为@host1.mydomain进行查询。包括下面:

  LDAPROUTE_EQUIVALENT(‘host1.mydomain')
这行也会尝试关键字user@mydomain和@mydomain。这个功能可以在一个复杂的站点使用一个数据库来路由邮件。
ldap_routing功能的另一个参数现在能够让您指定有关LDAP方案的更多细节,以此来使用和指定有一个+detail部分的用户名的处理方式。截至8.13版,ldap_routing的一个新参数(sendertoo)能拒绝从LDAP里不存在的发送者发来的SMTP邮件。同样,参考cf/README文件了解确切的细节。

18.9.11  伪装和MASQUERADE_AS宏

有了MASQUERADE_AS宏,您就可以指定一个身份,其他机器可隐藏在这个身份后面。所有邮件看起来都源自于这个被指定的机器或者域。发件人的地址被重写为user@masquerading-name,代替了原来的user@original-host.domain。当然,那些被伪装起来的地址必须是有效的,以便人们可以回复邮件。

user@houstuser这项配置允许在一个网点上的所有用户使用一个通用的电子邮件地址。例如,如果xor.com上的所有主机都隐藏在域xor.com之后,那么来自user@host.xor.com的邮件上的邮戳表明好像它是来自user@xor.com一样,而且不会提到用户从主机发送邮件时的实际的主机名。代表xor.com的机器必须知道如何投递所有用户的邮件,甚至是在传入邮件服务器上不具有登录名的用户的邮件。自然,登录名在整个域之内必须是唯一的。

一些用户和地址(比如root、postmaster、hostmaster、trouble、operations、Mailer-Daemon等)应该不在这种做法的范围内。可以用EXPOSED_USER宏把它们明确地排除在外。例如,下面的配置序列:

MASQUERADE_AS(‘atrust.com')
EXPOSED_USER(‘root')
EXPOSED_USER(‘Mailer-Daemon')

将给邮件盖上它出自user@atrust.com的戳,除非它是由root或邮件系统发送的。在后面这些情况下,邮件将携带源主机的名称。

8.12版的sendmail引入的一项功能可以让您从伪装功能中把本地域(或者发送到列为特殊的特定主机的邮件)排除在外。例如,对于一个既使用了没有注册的本地私用域名,又想对发往Internet的消息采用伪装的站点来说,这个功能可能会带来方便。

这个功能的语法为:

 FEATURE(‘local_no_masquerade')
MASQUERADE_EXCEPTION(‘host.domain')
MASQUERADE_EXCEPTION_FILE(‘filename')
有几种对基本的MASQUERADE_AS宏进行扩展的方法,它们都是通过其他宏和FEATURE来实现的:
   MASQUERADE_DOMAIN宏;
  MASQUERADE_DOMAIN_FILE宏;
  MASQUERADE_EXCEPTION宏;
  MASQUERADE_EXCEPTION_FILE宏;
  limited_masquerade FEATURE;
  allmasquerade FEATURE;
  masquerade_envelope FEATURE;
  masquerade_entire_domain FEATURE。

我们推荐使用上面介绍的MASQUERADE_AS宏以及allmasquerade和masquerade_ envelope功能。limited_masquerade功能可改变MASQUERADE_DOMAIN的行为,这对虚拟主机环境很有用。MASQUERADE_DOMAIN允许您列出希望伪装的域,列表是从w类(这个类在典型情况下由use_cw_file功能定义)中预加载的,而且它列出了域中的主机。limited_masquerade不用类w预先初始化这个列表。所有那些域都将隐藏在您所伪装成的域之后。

allmasquerade功能把伪装扩展到消息的收件人(与仅仅伪装发件人相反),而masquerade_
envelope功能则把它扩展到信封以及信头地址 。有了这两项扩展,所有地址都能以一致的风格隐藏起来。这个masquerade_entire_domain功能把伪装扩展到其他指定出的一系列域里的所有主机。

如果您希望使用其他伪装技术,可以在cf/README文件或在sendmail书中读读它们的功能。请仔细阅读,某些伪装原语可能隐藏得太多。

18.9.12  MAIL_HUB和SMART_HOST宏

通过重写信头和信封(可选),伪装使得所有邮件看起来都出自一个主机或者域。某些网点可能希望所有邮件真正地出自(或去往)单独的一台机器。把宏MAIL_HUB用于传入的邮件,把SMART_HOST用于发出的邮件,即可获得这种配置。

如果希望把所有传入的邮件传递到一个中央服务器来投递,请把MAIL_HUB的值设置为mailer:host,其中mailer是用来到达指定host的代理程序。如果不指定投递代理程序,就使用relay。例如:

define(‘MAIL_HUB',  ‘smtp:mailhub.cs.colorado.edu')

指定SMART_HOST会使得主机只投递本地邮件,而把外部邮件转给SMART_HOST。这项功能对位于防火墙后面不能直接使用DNS的机器很有用。其句法类似于MAIL_HUB的句法,默认的投递代理程序还是relay。例如:

define(‘SMART_HOST',  ‘smtp:mailhub.cs.colorado.edu')
在这些例子中,由同一台机器充当传入和发出邮件的服务器。更大的网点可能会把它们分到单独的机器中。SMART_HOST必须允许中转(relaying)功能,这样一来,客户机就能通过它发送邮件。mailertable项覆盖了SMART_HOST。

8.9.13  伪装和路由

所有这些功能和宏就绪并等待对您的电子邮件地址进行调整的时候,我们觉得根据它们是否修改了消息的信头、信封或投递是应用于传入消息还是传出的消息,是应用于发送方还是接收方的地址等,来尝试比较一下各种机制也许是有益的。如果本页面再宽上2~3倍,我们也许就能真正成功地举例说明各种结构之间的差别。

而现在,我们只能在表18.10里给您一点提示,您不得不在sendmail文档中查阅详细资料才能了解不同变化之间的所有细微差别。

表18.10中全部大写的项是m4宏,小写项是用FEATURE宏调用的功能的名称。缩排的项依赖于其上层的项,例如,除非MASQUERADE_AS宏已经打开,否则修改MASQUERADE_AS行为的功能将毫无用处。这张表把功能进行缩排以便反映出这种依赖关系。伪装功能会影响发出的邮件上的信头地址,以及一则消息是否可以回复;路由选择功能会影响邮件的实际投递过程。

表18.10 伪装和路由选择功能的比较

 

   

方 向

   a

哪 一 部 分

伪装

MASQUERADE_AS

SH

host.domain

allmasquerade

RHb

host.domain

MASQUERADE_DOMAIN[_FILE]

SH

host.domain

masquerade_entire_domain

SH

host.sub.domain

limited_masquerade

SH

host.domain

masquerade_envelope

SEc

host.domain

genericstable

SH

user@host.domain

续表

 

   

   

   a

哪 一 部 分

路由
选择

mailertable

MAD

host.domain

virtusertable

RD

user@host.domain

ldap

RD

user@host.domain

mailhub

RD

本地邮件

smarthost

out

RD

远程邮件

a.S=发件人、R=收件人、D=投递、H=信头、E=信封、M=邮寄程序、A=地址。
b.一旦用allmasquerade功能启动了重写收件人的处理,其他所有的伪装结构不仅要重写发件人,也要重写收件人。
c.一旦用masquerade_envelope功能启动了信封重写的处理,那么其他所有的伪装结构不仅要重写信头,也要重写信封。

18.9.14  nullclient功能

nullclient功能用于永远不直接接收邮件,而且将其所有发出的邮件发送给中央服务器的主机。这样一台主机所用的.mc文件只有两行。

OSTYPE(‘ostype')
FEATURE(‘nullclient',  ‘mail_server')

nullclient功能将忽略许多其他功能。所有邮件都将毫无例外地交给mail_server处理 。请注意,如果用户正常情况下是在客户机上发邮件,而且没有为发出的邮件使用一个独立的服务器,则该服务器必须允许客户通过这个服务器进行中转(relay)。最近的sendmail版本在默认情况下关掉了中转功能。有关如何控制中转的详细资料请参考18.10.1节。nullclient配置伪装成了mail_server,那么您可能希望包括一条用于root的EXPOSED_USER子句。

使用nullclient功能的客户机必须拥有一条指向该服务器的相关MX记录。它也必须包括在服务器的cw文件中,该文件通常是/etc/mail/local-host-names。这些设置让服务器能够为那台客户机接受邮件。

使用nullclient配置的主机应该不能接受传入的邮件。如果它这样做了,它无论如何要把邮件转发给服务器。启动sendmail时不要使用-bd标志,以使它不去监听端口25上的SMTP连接。不过,有些用户代理(MUA)试图通过端口25来提交邮件消息,所以如果您的sendmail没有监听端口25,那么会有妨碍。不允许有传入邮件更好的办法是用-bd标志运行sendmail,但是用DAEMON_OPTIONS宏只监听loopback接口。无论哪一种方法,都应该在命令行上保留-q30m标志,这样如果mail_server停机,客户就可以把要发出的邮件先放入队列,稍后再尝试把它发送给mail_server。
nullclient适用于拥有一台中央邮件机器的网点中的叶节点。在较大的网点中,请考虑中央机器上的邮件负荷。您可能想把传入和发出邮件的服务器分开,或采用某种层次结构的做法。

 

SUSE带有一个nullclient的mc文件样本/etc/mail/linux.nullclient.mc。

只要填上您的mail_server的名字,在它上面运行m4就能构造出sendmail.cf,要做的就这么多。

 

18.9.15  local_lmtp和smrsh功能

在默认情况下,本地邮寄程序使用/bin/mail作为用户和文件的本地投递代理,使用/bin/sh作为程序的投递代理。sendmail现在提供了更好的选择,特别是对于程序的投递来说更是如此。两者都可以用FEATURE宏实现。

如果指定了local_lmtp功能,那么它的参数就是一个能够支持LMTP协议(Local Mail Transport Protocol,本地邮件传输协议,参见RFC2033)的本地邮寄程序。默认向用户投递邮件的是sendmail软件发布带的mail.local程序。

类似地,smrsh功能指定了用于向程序投递邮件的程序的路径。参见18.12.3节了解有关 mail.local和smrsh的详细讨论。

18.9.16  local_procmail功能

您可以通过启用local_procmail功能来使用Stephen van den Berg的procmail作为您的本地邮寄程序。它接受3个参数:procmail二进制文件的路径、调用它所用的参数向量、邮寄程序的标志。默认值都比较合适,但是默认路径(/usr/local/bin/procmail)和大多数发行版本上procmail常见的位置(/usr/bin)有冲突。

procmail能够为用户做到比纯粹的/bin/mail或者mail.locol更复杂的事情。除了把邮件投递到用户的信箱里之外,它还能把消息分类放入不同的文件夹、把它们保存在文件里、运行程序和过滤垃圾邮件。采用local_procmail功能大大抵消了smrsh(在18.12.3节里介绍)在安全方面所做的增强。不过,如果您不需要限制您的用户所能运行的程序(也就是说,您信任所有的用户),那么procmail就会非常方便。procmail并不随sendmail一起发布,如果您的厂商没有安装它,那么您可以从www.procmail.org得到它。

只要欺骗sendmail说您只是给了它一个procmail本地的副本,就可以配合这项功能使用别的邮件处理程序:

FEATURE(‘local_procmail',  ‘/usr/local/bin/mymailer')

如果您使用procmail,那么要检查/usr/bin/mailstat了解一些方便的procmail统计信息(不要和/usr/sbin/mailstats混淆了,后者给出了sendmail的统计信息)。在我们举例的所有发行版本中都有它,而且可以用它来总结procmail的日志文件。

18.9.17  LOCAL_*宏

如果您确实不怕麻烦,要编写一些新奇的新规则以便处理特殊的本地情况,请使用一组以LOCAL_打头的宏。本章后面的18.10节中有一些这种低级结构的例子。

18.9.18  配置选项

配置文件的选项和宏(原始配置语言中的O和D命令)可以用m4命令define设置。在cf/README文件中列出了作为m4变量访问的选项的完整列表及其默认值。这些默认值对于大多数站点来说都适用。
举几个例子:

define(‘confTO_QUEUERETURN',  ‘7d')
define(‘confTO_QUEUEWARN',  ‘4h')
define(‘confPRIVACY_FLAGS',  ‘noexpn')

QUEUERETURN选项决定了一则消息如果不能投递的话,将在邮件队列中停留多长时间。QUEUEWARN选项决定了在通知发件人可能存在投递问题之前,邮件要停留多长时间。前两行把它们分别设置为7天和4小时。

接下来的一行设置了隐私标志来禁止SMTP EXPN(展开地址)命令。参考18.12.4节了解有关隐私选项的更多信息。confPRIVACY_FLAGS选项需要由逗号分隔的值列表。有些版本的m4要求用两组引号来保护一个有多项的字段中的逗号,但是Linux带的GNU m4会更聪明一些,它不要求有多余的引号:

define(‘confPRIVACY_FLAGS', “noexpn, novrfy")

大多数选项的默认值对于一个不太挑剔安全性,或者不太在乎性能的普通站点来说就够了。特别地,默认值会通过关闭中转(relaying)、要求全名地址和要求地址能解析到一个IP地址上等方式,试着保护您免受垃圾邮件的侵扰。如果您的邮件枢纽机器非常繁忙,而且要服务许多个邮递列表,那么您可能需要调整一些与性能有关的值。

表18.11列出了一些可能需要调整的选项(近175个配置选项中的15%),以及它们的默认值。为了节省空间,显示选项名称时不带它们的conf前缀,例如,FALLBACK_MX选项的名字实际上是confFALLBACK_MX。我们把该表分成几个子表,以便标识出变量所处理的问题类型:一般、资源、性能、安全性和减少垃圾邮件、以及杂项。有些选项显然适合于多个类别,但是我们只把它们列出一次。

表18.11 基本的配置选项

 

   

说明以及(默认值)

一般

COPY_ERRORS_TO

出错消息上要Cc的地址(无)

DOUBLE_BOUNCE_ADDRESS

捕获大量的垃圾邮件;有些站点使用/dev/null,但是那样做会隐藏严重的问题(postmaster

资源

MIN_FREE_BLOCKS

接受邮件的最大文件系统空间(100

MAX_MESSAGE_SIZE

单个消息的最大字节数(无限)

TO_lots_of_stuff

所有类型事件的超时设定(各有不同)

TO_IDENT

为检查发件人的身份而进行的身份查询的超时设定;如果为0,则不进行身份检查(5秒)

MAX_DAEMON_CHILDREN

自己进程的最大数目a(无限制)

性能

MCI_CACHE_SIZE

在缓存区打开的传出TCP连接的数量(2

MCI_CACHE_TIMEOUT

保持被缓存的连接打开的时间(5分钟)

HOST_STATUS_DIRECTORY

参见19.18.123.56节的介绍(没有默认值)

FALLBACK_MX

参见19.18.132.65节的介绍(没有默认值)

FAST_SPLIT

在按收件人分类,并分入多个队列时禁用MX查找;参见19.18.12.3节(1 = 真)

QUEUE_LA

到达这个平均负载值时,就应该把邮件排入队列,而不是例子投递(8×CPU的数量)

REFUSE_LA

到达这个平均负载值时就要拒绝邮件(12×CPU的数量)

DELAY_LA

到达这个平均负载值时就要减缓投递速度(0 = 没有限制)

MIN_QUEUE_AGE

作业在队列中必须保留的最短时间;使一台繁忙的机器能更好地处理队列(0

安全/垃圾邮件

TRUSTED_USERS

用于邮递列表软件的所有者;允许伪造From行和重新构造别名数据库(rootdaemonuucp

PRIVACY_FLAGS

限制用SMTP发出的信息(authwarnings

INPUT_MAIL_FILTERS

传入邮件的过滤器列表(空)

MAX_MIME_HEADER_LENGTH

MIME信头的最大尺寸(没有限制)b

CONNECTION_RATE_THROTTLE

限制接受邮件连接的速度,减缓DOS攻击(没有限制)

MAX_RCPTS_PER_MESSAGE

减缓垃圾邮件的投递速度;推迟向多出来的收件人发送邮件,而是发一份临时的出错消息(无限)

续表

 

   

说明以及(默认值)

安全/垃圾邮件

DONT_BLAME_SENDMAIL

覆盖sendmail的安全和文件检查功能;不要随便改动!(safe

AUTH_MECHANISMS

Cyrus SASLSMTP验证机制c

其他

LDAP_DEFAULT_SPEC

LDAP数据库的映射说明,包括服务器正在运行的主机和端口(无定义)

a.更确切地说是,一次可以运行的子进程的最大数量。当达到上限的时候,sendmail会拒绝连接。这个选项能够防止拒绝服务攻击(DOS)。
b.这个选项能够防止用户代理缓冲区溢出。“256/128”是一个可用的不错的值—它表示每个信头256字节,该信头的每个参数128字节。
c.默认值为“EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5”。除非想要降低安全性,否则不要加PLAIN LOGIN。

相关文章 热门文章
  • sendmail中.forward文件的注意事项
  • Linux启动 Sendmail速度慢的解决办法
  • RHEL5.2 sendmail和openwebmail 、dpvecpt 配置总结
  • Linux启动sendmail速度慢的解决办法
  • 为Sendmail添加邮件认证功能
  • FYI:商用Sendmail的安全和隔离要点
  • 在Perl和Sendmail的附件做过滤系统
  • sendmail做smtp SERVER
  • Sendmail Analyzer 5.3 发布
  • 如何限制Sendmail下邮件的大小
  • Fedora架设Sendmail邮件服务器
  • 架设RHEL4系统Sendmail邮件服务器
  • Sendmail8.12.9+RedHat 8.0建构邮件服务器
  • sendmail大全
  • Sendmail邮件服务器快速指南
  • SendMail上手指南
  • 用Sendmail配置你的第一台e-mail服务器
  • RedHatLinux AS3中SendMail的配置
  • 企业Sendmail邮件服务器的创建
  • Sendmail环境下对抗垃圾邮件的处理方法
  • Sendmail的邮件用户与系统用户分离
  • 我的qmail安装历程
  • 带SMTP认证功能的sendmail配置
  • Sendmail的relay用法汇总
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号