Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[转] 十分钟安装带认证的sendmail

 关闭 [复制链接]
Crossday 发表于 2003-4-3 09:43:25 | 显示全部楼层 |阅读模式
摘要
  有一天,你的老板对你说,今天上午给我装出一个邮件服务器来,必须在Linux平台上,带认证的!你赶快翻出这篇文章来看一看,也许能够保住工作。哈哈!(2003-03-12 08:56:52)

--------------------------------------------------------------------------------
By atan


前言

  有朋友找到我,让我帮忙配置一台邮件服务器。我的这位朋友也是适用Linux有一段时间的了,并且他还在Linux上开发了几个软件。他愁眉苦脸的跟我说,以前没配过sendmail,在网上查找了一些资料,每每看到文章开头写道:“配置sendmail是一项庞大而复杂的系统工程....”还没读完就晕倒过去。苏醒后,就来找我了,问我能不能有什么速成之类的办法,因为他根本不想研究sendmail是怎么工作的,就想搭建起来能完成工作就可以了。

  我决定帮助他解决他所遇到的问题,于是在下班后翻出以前配置邮件服务器的笔记,花了10分钟左右就在他的新安装一台服务器上运行起来了一个邮件服务器(甚至比配置IIS的邮件服务器还快)。在回家的路上,我边开车边想:要是配置所有服务器都能按照一个简单的步骤完成(就想开车一样),那使用Linux的人不就更多了吗?这里的核心就是一个比较通用的配置文件,并且他还时带SMTP认证的,既然我已经有了这个成果,为什么不和更多的初学者分享呢?也许这就是开放源码社区的精神吧。让我们开始:

  按照这个步骤,只要十分钟就可以配置出一个带有SMTP认证的邮件服务器。当然了,邮件服务器需要配置DNS的MX记录和指向等这里就不讨论了。另外主机名和网络配置也要制定好。还有,基本的Linux命令你要知道一些。

[准备工作]

下面这两项工作是必须要准备好的:

1、安装RedHat7.3,缺省安装即可,但是要保证选装了sendmail
2、下载qpopper4.0.3.tar.gz,这个是pop3服务器的源码。(在网上搜索一下,很多的)
3. Crossday: 可能的下载地址 http://www.eudora.com/qpopper/  http://core.ring.gr.jp/archives/ ... qpopper4.0.5.tar.gz
[开始计时]

1、复制qpopper4.0.3.tar.gz到/usr/local/src
2、tar zxvf qpopper4.0.3.tar.gz 释放压缩文件
3、cd qpopper4.0.3 进入子目录
4、./configure --prefix=/usr --exec-prefix=/usr --enable-standalone
5、make
6、make install 这一步可能会出错,主要是man文件的目录没有事先建立。执行:mkdir /usr/man;mkdir /usr/man/man8即可(或根据提示进行,希望你能够看得懂出错的地方)。
7、编辑:/etc/mail/sendmail.mc把下面的内容完全覆盖进去:注意下面的第13行中XXX.com改成你的域名:

divert(-1)
dnl This is the sendmail macro config file. If you make changes to this file,
dnl you need the sendmail-cf rpm installed and then have to generate a
dnl new /etc/sendmail.cf by running the following command:
dnl
dnl        m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')
VERSIONID(`linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
dnl Uncomment and edit the following line if your mail needs to be sent out
dnl through an external mail server:
dnl define(`SMART_HOST',`XXX.com')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
dnl define(`STATUS_FILE', `/etc/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl The '-t' option will retry delivery if e.g. the user runs over his quota.
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
dnl and not on any other network devices. Comment this out if you want
dnl to accept email over the network.
dnl DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')
dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl       a kernel patch
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not have 24x7 DNS do need this.
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
dnl FEATURE(`relay_local_from')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
Cwlocalhost.localdomain


8、在/etc/mail中执行m4 sendmail.mc > /etc/sendmail.cf
9、编辑/etc/mail/local-host-names增加你的域名XXX.com进去。
10、启动:/etc/init.d/sendmail restart
11、启动:/usr/sbin/popper xxx.xxx.xxx.xxx:110 (其中xxx.xxx.xxx.xxx是你的IP地址)
12、useradd -g mail ABC (增加一个用户名)
13、配置你的客户端,别忘了配置SMTP认证,试验一下用户ABC能不能使用了?

  恭喜你!你已经有了一个带由SMTP认证的邮件服务器了。不过要完成更复杂的配置,就要仔细研究一下sendmail的mc命令了。你还可以考虑一下,如何让用户自行修改密码呢?答案就是用/usr/sbin/passwd命令作为用户的shell,这样,就可以让用户登陆上来修改自己的密码了。当然,现在有现成的图形界面工具:chpasswd软件是专门修改系统用户密码用的,以后我们再介绍了。

ps 另一篇不错的sendmail安装介绍 http://www.pku.edu.cn/academic/pkucc/zhinan/sendmailv8.htm
 楼主| Crossday 发表于 2003-9-19 19:29:54 | 显示全部楼层

附上一篇很纷杂的sendmail.cf常规配置说明

sendmail.cf生成器说明(1)

发信人: albin (阿乐斌), 信区: LINUX
标  题: LINUX选修课讲义:sendmail.cf生成器说明(1)
发信站: 碧海青天 (Fri Jun 11 21:34:40 1999), 转信

版权声明:
    本文内容为大连理工大学LINUX选修课讲义,欢迎大家转载,但禁止使用本材料进行
    任何商业踉或赢利性活动。转载时请保留本版权声明。

    作者:何斌武,hbwork@dlut.edu.cn,大连理工大学网络中心,April 1999.

    URL: ftp://ftp.dlut.edu.cn/pub/PEOPLE/albin/

原著: Eric Allman

------------------------------------------------------------------------------

    感谢我的导师钱飞教授(http://come.or.jp/~fei/)多年来对大工校园网建设的无私帮
助及对我的热心指导,在他的帮助下,大工校园网建设取得了一定的成绩,我也从他那学
到了很多,不仅是专业方面的知识,更多的是如何待人,如何作人。
--------------------------------------------------------------------------------

                定制自己的sendmail配置文件sendmail.cf

一.M4 的简要介绍
    Sendmail使用M4宏处理器来“编译”其配置文件。对于M4来说,最重要的是要知道
M4是基于流处理的,也就是说,M4并不理解行内容。因此在一些地方你可能看到类似于
类似于表示"delete through newline"的词dnl;在M4可通过使用dnl删除所有以dnl开始
的包括换行符的所有字符。在大多数情况下sendmail使用这一功能以避免在其输出中含
有过多的不必
要的空行。
   其他重要的指令(directive)是define(A,B),可用此指令定义宏A的值为B。当读到这
些宏的时候将会进行宏扩展,但可使用对两个值均用单引号以防止扩展。如下所示:
   define('SMART_HOST','smart.foo.com')

警告:M4的宏即使在注释行中也将进行扩展,如下行:

    # See FEATURE(foo) above
   在其输出结果中并不会以你所期望的形式出现,因为M4将会对FEATURE(foo)进行扩展,
   这一情况同样适用于如下情况:

    # And then define the $X macro to be the return address

   因为define是M4的一个保留关键字。如果你想使用M4关键字则应用单引号将其包含起来
   ,如'like this'.

二、定义操作系统类型变量:OSTYPE
    在定义文件中必须定义一个操作系统环境变量,否则配置文件的生成将会中断(puke).
有若干个操作系统环境变量可用,具体可到ostype目录下查看当前可用变量的列表。这一
变量将会更改象别名文件及邮件排队目录等的位置。这些文件中的一部分是彼此相同的。
    在定义文件中OSTYPE必须在所有的MAILER定义之前。通常情况下,OSTYPE宏定义应
紧跟在版本(version)信息之后,而MAILER定义总是在定义文件的最后。
    一般情况下操作系统定义写起来。他们可以定义如下变量(如所有的均使用默认值则
相应的ostype文件可以为空)。但因为所列出的已支持操作系统不象源代码支持系统那样
广泛,因此在源代码中可能并未包括相应的ostype文件。
变量名                  说明(方括号中为默认值)
ALIAS_FILE              [/etc/aliases] 文件格式的alias文件位置。可以使用
                             以逗号分开的文件名列表(但要确认使用引号将含有逗
                           
号的值括起来,如:define('ALIAS_FILE','a,b'),将a,b作为alias文件的列表,如未引号
                                             则define()只能看到一个"a")
HELP_FILE               [/usr/lib/sendmail.hf] 此文件中含有对SMTP的HELP
                             命令进行响应时要列出的信息。
QUEUE_DIR               [/var/spool/mqueue]邮件队列文件所在目录
STATUS_FILE             [/etc/sendmail.st]此文件中含有状态信息
LOCAL_MAILER_PATH       [/bin/mail]用于投递本地邮件的程序
LOCAL_MAILER_FLAGS      [rmn]local mailer要用到的标志,永远包含标志lsDFM。
LOCAL_MAILER_ARGS       [mail -d $u]在投递本地邮件时所传送的参数。
LOCAL_MAILER_MAX        [undefined]如定义了此参数,则为此邮件服务器所能接收
                        的本地邮件大小。
LOCAL_MAILER_CHARSET    [undefined]如果定义了此参数,则被转化为MIME格式的从
                        其他地址到local mailer的含有8位字符的信息将被标为此字符集。
LOCAL_SHELl_PATH        [/bin/sh]用于投递经过管道处理的邮件的shell.
LOCAL_SHELL_FLAGS       [eu]prog mailer用到的标志。在此标志中永远包含标志
                        lsDFM.
LOCAL_SHELL_DIR         [$z:/]shell运行时所要查找的目录路径。
USENET_MAILER_PATH      [/usr/lib/news/inews]用于提交news的程序名称。
USENET_MAILER_FLAGS     [rlsDFMmn]usenet mailer的投递标志。
USENET_MAILER_ARGS      [-m -h -n]usenet mailer的命令行参数。
USENET_MAILER_MAX       [100000]usenet mailer所能接收的最大信息大小。
SMTP_MAILER_FLAGS       [undefined]SMTP mailer附加标志。对所有基于SMTP的
                        mailer其默认标志为mDFMUX;基于esmtp的邮差(mailer)
                        加上'a'标志;而基于"smtp8"的邮差则加上'8'。
SMTP_MAILER_MAX         [undefined]使用smtp,smtp8或esmtp邮差所能传输的信息最
                        大容量。
SMTP_MAILER_ARGS        [IPC $h]传递给smtp邮差的参数。仅当您需要改变默认端口
                        时才需要更改此参数。
ESMTP_MAILER_ARGS       [IPC $h]传递给esmtp邮差的参数。
SMTP8_MAILER_ARGS       [IPC $h]传递给smtp8邮差的参数。
RELAY_MAILER_ARGS       [IPC $h]传递给relay邮差的参数。
SMTP_MAILER_CHARSET     undefined]如果定义了此参数,则被转化为MIME格式的从
                        其他地址到任一个smtp mailer的含有8位字符的信息将被标为此字符集。
UUCP_MAILER_PATH        [/usr/bin/uux]用于发送uucp邮件的程序。
UUCP_MAILER_ARGS        [undefined]
UUCP_MAILER_ARGS        [uux - -r -z -a$g -gC $h!rmail ($u) ]
UUCP_MAILER_MAX         [100000]
UUCP_MAILER_CHARSET     [undefined]
FAX_MAILER_PATH         [/usr/local/lib/fax/mailfax]用于提交FAX信息的程序。
FAX_MAILER_ARGS         [mailfax $u $h $f]传递给FAX邮差的参数。
FAX_MAILER_MAX          [100000]FAX所能接收的最大信息容量。
POP_MAILER_PATH         [/usr/lib/mh/spop]pop邮差的路径名。
POP_MAILER_FLAGS        [Penu]pop邮差附加标志。同时总是加上标志lsDFM。
POP_MAILER_ARGS         [pop $u]传给pop邮差的参数。
PROCMAIL_MAILER_PATH    [/usr/local/bin/procmail]procmail程序的路径名。此外
                        FEATURE(local procmail)也用到此参数。
PROCMAIL_MAILER_FlAGS   [SPhnu9]加给Procmail邮差的标志。同时总是加上"DFM"标
                        志。但FEATURE(local procmail)不用此参数而用到参数      
                        LOCAL_MAILER_ARGS.
PROCMAIL_MAILER_MAX     [undefined]procmail邮差所接收的最大信息容量。
MAIL11_MAILER_PATH      [/usr/etc/mail11]
MAIL11_MAILER_FLAGS     [nsFx]
MAIL11_MAILER_ARGS      [mail11 $g $x $h $u]
PH_MAILER_PATH          [/usr/local/etc/phquery]phquery程序的位置。
PH_MAILER_FLAGS         [ehmu]
PH_MAILER_ARGS          [phquery -- $u]
CYRUS_MAILER_FLAGS      [A5@]
CYRUS_MAILER_PATH       [/usr/cyrus/bin/deliver] The progam used to deliver
                        cyrus mail.
CYRUS_MAILER_ARGS       [deliver -e -m $h -- $u] The arguments passed to
                        deliver cyrus mail.
CYRUS_MAILER_MAX        [undefined] If set, the maximum size message that
                        will be accepted by the cyrus mailer.
CYRUS_MAILER_USER       [cyrus:mail] The user and group to become when
                        running the cyrus mailer.
CYRUS_BB_MAILER_FLAGS   [undefined] The flags used by the cyrusbb mailer.
                        The flags lsDFMnP are always included.
CYRUS_BB_MAILER_ARGS    [deliver -e -m $u] The arguments passed to deliver
                        cyrusbb mail.

三、定义域:DOMAIN
   可以将所有于网域(DOMAIN)有关的定义写入一个文件,在定义文件中使用宏
DOMAIN来引用此文件。比如,在示例文件Berkeley域文件中包含了若干内部目标主机的定义。
UUCP_RELAY              这个主机接收UUCP格式的邮件。如果未定义,则所有的UUCP
                        必须直接相连。
BITNET_RELAY            这个主机接收 BITNET地址格式的邮件。如果未定义此变量
                        则.BITNET伪域格式的邮件不能工作。
DECNET_RELAY            接收DECNET地址格式邮件的主机。如果未定义,则.DECNET
                        伪域格式及node::user格式的邮件不能工作。
FAX_RELAY               接收到.FAX伪域邮件的主机。在定义文件中的fax邮差将会
                        覆盖此值。
LOCAL_RELAY             不赞成使用此项。这个主机将处理所有的不含有@domain的
                        邮件。如未设定此项,则假设这样的邮件由本服务器处理。
                        这允许您建立一个主控服务器,在此主机中存有整个公司
                        或部门的别名数据库。这一情况只适用于小型场合并且需要
                        有一些用户代理。
LUSER_RELAY             这一主机将处理所有的lusers, 即那些非本地帐号或别名但
                        其形式上却明显表明为本地名称的邮件。

   所有这些可用"mailer:hostname"(mailer为内部邮差名,如uucp-new, hostname为
此邮差相应的主机名)或只用一个"hostname",后一种情况使用一个默认邮差类型(通常
为"relay",SMTP之变型)。
   警告:如果你对自已的网域设定了一个通配符的MX记录,则在定义这些变量时应使
用以点结束的主机名,以免你发出的邮件又返回到自已的主机上。
   必要时在域(domain)文件中也可以定义一个网域(使用"DD")并设定相应与此
域有关的特性。如果希望使用同一个邮件名称对你的主机进行伪装,可在此处使用
MASQUERADE_AS.
   设定域文件不是必须的--尤其是你只使用一个单机并与其他场合相分离时就无须使用
此设置。使用此机制只是为了将所有于网域有关的信息放同一个文件中。


四、定义邮差:mailer
   sendmail 8.8.6版所支持的邮差类型较以前的版本要少,因为当前的网络类型较以
前要简单。总的来说,在你的.mc文件的最后写入mailer定义,MAILER(stmp)永远位于
MAILER(uucp)之前--因为一些特性及定义可能修改其他邮差(mailer)的定义,如SMTP
邮差将会修改UUCP邮差的定义。
邮差类型                说明
local                   local及prog邮差。大多数情况下你需要此邮差除非要将你
                        所有的邮件中继到另一个主机。此邮差将自动包含。
smtp                    简单邮件传输协议(Simple Mail Transport Protocol)邮
                        差。SMTP不能将主机隐藏在网关或其他相关细节之后;它
                        假设所有的主机均运行名字服务器。实际上此邮差定义了
                        四个邮差:smtp为到其他服务器的常规(旧格式)SMTP邮差,
                        esmtp为扩展SMTP,smtp8到其他服务器的SMTP邮件不进行
                        8位数据到MIME格式的转换(当然此时你已知道另一端的
                        服务器可进行完全的8位数据处理),relay则进行到SMART
                        HOST/LUSER RELAY/MAIL HUB的邮件传输。
uucp                    Unix-to-Unix Copy Program mailer.实际上此定义包括
                        了两个邮差:"uucp-old"(也称为uucp)和"uucp-new"(也称
                        为suucp).
usenet                  Usenet(network news) delivery. 如果指定了此邮差,
                        将在规则0中加入一个附加规则以实现将所有到用户
                        "group.usenet"的本地邮件转交给"inews"程序。应注意
                        这适用于所有的新闻组,因此也可能带来一些安全上的
                        问题。
fax                     FAX传输。这需要一定的专业知识并且是基于Sam Leffer
                        的HylaFAX软件。
pop                     Post Office Protocol
procmail                到procmail的接口。设计此接口主要为了用mailertables.
                        如一个常见的问题是“如何将一个指定网域的邮件转交给
                        一个用户”,如果定义了此邮差,则可以设定如下内容
                        的mailertable:
                        host.com        procmail:/etc/procmailrcs/host.com
                        其中/etc/procmailrcs.host.com内容如下:
                        :0      # forward mail for host.com
                        ! -oi -f $1 person@other.host
                        上面的设定将把所有的形式为(anything)@host.com的邮件
                        发往person@other.host.在procmail脚本中,$1是发送者
                        的名字,而$2则是接收者的名字。如果你同FEATURE(local
                        procmail)一起使用此邮差,则应先列出此特性。
mail11                  DECnet mailll邮差,仅当你有从
                        gatekeeper.dec.com:/pub/DEC/gwtools取到的mail11程序
                        (当然要有DECnet)时才有用。此程序及邮差只支持Phase
                        IV DECnet;要支持Phase V还需一些其他程序。
phquery                 phquery program.
cyrus                   cyrus and cyrusbb mailers. The cyrus mailer deliver
                        to  local cyrus user. This mailer can mke use of
                        the "user+detail@local.host" syntax, it will
                        deliver the mail to the user's "detail" mailbox
                        if the mailbox's ACL permits. The cyrusbb mailer
                        delivers to a system-wide cyrus mailbox if the
                        mailbox's ACL permits.
    local mailer可以接收"user+detail"这样格式的邮件,在此格式中"+detail"并
不用于邮箱的匹配,它主要用于一些特定的本地邮件程序(可参见
FEATURE(local_procmail)). 如"eric+sendmail"和"eirc+sww"指的是同一个用户,
但是附加的,"sendmail"和"sww"可对用户进行邮件排序提供参数。


五、定义特性:FEATURE
    可以使用宏"FEATURE"来申请一些指定特性。如在.mc文件中使用:
        FEATURE(use_cw_file)
    用上面的定义告知sendmail你需要读取文件/etc/sendmail.cw以获得类$w的值。特
性定义可有一个可选项参数---如:
        FEATURE(mailertable, dbm /usr/lib/mailertable)

可用特性列表如下:
use_cw_file             读取文件/etc/sendmail.cw以取得此主机的别名。当你使用
                        MX记录将此主机定义为其他主机的邮件交换机时可能需要使用
                        此特性。如果这些主机名是静态的,在你的配置文件中使用
                        "Cw  ..."可能更好一些。此文件名可通过
                        confCW_FILE重新定义。
use_ct_file             读取文件/etc/sendmail.ct以取得系统“信任”的用户名字,
                        这些用户可以使用-f设置其发信信封上的from地址而不产生   
                        警告信息。可以通过confCT_FILE来重新定义此文件名。
redirect                拒绝所有到"address.REDIRECT"的信件并返回(发送者)如
                        下信息:"551 User mot local; please try
". 使用此特性你可以把那些已非本地的用户用其新地址加上一 个".REDIRECT"作为其别名。 nouucp 对UUCP地址格式的邮件不作任何处理。 nocanonify 不传递地址到$[...$]进行验证。通常这一特性只有在那些作 为邮件网关的场合或者其用户代理能自已进行地址验证时使用。 此外可能要用到"define('confBind_OPTS','-DNSRCH -DEFNAMES')" 来关闭正常地址解析作与些特性类似的工作。 stickyhost 如果设置此特性,则发往"user@local.host"的邮件将被标为 “粘贴(sticky)”,也就是说,本地邮件地址不与用户数据 库(UDB,User Database)进行匹配且不通过规则5(处理)。 当需要设置"user"和"user@local.host"不同的情况下可能 需要此特性,如设置一个清楚的由网域连接的一个名字空间。 在8.7以前的版本中这一默认设置,需通过nosticky来关闭之。 mailertable 包含一个用于覆盖到特定域路由(routing)的"mailer table". 此特性参数定义可以是一个关键词定义。如未指定任何参数, 其定义通常是: hash -o /etc/mailertable 在此数据库中的关键字必须是FQDN(fully qualified domain names)或者是以.开头的局部网域名,如"vangogh.CS.Berkeley.edu" 或".CS.BERKELEY.EDY". 其值定义必须是如下形式: mailer:domain 其中"mailer"是内部邮差名称,而"domain"则是信件发发往的 网域。这个映象不影响信息的标头内容。 domaintable 包含一个用于提供域名映象的"domain table".实际上此特性的 使用应局限于你自已的网域(domain).当改变你自已的域名时 可能有用(如你公司由oldname.com改为newname.com)。 此特性的定义可以是关键词定义,如未措定任何参数,其定 义值通常是: hash -o /etc/domaintable 在此表中的关键字必须是域名;其值是新的域名(完全域名)。 在domaintable中的任何定义都将影响到信息标头,也就是 说对这一部分的处理是在规则3中进行的。 bitdomain 查看指定表中的bitnet主机并试着将其转化为internet地址。 可以通过John Gardiner Myers发布的bitdomain程序建立此 表。此特性的定义可以是关键词定义,如未措定任何参数, 其定义值通常是: hash -o /etc/bitdomain.db 此表中的关键字是bitnet主机名,值则是主机相应的Internet 主机名。 uucpdomain 与UUCP hosts特性类似。默认映象定义是: hash -o /etc/uudomain.db 现已无现成工具生成此数据库。 always_add_domain 在本地发送邮件时也加上其主机域名。通常对非完全名称不加。 但如果你使用一个共享的信息存贮却未使用相同的用户命名 空间,则在本地主机上也应加上其主机名。 allmasquerade 如果使用了伪装(masquerading,使用MASQUERADE_AS),则此特 性将使接收者的地址也伪装为来自所伪装为主机。通常此地址 为本地主机的名称。虽然这对普通用户来说是正确的,但这 也可能破坏本地的别名。比如当你发给"localalias",早先的 sendmail会查找别名数据库并将此信件发往所有的接收者,但 在其发出的邮件中将含有标题"TO: localalias@masqueradehost". 当此别名不存在时将导致此申请失败。仅当你能确保在所伪装 的主机范围内,其整个命名空间替换了所有的本地主机命名。 limitd_masquerade 通常情况下$w所列出的所有主机将被伪装。如果使用了此特 性,则只对那些$m所列出的主机进行伪装。当你在同一个主机 上使用了多个其命名空间脱节的网域时此特性将会很有用。 masquerade_entire_domain 如使用了伪装且设置了MASQUERADE_DOMAIN,此特性将引起 地址重写,使所要伪装的网域整个被隐藏。所有含有被伪装 域名的主机用伪装域名(通常是MASQUERADE_AS)进行重写。 示例如下: MASQUERADE_AS(masq.com) MASQUERADE_DOMAIN(foo.org) MASQUERADE_DOMAIN(bar.com) 则*foo.org和*bar.com将被转换为masq.com。如未使用此特性, 只有foo.org和bar.com被伪装。 注: 只能对你管辖内的网域和其下层网域可使用此特性进行伪装。 masquerade_envelope 用此特性告知sendmail将信封和信件头中上的发送者和接收 者进行伪装。 genericstable 这一特性使对本地网域或$=G中所列出网域中起始(originating) 的特定地址在镜像中查找并转化为另一格式,这一格式可以改变域名和 用户名。这与userdb功能有些类似。用于伪装的相同类型地址也被进行 查找(???),如除非当allmasquerade和/或masquerade_envelope 特性使用时才仅对信件头的发送者地址(进行查找)。这些地址必须在 由宏GENERICS_DOMAIN或GENERICS_DOMAIN_FILE(与MASQUERADE_DOMAIN和 MASQUERADE_DOMAIN_FILE很类似)中所给出的名字列表中。 FEATURE(genericstable)的参数可以是其镜像定义;其默认镜像定义是: hash -o /etc/genericstable 此表中的关键字可以是完整的地址或非完全名称(先试前者);其值则是 相应的新用户地址。如果新的用户地址未包含域名则使用$j。应注意 的是被查找的地址必须是完全的地址。对于本地邮件,则必须使用特 性FEATURE(always_add_domain)以使其地址转变为完整的地址。 virtusertable 一个指定域格式的别名允许在同一个主机上使用多个虚拟域。比如说 如虚拟用户表含有如下内容: info@foo.com foo-info info@bar.com bar-info @baz.org jane@elsewhere.net 则到地址info@foo.com的邮件将发往地址foo-info,到info@bar.com 的邮件将被发往bar-info,而到域bar.com内的任何人的地址将会发往 jane@elsewhere.net. 如起始地址中的用户名将以如下形式以%1作为 传递: @foo.org %1@elsewhere.com 则表示someone@foo.org将发给someone@elsewhere.com. 在左(手)边的主机(foo.com,bar.com和baz.org)必须在$=w中。其 默认镜像定义是: hash -o /etc/virtusertable 可在FEATURE宏定义中用第二个参数指定一个新的定义,如: FEATURE(virtusertable, dbm -o /etc/mail/virtusers) nodns 关闭DNS的使用,除非你只运行UUCP这样的网络否则不应使用此特性。 nullclient 这是一个特殊情况--它生成一个除了支持将所有的邮件通过本地的基 于SMTP的网络转递到一个中心邮件HUB之外不含任何内容的配置文件。 其参数是此邮件HUB的主机名。 唯一可与nullclient一起使用的其他特性是"nocanonify"(这样可以 使非完全地址可通过SMTP连接进行发送;通常情况下地址将使用伪装 名字转变为完全邮件名称,此伪装名字默认值为邮件HUB主机的名字)。 在此特性使用是不应定义任何邮差。当然也不进行别名处理或转寄。 local_procmail 使用procmail作为本地邮差。这个邮差可以使用"user+indicator@ local.host"格式;通常情况下+indicator将被丢掉,但在默认情况下 将用-a参数传递给procmail. 此特性的参数是procmail的路径名,此 路径的默认值是PROCMAIL_MAILER_PATH。应注意的是这一特性对本地 邮差并不使用PROCMAIAL_MAILER_FLAGS或PROCMAIL_MAILER_ARGS;相 反它使用LOCAL_MAILER_FLAGS和LOCAL_MAILER_ARGS. bestmx_is_local Accept mail as though locally addressed for any host that lists us as the best possible MX record. 这会产生一些额外的DNS传输, 但对于小到中等信息流量的主机来说完全能正常工作。这一特性与使用通 配符的MX记录不相兼容。如果你对自己网域内的所有主机使用了通配符(*) MX记录,则不应使用这一特性。 smrsh 对到程序的邮件使用使用sendmail发行版所带的SendMail Restricted SHell (smrsh)而不是/bin/sh。这可以提高本地系统管理员控制对那些通过邮件 (方式)而运行程序的能力。如果对此特性加参数的话通常是smrsh的路 径;否则假设为/usr/local/etc/smrsh. 六、Hacks 某些功能我们不能称这为特性,为了与特性进行区别,将其放到hack子目录下并通 过HACK宏来调用。通常这些均与你的特定场合有关。本发行版包含了一个与BERKELEY 域有关的HACK "cssubdomain"(这使sendmail可以Berkeley.EDU或cs.Berkeley.EDU两种 方式来接收本地邮件;如将一个主机短时间内移到子域时即可使用此功能)。 七、特定场合配置:Site Configuration 注:这一部分内容实际上已相对陈旧,只所以保留本部分内容是为了向后兼容。如果 你执行新的安装则应使用mailertables. 应特别强调的是,对于新形式的UUCP_mailers 如uucp_uudom本部分内容并不工作。 八、调整规则集合:Tweaking Rulesets 对于更为复杂的配置,你可以定义特定的规则。宏LOCAL_RULE_3将产生用于规范名字 的一组规则。在此所作的任何修改均会在邮件头上反映出来。 一个常见的情况是将老的UUCP地址使用宏UUCPSMTP转换为SMTP地址。示例如下: LOCAL_RULE_3 UUCPSMTP(decvax, decvax.dec.com) UUCPSMTP(research, research.att.com) 将使"decvax!user"和"research!user"的地址分别转换为"user@decvax.dec.com" 和"user@research.att.com"。 同样这一定义也可以用于在数据库映象中查找主机: LOCAL_RULE_3 R$* < @ $+ > $* $: $1 < @ $(hostmap $2 $) > $3 此镜象应在LOCAL_CONFIG部分进行定义,示例如后面所示。 与规则3类似,可用LOCAL_RULE_0引入一个新的地址解析规则。比如你可以根据需 要加入新的规则用以解析通过MX记录所接收的主机名。如下所示: LOCAL_RULE_0 R$+ <@ host.dom.ain.> $#uucp $@ cnmat $: $1 < @ host.dom.ain.> 当有对cnmat.Berkeley.EDU的MX记录指向此主机时你可能需要上面的规则;这个 规则将捕捉到此域的信息并将其通过UUCP转发到目的地。 同样你也可以用LOCAL_RULE_1和LOCAL_RULE_2修改规则1和2,通常情况下这两个 规则集是空的。 此外还有一个很类似的宏LOCAL_CONFIG.这个宏可在固定选项设置之后但在规则定 义之前加入一些定义,可用于声用本地数据库镜像或其他任何东西。如下所示: LOCAL_CONFIG Khostmap hash /etc/hostmap.db Kyplocal nis -m hosts.byname 九、伪装及中继:Masquerading and Relaying 可以使用如下行将你的主机伪装为另一个主机: MASQUERADE_AS(host.domain) 这使得人此主机发出的信件将被标上来源于指定的主机host.domain,而不是$j. 常见的伪装是将自己的主机伪装为自己的子域(比如,我不可能伪装为一个MIT的域)。 这个行为可以被若干特性所修改;特别是masquerade_envelope,allmasquerade, limited_masquerade和masquerade_entire_domain. 所伪装成的名字不进行正常的验证,因此很重要的一点是你的一个真实名称,也就 是说是一个完整的主机名而不是别名(CNAME).但是如果使用了一个别名(CNAME),则接收 方可以对其进行完整性验证,因此不能通过这种方式来欺骗CNAME镜像。 通常被伪装的地址只是那些来源于此主机的地址(也就是说是非完全名称或者是在 $=w中所给出的本地域名)。可以通过如下方式扩大此列表: MASQUERADE_DOMAIN(otherhost.domain) 如上定义的作用是虽然所有到user@otherhost.domain的信件不会在本地进行发送, 但所有包含user@otherhost.domain的信件被中继时其地址将被重写为含有MASQUERADE_AS 的地址。在此定义中的参数可以是以空格分开的名字列表。 如果这些主机名是在一个文件中,则可以使用如下定义从此文件中读取主机名列表: MASQUERADE_DOMAIN_NAME(filename) 通常情况下只有邮件头的地址将被伪装。如还希望将信封地址进行伪装,则应使用: FEATURE(masquerade_envelope) 但总是有一些用户不应被伪装--也就是说,应该使用其内部名而不应是伪装后的地址。 Root即是一例。可以用如下定义增加此用户列表: EXPOSED_USER(usernames) 这将加入用户到类E中;同时你有可能需要如下行: FE/etc/sendmail.cE 你也可以将所有的非完全名字(不合格的,即那些不含@host的名字)中继到一个 中继主机上去。比如当你有一个中心邮件服务器时,你可以将其中继到此主机上,这样 用户就不用建立自己的.forward文件或别名。可以通过如下行实现此功能: define("LOCAL_RELAY",mailer:hostname) 当mailer为默认值"relay"时可以省略此参数。此外如果有一些用户你不想他们的邮 件被中继,如当你对其建有本地别名时就不希望对其邮件进行中继。root即是最常见的 一例,因为通常root被作为本地别名处理。可用如下行增加此用户列表: LOCAL_USER(usernames) 上面一行向类L中加入用户;实现类似功能也可用下行: FL/etc/sendmail.cL 在使用共享邮件缓冲区/var/spool/mail时,你可能需要所有进来的邮件都发往一个 中心邮件HUB上,对此可使用下行: define('MAIL_HUB',mailer:hostname) 与上面一样,"mailer"为默认值"relay"时可以省略。如果你同时定义了LOCAL_RELAY 和MAIL_HUB且使用了FEATURE(stickhost),使用非完全名称的邮件将发往LOCAL_RELEY 而其他用本地名称的邮件将发往MAIL_HUB. 在$=L中的所有邮件名将会在本地进行发送, 因此对这些用户你必须建立.forward文件或使用别名。 假设你在主机mastodon.CS.Berkeley.EDU上并且使用了FEATURE(stickyhost),则如下 组合的设置将会有如下效果: email sent to.... eric eric@mastodon.CS.Berkeley.EDU LOCAL_RELAY set to mail.CS.Berkeley.EDU (delivered locally) mail.CS.Berkeley.EDU (no local aliasing) (aliasing done) MAIL_HUB set to mammoth.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU (aliasing done) (aliasing done) Both LOCAL_RELAY and mail.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU MAIL_HUB set as above (no local aliasing) (aliasing done) 如果未使用FEATURE(stickhost)设置则LOCAL_RELAY和MAIL_HUB作用相同,只是 MAIL_HUB优先处理而已。 如果希望所有发出去的信件均通过一个中央中继节点统一处理的话,也可以定义 SMART_HOST。总结如下: .LOCAL_RELAY用于那些非完整的名字(如"eric") .MAIL_HUB用于那些由本地主机名组成的完全名称(如"eric@mastodon.CS.Berkeley.EDU") .SMART_HOST用于使用其他主机形成的完全名称。 但是我们应该清楚其他的中继(如UUCP_RELAY,BITNET_RELAY,DECNET_RELAY以及 FAX_RELAY)的处理要比SMART_HOST优先级高,因此如果你真的希望一切邮件均通过 一个独立的中央节点时则不应定义其他的中继--更好的方法是找到或建立一个能达到 此功能的最小配置文件。 为了防止不必要的主机名重复,保持邮件系统正常工作,最好在指定主机名时以 点结束。如下: define(`MAIL_HUB', `host.domain.') 注意结尾处的点 ---^ 十、加入新的邮差和规则集(Adding New Mailers or Rulesets) 有时你可能需要加入一个全新的邮差(Mailer)或规则集(ruleset).对此二者的定义 则应分别使用结构MAILER_DEFINITIONS和LOCAL_RULESETS。如下所示: MAILER_DEFINITIONS Mmymailers,... ... LOCAL_RULESETS Scheck_relay ... 十一、非基于SMTP的配置 主要如于如UUCP-ONLY或UUCP_primarily节点,本部分略。 12. 主机名定义:Who Am I 通常情况下宏$j自动定义为所在主机的完整网域名称(Fully Qualified Domain Name, FQDN). Sendmail 先调用gethostname然后再调用gethostbyname以得到你的主 机名。比如在有些情况下gethostname只返回主机名的基本部分(如"foo");而gethostbyname 返回FQDN("foo.bar.com"). 但有时(实际上很少如此),gethostbyname不能返回FQDN. 此时你应该用confDOMAIN_NAME来定义你的完整网域名称FQDN.通常其定义格式如下: Dmbar.com define(`confDOMAIN_NAME', `$w.$m')dnl 13. 定义邮差表(Mailertable) 如要使用FEATURE(mailertable),你必须创建一个外部的数据库,此数据库中含有 到不同网域的路由信息。 比如文本格式的mailertable文件内容如下: .my.domain xnet:%1.my.domain uuhost1.my.domain suucp:uuhost1 .bitnet smtp:relay.bit.net 通常此文件存在/etc/mailertable中,而其实际的邮差数据库则通过如下方式建立: makemap hash /etc/mailertable.db < /etc/mailertable 其语法很简单。所有左过的(LHS,Left Hand Side)不是以点开头的记录匹配所指定 的完整主机名,而以点开始的则指任何以此域名结尾的地址--即同以通配符*开始一样。 此匹配是按所能匹配的多少来完成的--比如说,在如上示例中虽然先列出了.my.domain ,但"uuhost1.my.domain"却要使用第二个进行匹配,因为后者更清淅。 ----未完待续----- -- ※ 来源:.碧海青天 bbs.dlut.edu.cn.[FROM: helius.dlut.edu.]
回复

使用道具 举报

take5 发表于 2003-10-8 17:27:50 | 显示全部楼层
有空试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-23 01:13 , Processed in 0.025794 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表