Linux 版 (精华区)

发信人: zhili (北侠), 信区: twunix
标  题: 电子邮件环境之生成(2)(钱飞著)
发信站: 哈工大紫丁香 (Mon Jan  5 04:22:46 1998), 转信

 From: albin.bbs@bbs.dlut.edu.cn (阿乐斌)
 Date: 16 Oct 1997 12:14:35 GMT

===============================================================================

 【专题介绍】 
                                    大规模计算机网络主要服务之管理方法
                                                     (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]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bbs@bbs.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:208.420毫秒