⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1382.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<br>
  编辑文件client.cf,然后加上这一行。“V”必须位于行首。后面跟的版本号必须是7,才能够使所有8.8版的sendmail.cf中的新功能生效。数字7是sendmail.cf的语法,表示有7个主要的变化。<br>
<br>
3.2.2 注释<br>
<br>
  注释语句能够帮助其他人理解你的配置文件。同时,他们也能通过注释记起你几个月前的修改。注释语句对sendmail的执行速度影响极小,所以你无需担心这一问题。前面我们说过,以#开始的行,被sendmail认为是注释行,整行将被忽略。例如:<br>
<br>
# This is a comment<br>
<br>
  另外,注释语句也可以在命令之后,如:<br>
<br>
V7#This is another comment<br>
<br>
  增加一些注释语句到你的sendmail.cf文件中,使其成为:<br>
<br>
# This is a comment<br>
V7# This is another comment<br>
Sendmail程序读取这个配置文件也将没有任何提示。<br>
% ./sendmail –Cclient.cf –bt &gt;/dev/null<br>
%<br>
<br>
3.3快速导览<br>
<br>
  你将发现,在配置文件中的其它命令远比V命令来得复杂。这儿,我们现在对每个命令作一个快速的导览,仅够你能够对它们有一个初步的了解。<br>
<br>
3.3.1 邮件传送代理<br>
<br>
  通常情况下,sendmail程序不自己传送邮件,而是调用一个程序来完成。M命令就是定义一个邮件传送代理。例如,就象以前我们看到过的:<br>
<br>
Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=10, R=20/40,<br>
<br>
  这将告诉sendmail,本地的邮件使用/bin/mail传送。这一行中的参数将在第6章:邮件中枢与传送代理,第30章:传送代理中详细说明。<br>
<br>
3.3.2 宏<br>
<br>
  义一个值,然后可以在多次使用,提高sendmail.cf的可维护性。D命令用于定义宏。一个宏名可以是一个单字母或用大括号包起来的多个字符。定义一次后,就可以在其它地方使用。<br>
<br>
DRmail.us.edu ? 一个单字符<br>
D{REMOTE}mail.us.edu ? 用大括号包含起来的多个字符(从8.7版开始)<br>
<br>
  在这,R和{REMOTE}都是宏名,值是mail.us.edu。这个值可以在任何地方用$R和${REMOTE}访问。宏将在第7章:宏中介绍,更详细的在第31章:定义宏中。<br>
<br>
3.3.3 规则<br>
<br>
  sendmail.cf文件的核心是一系列的地址重写规则。这是非常重要的,因为地址必须符合多种标准。R命令用来定义这些规则:<br>
<br>
R$- $@ $1 @ $R user -&lt; user @ remote<br>
<br>
<br>
  邮件地址将与最左边的规则($-)进行比较。如果与这个规则匹配,它们将根据右边的规则($@ $1 @ $R)进行重写。而在最右边的文本则是注释(注意,这里不需要使用#号)。<br>
<br>
  如果使用多字符的宏名,并用#号标出注释的话,将使语句减少一些神秘:<br>
<br>
<br>
R$- # If a plain user name<br>
$@ $1 @ ${REMOTE} # append “@” remote host<br>
<br>
3.3.4 规则集(Rule Sets)<br>
<br>
  由于地址重写可能需要好几步,规则可以组织成为规则集,用S命令开始规则集:<br>
<br>
  S3该命令定义规则集3,从sendmail 8.7版开始,规则集也可以使用字符来命令,如:<br>
<br>
SHubset<br>
<br>
<br>
  该命令定义Hubset规则集,这种方式的命名,sendmail将会自己对其编号。<br>
<br>
  所有的跟在S命令后的R命令(规则)组成规则集。一个规则集结束于定义另一个规则集的S命令。<br>
<br>
3.3.5宏集(Class Macros)<br>
<br>
  用D命令定义的宏只能有一个值,但这通常是不够的。我们经常需要定义一个拥有多个值的宏,然后就像数组一样来组织这些值。C命令定义一个宏集。一个宏集就像一个数组一样,能够有多个项。宏集的名字是一个单字母,从8.7版开始,也可以用大括号包含多个字符作为名字,例如:<br>
<br>
CW localhost fontserver ? 一个单字符作为名字—W<br>
C{MY_NAMES} localhost fontserver ? 多个字符作名字---{MY_NAMES}<br>
<br>
  在这里,每一个宏集都包含两个值:localhost和fontserver。我们可以通过表达式$=W和$={MY_NAMES}来访问这些宏集。有关于宏集的更多信息,可以参考第12章和第32章。<br>
<br>
3.3.6 文件宏集(File Class Macros)<br>
<br>
  为了管理更加容易,我们常将比较长的信息或经常变化的信息存放到一个文件中去。命令F可以定义一个文件宏集。这个宏集的值是这个文件的内容,如:<br>
<br>
FW/etc/mynames<br>
F{MY_NAMES}/etc/mynames<br>
<br>
  在此,文件宏集W和{MY_NAMES}将从文件/etcmynames中获得它们的值。<br>
<br>
  文件宏集也可以从一个程序的输出中得值。它定义为:<br>
<br>
FM|/bin/shownames<br>
F{MY_NAMES}|/bin/shownames<br>
<br>
  在此,sendmail将运行程序/bin/shownames,这个程序的输出将成为文件宏集的值。<br>
<br>
3.3.7 选项<br>
<br>
  选项将告诉sendmail程序许多有用的和必要的事情。它们指定key文件的位置,设置超时时间,以及定义sendmail在出错时如何处理。它可以调整sendmail,以使它符合你特定的需要。<br>
<br>
  命令O用来设置这些选项。以下就是一个例子:<br>
<br>
OQ/var/spool/mqueue<br>
O QueueDirectory=/var/spool/mqueue<br>
<br>
  在此,Q选项定义邮件队列文件为/var/spool/mqueue。<br>
<br>
3.3.8 信头<br>
<br>
  邮件消息由两个部分组成:一个是信头部分,另一个是在空行后的主体部分。主体部分可以包括任何内容。而信头部分,则需要严格按照标准。H命令用来指定信头的格式:<br>
<br>
Hreceived:$?sfrom $s $.by Sj ($v/$Z) $?r with $r$. Id $I$?u for $u$.; $b<br>
<br>
<br>
  这个特定的H命令告诉sendmail收到后,必须在每一封信的信头加上这一行。<br>
<br>
3.3.9 优先级<br>
<br>
  并不是所有的邮件具有相同的优先级。邮件列表的信应该在只有一个收件人的信的后面发送。P命令用于设定邮件的优先级。这个优先级用于邮件队列处理时决定邮件的顺序。<br>
<br>
Pjuck=-100<br>
<br>
  这个P命令告诉sendmail,信头中用juck的信最后处理。关于这个命令的更详细内容,参见第14章和第35章。<br>
<br>
3.3.10 受托用户<br>
<br>
  为了使某些软件(如UUCP)能够正确地生效,就必须能够告诉sendmail邮件是谁发来的。这要求软件与From:中指出的用户运行在不同的uid上。T命令列出这些用户的受托用户。所有包含在信头的其他用户将收到一个警告。<br>
<br>
Troot daemon uucp<br>
<br>
  这个T命令指出有三个用户是受托用户。它们是root(UNIX系统中的上帝),daemon(sendmail通常以伪用户daemon身份运行),以及uucp。<br>
<br>
3.3.11 key数据库<br>
<br>
  一些认证信息,例如UUCP主机列表等,最好在sendmail.cf外维护。外部的数据库(叫作keyed数据库)提供了更快的访问速度。Key数据库在8.6版中引入了几种格式,如:<br>
<br>
Kuucp hash /etc/mail/uucphosts<br>
<br>
  这个K命令声明一个key数据库叫uucp,类型是hash,文件为/etc/mail/uucphost。<br>
<br>
3.3.12 环境变量<br>
<br>
  sendmail程序的安全是十分重要的。一种破坏的的方法是运行时伪造一些环境变量。为了阻止它,8.0版的sendmail将在启动时去除所有的环境变量。然后根据预先设置的值进行设置。设置环境变量使用E命令。<br>
<br>
EPOSTGRESHOME=/home/postgres<br>
<br>
  在此,环境变量POSTGRESHOME被赋予值/home/postgres。这个程序使用postgres数据库访问信息。<br>
<br>
[目录]<br>
<br>
--------------------------------------------------------------------------------<br>
<br>
<br>
邮件中枢与分发代理<br>
<br>
6. 邮件中枢与分发代理<br>
  使用一个强大的中心机器处理所有的邮件,比让网络中所有的工作站自己处理自己的邮件好得多。这样的一个中心机器就叫作邮件中枢(Mail hub),它就象美国联邦快运公司处理包裹一样工作。在过去,当你通过联邦快运公司将包裹从旧金山寄到巴黎,包裹将首先被送到孟菲斯的田纳西,甚至你想寄到洛杉机,它也是先送到孟菲斯(参见图6-1)。这是因为孟菲斯是联邦快运公司的处理中心。所有的包,不管它们从哪来,到哪去,都先送到处理中心(中枢,hub),然后再从那里发送出来。<br>
<br>
  这种处理方法的好处就是,联邦外运公司只有处理中心需要知道如何发往全世界(当然,联邦快运是有多个处理中心的),而其它地方的分支机构只要知道如何发往处理中心就可以了。<br>
<br>
  类似地,你的工作站也可以将自己看成分支机构(客户机),将处理邮件的中心机器看成处理中心。这个邮件中枢将为整个机构处理邮件,这样做有许多好处:<br>
<br>
  1) 所有发往这个机构的信都发给邮件中枢,而不直接发往客户机。由邮件中枢来处理有几个优点:客户机无需运行sendmail守候进程来侦听邮件。而且客户机的名字无需告知外部,因此更容易安全地将客户机与Internet隔离。<br>
<br>
  2) 所有从机构往外发的邮件都先发给邮件中枢,然后由邮件中枢转发到最终目的地,而不是由客户机直接向外发送。这个机制可以使客户机无须一直观察Internet的变化;所有的待发邮件都保存在邮件中枢中,而不是客户机处,这样管理起来更简单;而且一个单一的sendmail.cf文件就可为所有的客户机服务。<br>
<br>
  3) 所有发出去的邮件都将被修改,使得其看起来象来自邮件中枢的邮件。这样回复的邮件就不会直接返回到每一个客户机。这样做,所有的邮件好象都来自一台机器,一台很大的机器。<br>
<br>
  4) 所有发往本地用户的邮件都将传送到邮件中枢,存放在spool中。而无需每台机器都建一个spool目录来存放收到的邮件。这样做的优点是所有本地的邮件都由一个机器处理,所有本地机器都无需进行处理。而且这样管理spool也更加容易。<br>
<br>
  但如果你的机构的电脑网络是不同体系结构的电脑组成的,或散在许多网络中,使用邮件中枢就不是太好了:<br>
<br>
  1) 如果一个机构经常有数量巨大的邮件收发,那么这台邮件中枢就可能负载过大,以使所有的邮件都被缓存,一直等待发送。如果负载厉害的话,甚至可能使本地邮件转发也会出现这样的现象,那是十分可怕的。<br>
<br>
  2) 为了让邮件中枢正常工作,它需要知道系统中所有用户的登录名,也就是意味着需要一个主/etc/passwd文件,它是所有主机上的/etc/passwd的集合,或者使用NIS系统来构建。<br>
<br>
  3) 因为所有的邮件都通过邮件中枢传送,而不是直接送给接收者,这就意味着一定会延迟。对于一些小的机构,这个延迟可以忽略不计,而让邮件的总量上去时,这会成为一个严重的问题。<br>
<br>
  4) 如果一个客户机是直接使用UUCP连接,或是与多个网络连接,那样配置文件会变得十分复杂。<br>
<br>
4.1 client.cf文件<br>
<br>
  这个教程的目的是产生一个简单的邮件中枢的sendmail.cf文件。为了区别与前面几个章节中的sendmail.cf文件区分开来,在此我们把它称为client.cf文件。我们将在后面的几个小节中逐段地生成这个文件,并做一些相应的说明。本章中生成的文件将完成两个任务:<br>
<br>
  1) 它将指示sendmail运行为邮件中枢,发送所有给其它机器的mail服务器。<br>
<br>
  2) 它将使所有外出的邮件表现为从邮件中枢发出的一样。<br>
<br>
  在这章中,我们主要处理第一个任务:如何让客户机上的邮件送到邮件中枢。<br>
<br>
4.2 定义一个邮件分发代理<br>
<br>
  sendmail除了在TCP/IP网络转发邮件外,并不能自己处理邮件传送。而是调用一个程序来实现。这个程序就叫做分发代理。哪个代理程序处理哪类邮件分发任务在sendmail.cf文件中定义。<br>
<br>
  加入你的client.cf文件中的第一项是定义负责将信件转发给邮件中枢的转发代理程序。最初,sendmail只需要转发代理程序的名字与路径。设置形如:<br>
<br>
<br>
# This is a comment<br>
V7 # this is another comment<br>
# Delivery agent definition to forward mail to hub<br>
Mhub, P=[IPC], A=IPC $h<br>
<br>
  这是一个最小的配置文件。将这些行加入到client.cf文件中。配置的第二行定义了一个分发代理。它包含三个部分,每个部分使用逗号隔开。<br>
<br>
Mhub<br>
<br>
  以M开始的行用于定义邮件分发代理。紧跟着在后面的hub是分发代理的标识名。<br>
<br>
  这个标识名供你以后写的配置文件部分参考。<br>
<br>
P=[IPC]<br>
<br>
  P=用于设置路径。这一句配置用来指出处理邮件分发的程序的全路径名,在这里使用的是[IPC]。([IPC]是一个Sendmail内部使用的专有名称,说明它有能力在TCP/IP网络上完成邮件分发工作。)而对于其它情况下,则设置为其转发程序的名称,如/bin/mail等。<br>
<br>
A=IPC $h<br>
<br>
  A=后面跟着参数列表,用来指定P=指定的程序运行时的参数。第0个参数就是程序的名称(在此就是IPC,注意没有包含括号)。而其它的参数就是在A=后面指定的,这此例中仅有一个:$h。这个$h是一个宏,表示接收者的主机名。我们会在第7章中更详细地说明宏。它通常是关于分发代理定义的最后一项。<br>
<br>
4.2.1 测试client.cf文件<br>
<br>
  在命令行下执行:<br>
<br>
% /usr/lib/sendmail –oQ/tmp –Cclient.cf –bp<br>
<br>
  注意,你需要在命令行中加上-oQ/tmp,它将阻止sendmail改变mqueue目录。如果你忽略这个开关,sendmail会出现混乱、错误:<br>
<br>
cannot chdir((null)):Bad file number<br>
<br>
  而-Cclient.cf开关则告诉sendmail使用当前目录中的client.cf文件,而不是系统中的/etc/sendmail.cf文件。而-bp开关则是让sendmail打印出队列的内容。以上命令行将产生如下所示的输出:<br>
<br>
No local mailer defined<br>
<br>
  然而,缺少一个local mailer并没有什么大不了的。Sendmail程序在输出它后,就结束了,说明没有发现其它错误。<b

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -