发信人: albin.bbs@bbs.dlut.edu.cn (阿乐斌), 信区: cnunix
标  题: 电子邮件环境之生成(2)(钱飞著)
发信站: 碧海青天 (Thu Oct 16 20:14:35 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!DUT
出  处: rose.dlut.edu.cn


【专题介绍】 
                                   大规模计算机网络主要服务之管理方法
                                                    (2)

                                       电子邮件环境的生成方法(2) 

sendmail编译成功之后,接下来的工作即是设定sendmail.cf.sendmail.cf中的 所有宏命令理解起来比较困
难.这项工作对网络管理者来说至关重要,却有非常棘手. 

目前,为了解决这一问题,人们已经开发出了一些辅助工具. 利用这些工具您可 以很简单地设定出
sendmail.cf. 这里,让我们以著名的CF为例, 介绍一下具体的设 定方法. 

CF是日本Wide Project所开发的sendmail.c生成用工具, 它的版本尚在不断地 更新,目前的最新版本为
CF-3.5Wb2. 

1. CF的使用方法 

CF软件可以从各大FTP服务站点下载到.取回CF-3.5Wb2.tar.gz后, 请将其展开 到合适的目录下.例如: 

% cd /pub/AdminTools
% tar ztvf CF-3.5Wb2.tar.gz 

这时,在当前目录下将会出现一个新的目录 -- CF-3.5Wb2. 在该目录下将含有 以下目录: 

    ./           Copyright    README.jpn   Tools/       doc/
    ../          Makefile     Samples/     VERSION      support/
    ChangeLog    Master/      Standards/   contrib/

展开源程序后,需要针对用户各自环境修改CF-3.5Wb2下的Makefile. 使用CF时 一般需要用到perl,请根据您
的perl命令位置修改Makefile的11行. 例: 

PERL= /usr/local/bin/perl 

然后,执行下述命令. 

% make cleantools
% make tools 

如果您没有perl, 请将Makefile的11行修改为: 

PERL= 

然后执行上述命令即可. 

接下来要生成标准样本文件时请执行: 

% make samples 

利用CF生成sendmail.cf时的基本步骤如下: 

(1)编辑定义文件(后缀为def的文件,例如Mysendmail.def)
(2)执行make Mysendmail.cf命令
(3)测试所生成的格式文件
(4)投入运行 

2. 编辑定义文件 

定义文件为后缀为def的文件.在CF软件包中(Standard目录下)预备有各种定义 文件样本,在编辑时可参照
之.各文件之用途为: 

   sendmail-v6.def     sendmail 8.7.x 用一般定义文件
   sendmail-v5.def     sendmail 8.6.x 用一般定义文件
   sendmail-v1.def     sendmail 5.x+1.6W 用一般定义文件
   nmtc.def            sendmail 5.x 用一般定义文件
   null-v6.def         sendmail 8.7.x 用null client.
   null-v5.def         sendmail 8.6.x 用null client.
   null-v1.def         sendmail 5.x 用null client.
   (null client用于将所有信件发往中继站,本地计算机自己不直接发送信件)

需要注意的是sendmail.cf的版本概念. 

从sendmail 8.x开始,对sendmail.cf引入了版本的概念. 这是为了在利用 8.x 之新功能的同时,继续与
sendmail 5.x提供兼容性.过去的 5.x 用sendmail.cf的版 本定义为第一版,目前的 8.x 用sendmail.cf之
版本称为第五版.有时将二者分别称 为第一级和第二级sendmail.cf.另外, 通常将 5.x 和 8.x 之
sendmail 分别称之 为V5(或R5)和 V8(或R8) sendmail.在sendmail.cf中将以下述形式表示版本级别: 

# level 5 config file format
V5 

如果没有指定版本级别,省缺值为版本一. 

请注意,sendmail, sendmail.cf和信件头中所描述的版本不是一回事. 

电子邮件系统大致可分为一下几种: 

(1) 单机系统(Standalone Type ) 
      是一种最为基本的E-mail形态.两台计算机通过以太网连接在一起,直接进行 Email交换. 条件是,各台
      计算机均具备独自的mailer和spool. 

(2) 邮件服务器系统(Mail Server Type) 
      在一些小型局部网络中, 多台计算机间为了共享一些软硬件资源, 常常利用 NFS(网络文件服务)来管
      理网络. 利用NFS, 可以各台计算机上的用户环境统 一起来, 提高网络文件系统的透明性. 

      如果用NFS将一台计算机上的E-mail缓冲池(spool)mount到其他多台计算机上 ,不仅可以为那些计算机
      节约硬盘空间,还有利于E-mail系统的日常管理. 

      提供Email缓冲池的计算机通常被称之为Email服务器,用于对自己所管辖范围 内的所有计算机处理信
      件的收发业务. 

(3) Email客户系统(None Spool Type) 
      共享Email服务器之Email缓冲池的计算机,通常被称之为Email客户, Email客 户上由于不具备独自的
      缓冲池,所以在收发信件时需要委托E-mail服务器来进 行中继. 

(4) 中继站系统(Mail HUB Type) 
      类似于邮件服务器系统.为下属服务器转发信件.可应用于层次化大规模网络 组织. 

2.1 单机系统(Standalone Type)之sendmail.cf生成例 

计算机名: hacker
所在域名: come.or.jp
计算机别名: ppp 

(a)编辑定义文件
% vi hacker.def 

    ----------------------------------------
     # 定义版本分隔符为"-"                   (1)
     VERSION_SEPARATOR=-

     # sendmail.cf文本文件版号(任意)         (2)
     LOCAL_VERSION='hacker-1.0'

     # 定义sendamil.cf版本                 (3)
     CF_TYPE=R8

     # 定义计算机系统类型                     (4)
     OS_TYPE=linux

     # 定义域名                            (5)
     MY_DOMAIN=come.or.jp

     # 定义计算机名                         (6)
     MY_NAME=hacker

     # 定义计算机邮件地址                     (7)
     OFFICIAL_NAME=hacker.come.or.jp

     # 定义计算机别名                        (8)
     MY_ALIAS='come.or.jp ppp.come.or.jp'

     # 决定FROM行格式(与计算机地址一致)         (9)
     FROM_ADDRESS='$j'

     # 决定BITNET传送方式                  (10)
     BITNET=no

     # 指定信件地址补充方式                  (11)
     CANON=short

     # 指定是否在信件头上添加"Errors-To:"行   (12)
     USE_ERROR_TO='True'

     # 指定出错信件的受理者                  (13)
     COPY_ERRORS_TO='root'
    ----------------------------------------

说明: 

(1) 定义版本分隔符 
      在信件头"Received:"中将出现版本提示信息.信息格式为:
      VERSION VERSION_SEPARATOR LOCAL_VERSION
      "$VERSION$VERSION_SEPARATOR$LOCAL_VERSION"为sednmail.cf识别信息. 

(2) sendmail.cf文本文件版号 
      LOCAL_VERSION用于定义sendmail.cf文本文件版号.该版号与sendmail.cf版本 无关,用于识别文本变
      更情况. 

(3) 定义sendamil.cf版本 
      CF_TYPE用于指定所要生成的sendmail.cf之版本.可以指定的选项有以下几种: 

          R8:           R8 sendmail 之标准设定
          R8V6:         R8 sendmail,V8.7以后版本 之扩展功能设定
          R8-null:      R8 sendmail 单机方式之标准设定
          R8V6-null:    R8 sendmail V8.7以后版本 之扩展功能,单机方式之设定
          R5:           R5 sendmail(no multi-token) 之标准设定
          R5-mtc:       R5 sendmail(multi-token) 之标准设定
          R5-null:      R5 sendmail 单机方式之标准设定

(4) 定义计算机系统类型 
      OS_TYPE 用于定义计算机系统类型.可以制定的系统类型列于Master/OSTYPE目 录下,有以下几种: 

          a50s       bsd4.3  dgux     hpux9   newsos4.1 riscos4.5  sunos4.1
          aix3       bsd4.4  domainos irix    newsos6   sco3.2     svr4
          aix4       bsdi1.0 ds90     irix4   nextstep  solaris2.1 ultrix4.1
          amdahl-uts bsdi1.1 dynix3.2 irix5   os2       solaris2.5 unios-b
          aux        bsdi2.0 ews-ux4  linux   osf1      sunos3.5
          bsd386     bsdi2.1 hpux10   newsos4 ptx2      sunos4

(5) 定义域名 
      MY_DOMAIN用于定义域名(不含计算机名). 这里所定义的域名将在sendmail.cf 中为 $m 命令所调用. 

(6) 定义计算机名 
      MY_NAME用于定义计算机名.R8 sendamil时可以不含域名,R5 sendmail时(特别 是使用sendmail.mx时)
      需要指定全称名(FQDN:Fully Qualified Domain Name) 

(7) 定义计算机邮件地址 
      OFFICIAL_NAME用于定义计算机邮件地址之正式名称.需要进行FQDN指定. 

(8) 定义计算机别名 
      MY_ALIAS用于定义计算机别名. 这里所指定的别名在发送信件时将被自动地改 写为OFFICIAL_NAME. 

(9) 决定FROM行格式 
      FROM_ADDRESS用于定义信件发送者地址, 发送信件时将被自动地添加到信件头 的"From:"行中. 

(10)决定BITNET传送方式 
      BITNET用于定义发往BITNET之信件的传送方式. 指定方法及相应的传送方式有 以下三种: 

          static: 通过由BITNET_RELAY所指定的中继站向BITNET用户发送信件.
              mx: 利用sendmail.mx,借助于DNS检索MX记录,请求BITNET_RELAY所指定的
                  中继站查寻,并向*.BITNET用户转发信件.BITNET_RELAY的省缺定义为
                  bitnetjp.ad.jp.
              no: 利用DNS解释BITNET用户地址.

(11)指定信件地址补充方式 
      CANON用于定义地址补充方法.补充方法有以下几种: 

                  one: 仅对一个单词之地址表现进行FQDN补充.
                short: 仅对一个单词或两个单词之地址表现进行FQDN补充.
              unkonwn: 仅对地址表现中域名不完全者补充根域名.
                  all: 对所有地址进行FQDN补充.
                   no: 不进行地址补充.
           one-append: 单单词地址表现之FQDN补充失败时,添加MY_DOMAIN.
         short-append: 单,双单词地址表现之FQDN补充失败时,添加MY_DOMAIN.
           all-append: 对地址补充MY_DOMAIN.

(12)指定是否在信件头上添加"Errors-To:"行 
      USE_ERROR_TO用于定义是否在信件头上添加"Errors-To:"行. 本参数尽适用于 R8 sendmail. 指定方
      法有以下两种: 

          
           True: 在信件头上添加"Errors-To:"行.
          False: 不添加"Errors-To:"行.

(13)指定出错信件的受理者 
      COPY_ERRORS_TO用于定义出错新建之管理者地址. 当发送的信件因地址不对等 原因无法发送时,将该
      信件之信头部转送到所指定的地址处,由其进行适当的处 理. 

(b) 生成cf文件 

% make hacker.cf 

该命令执行之结果将在当前目录下生成一个hacker.cf文件. 对该文件进行彻底 测试之后在改名为
sendmail.cf. 

(c) 测试cf文件 

(1) 本地测试 -- 单名测试 

检查发往本地用户root,地址中不含计算机名.要求规则解释结果为: 规则 3:采用local接收程序(MAILER)转
发给相应用户(root) 

   % /usr/lib/sendmail -bt -C./hacker.cf<br>
   ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)<br>
   Enter <ruleset> <address><br>
   >0,3 root                                     <br>
   rewrite: ruleset  0   input: root<br>
   rewrite: ruleset  0 returns: $# local $: root<br>
   rewrite: ruleset  3   input: $# local $: root<br>
   rewrite: ruleset  3 returns: $# local $: root    (OK)<br>
   >

(2) 本地测试 -- 单机测试 

检查发往本地用户root,地址中只含计算机名.要求规则解释结果为: 规则96:补充完全地址. 规则 3:采用
local接收程序(MAILER)转发给相应用户(root) 

   % /usr/lib/sendmail -bt -C./hacker.cf<br>
   ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)<br>
   Enter <ruleset> <address><br>
   > 0,3 root@hacker<br>
   rewrite: ruleset  0   input: root @ hacker<br>
   rewrite: ruleset 97   input: root @ hacker<br>
   rewrite: ruleset  3   input: root @ hacker<br>
   rewrite: ruleset 96   input: root < @ hacker ><br>
   rewrite: ruleset 96 returns: root < @ hacker . come . or . jp >(OK)<br>
   rewrite: ruleset  3 returns: root < @ hacker . come . or . jp ><br>
   rewrite: ruleset  0   input: root < @ hacker . come . or . jp ><br>
   rewrite: ruleset 97   input: root<br>
   rewrite: ruleset  3   input: root<br>
   rewrite: ruleset  3 returns: root<br>
   rewrite: ruleset  0   input: root<br>
   rewrite: ruleset  0 returns: $# local $: root<br>
   rewrite: ruleset 97 returns: $# local $: root<br>
   rewrite: ruleset  0 returns: $# local $: root<br>
   rewrite: ruleset 97 returns: $# local $: root<br>
   rewrite: ruleset  0 returns: $# local $: root<br>
   rewrite: ruleset  3   input: $# local $: root<br>
   rewrite: ruleset  3 returns: $# local $: root        (OK)<br>
   >

(3) 本地测试 -- 单机别名测试 

检查发往本地用户root,地址为计算机别名.要求规则解释结果为: 规则96:还原正式地址.
规则 3:采用local接收程序(MAILER)转发给相应用户(root) 

   % /usr/lib/sendmail -bt -C./hacker.cf
   ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
   Enter <ruleset> <address>
   > 0,3 root@come.or.jp
   0,3 root@come.or.jp   
   rewrite: ruleset  0   input: root @ come . or . jp
   rewrite: ruleset 97   input: root @ come . or . jp
   rewrite: ruleset  3   input: root @ come . or . jp
   rewrite: ruleset 96   input: root < @ come . or . jp >
   rewrite: ruleset 96 returns: root < @ hacker . come . or . jp > (OK)
   rewrite: ruleset  3 returns: root < @ hacker . come . or . jp >
   rewrite: ruleset  0   input: root < @ hacker . come . or . jp >
   rewrite: ruleset 97   input: root
   rewrite: ruleset  3   input: root
   rewrite: ruleset  3 returns: root
   rewrite: ruleset  0   input: root
   rewrite: ruleset  0 returns: $# local $: root
   rewrite: ruleset 97 returns: $# local $: root
   rewrite: ruleset  0 returns: $# local $: root
   rewrite: ruleset 97 returns: $# local $: root
   rewrite: ruleset  0 returns: $# local $: root
   rewrite: ruleset  3   input: $# local $: root
   rewrite: ruleset  3 returns: $# local $: root        (OK)
   > 0,3 root@ppp.come.or.jp
   rewrite: ruleset  0   input: root @ ppp . come . or . jp
   rewrite: ruleset 97   input: root @ ppp . come . or . jp
   rewrite: ruleset  3   input: root @ ppp . come . or . jp
   rewrite: ruleset 96   input: root < @ ppp . come . or . jp >
   rewrite: ruleset 96 returns: root < @ hacker . come . or . jp > (OK)
   rewrite: ruleset  3 returns: root < @ hacker . come . or . jp >
   rewrite: ruleset  0   input: root < @ hacker . come . or . jp >
   rewrite: ruleset 97   input: root
   rewrite: ruleset  3   input: root
   rewrite: ruleset  3 returns: root
   rewrite: ruleset  0   input: root
   rewrite: ruleset  0 returns: $# local $: root
   rewrite: ruleset 97 returns: $# local $: root
   rewrite: ruleset  0 returns: $# local $: root
   rewrite: ruleset 97 returns: $# local $: root
   rewrite: ruleset  0 returns: $# local $: root
   rewrite: ruleset  3   input: $# local $: root
   rewrite: ruleset  3 returns: $# local $: root      (OK)
   >
<xmp></font>
   (4) 远程测试 
<p>
   检查发往远程用户,地址为远程计算机用户名.要求规则解释结果为:
   规则 3:采用smtp转发给相应的远程用户.
<font size=-1>
<xmp>
   % /usr/lib/sendmail -bt -C./hacker.cf
   ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
   Enter <ruleset> <address>
   > 0,3 root@dlut.edu.cn
   rewrite: ruleset  0   input: root @ dlut . edu . cn
   rewrite: ruleset 97   input: root @ dlut . edu . cn
   rewrite: ruleset  3   input: root @ dlut . edu . cn
   rewrite: ruleset 96   input: root < @ dlut . edu . cn >
   rewrite: ruleset 96 returns: root < @ dlut . edu . cn >
   rewrite: ruleset  3 returns: root < @ dlut . edu . cn >
   rewrite: ruleset  0   input: root < @ dlut . edu . cn >
   rewrite: ruleset 88   input: < smtp : dlut . edu . cn > . root < @ 
                                                dlut . edu . cn >
   rewrite: ruleset 88 returns: $# smtp $@ dlut . edu . cn . $: root < @ 
                                                dlut . edu . cn >
   rewrite: ruleset  0 returns: $# smtp $@ dlut . edu . cn . $: root < @ 
                                                dlut . edu . cn >
   rewrite: ruleset 97 returns: $# smtp $@ dlut . edu . cn . $: root < @ 
                                                dlut . edu . cn >
   rewrite: ruleset  0 returns: $# smtp $@ dlut . edu . cn . $: root < @ 
                                                dlut . edu . cn >
   rewrite: ruleset  3   input: $# smtp $@ dlut . edu . cn . $: root < @ 
                                                dlut . edu . cn >   (OK)
   rewrite: ruleset  3 returns: < @ dlut . edu . cn >
   >

(d) 安装sendmail.cf 

停掉当前正在运行的sendmail进程.然后针对您的系统环境将经过上述测试的CF 文件复制到相应的目录中,
再重新起动sendmail即可. 

% ps ax | grep sendmail
% kill sendamil-PID
% cp ./hacker.cf /etc/mail/sendmail.cf (Solaris 2.X)
% /usr/lib/sendmail -bd -q15m 

                                     (钱飞/fei@come.or.jp)

--
※ 来源:.碧海青天 bbs.dlut.edu.cn.[FROM: 202.118.65.49]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:207.552毫秒