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)
页面执行时间:214.851毫秒