1楼
大 中
小 发表于 2003-7-8 08:34 只看该作者
Re:Sendmail大全
7.1.3 sendmail 的相关文件
我们在define和feature相关的子句中讨论了一些sendmail的相关文件,现在我们来解 释这些文件的用法。这些文件的名字通常都可以在对应的mc子句里面更改。
主机别名
首先是/etc/sendmail.cw。这个文件非常简单,它给出本地主机的别名。如果你的主 机有多个名字,或者你的主机是整个域的信件交换主机,你就需要这个文件了。例如, 按照我们在前面的那个配置,mail.asnc.edu.cn是asnc.edu.cn域的信件交换主机,所以 我们需要在sendmail.cw里面写上这样一行:
$ cat /etc/sendmail.cw
# sendmail.cw - include all aliases for your machine here.
asnc.edu.cn
如果你有多个别名或者需要负责的交换域,每个需要单独写上一行。
用户别名
接下来的文件是/etc/mail/aliases,这个文件用来设置用户的别名。最简单的情况是 需要作信件分发的情况。例如,一般情况下,电子邮件出现问题的时候,我们需要把出 错的邮件头发送到本机的postmaster用户,但是也许你的系统上有多个系统管理员,因 此每个人都需要得到一份这个邮件头的拷贝。这种情况下就需要使用用户别名文件了。
aliases文件的格式是邮件别名:实际用户名,如果一个别名有多个用户就用逗号分开 ,每个别名一行。例如,要把发给postmaster的信件发送给supervisor和manager,需要 写上这样一行:
postmaster:supervisor,manager
别名还可以用在这样的情况,即定义自动的邮件转发。例如,某个用户以前在你的系 统上接受电子邮件,现在他有了一个新的电子邮件,希望发到你的机器上的邮件自动被 转发到他新的电子邮件地址上,那么,可以使用类似这样的别名方式:(假设你的机器是 joe@yourdomain.com)
joe:joe@newaddr.com
以后发给joe@yourdomain.com的电子邮件就自动中转到joe@newaddr.com。注意左边自 动加上你的机器名字,所以左边只能是账号名字,不能是全限定邮件地址。
别名的右侧也可以是文件或程序。例如,上面的postmaster别名可以用这样方法来设 置:
postmaster::include:/etc/mail/myaliases
include:关键字表示让sendmail去读取对应的包含文件。而/etc/mail/myaliases的 内容要设置成:
supervisor
manager
就可以了。
要把邮件重定向到程序,可以使用管道,例如:
test_param:"|/home/test/test"
那么,sendmail会将发给test_param的邮件的内容作为/home/test/test程序的输入来 执行这个程序。
在修改了别名文件之后,需要用-bi参数重新初始化别名数据库:
sendmail –bi
另一个常用的办法是重定向。如果你在模板文件中定义了REDIRECT特性,那么可以使 用这个功能。例如,某个人在你的机器上开了一个账户user1,后来迁移到user2@serve r2.com。那么,你可以将其别名写成
user1: user2@server2.com.REDIRECT
以后当有人向这个地址发信的时候,你的sendmail会将其退回,并且返回一个551 Us er not local; please try user2@server2.com的信息。
在使用别名的时候,必须注意的是不要造成循环,例如user1转发给user2,user2又将 其转发给user1....如此循环。在这种情况下,转发17次后,sendmail将把它退还给发信 人。最常见的错误发生在你试图在转发邮件的同时在本地保留备份的情况下,例如:
user1: user1,user2
就构成了一个循环。
要在本地保留备份,使用转义符号,例如
user1: user1,user2
建立了别名文件之后,需要将其初始化,这可以通过newaliases命令完成:
[root@mail mail]# newaliases
/etc/aliases: 17 aliases, longest 31 bytes, 241 bytes total
也可以使用sendmail –bi命令:
[root@mail mail]# sendmail -bi
/etc/aliases: 17 aliases, longest 31 bytes, 241 bytes total
两种方式实际是完全一样的。
类似于通过aliases文件进行邮件转发,用户也可以使用自己的转发文件,例如,某个 用户user1想让发送给自己的邮件全部转发到user2@domain.com,但是又不希望建立全局 的用户别名,那么可以在自己的宿主目录下面建立一个.forward文件,内容只要一行:
user2@domain.com
就可以了。
这种技术可以让每个用户自己管理自己的邮件别名。
允许投递 允许投递
如同我们说的那样,smtp协议是不需要身份认证的,也就是说任何人都可能telnet到 你的25端口并且发送莫名其妙的邮件。为了避免不必要的麻烦,比较高版本的sendmail 缺省直接禁止其他不明身份的机器利用你的系统投递邮件。这种情况下,一个非本地的 机器使用你的系统投递会产生一个"550 relay denied"错误。但是如果你要作一个邮件 服务器,你终究得打开投递代理功能。
sendmail的第一个投递代理设置文件是relay-domains。这个文件是一个简单的文本文 件,文件的缺省名字是/etc/mail/relay-domains,可以在confCR_FILE中定义。内容类 似这样:
yourdomain.com
#所有*.yourdomain.com的机器可以使用你的机器作为smtp服务。
192.168
#所有192.168.*.*的机器可以使用你的机器作为服务
/etc/mail/relay-domains文件是一个简单文本文件,当需要投递的域很多的时候,其 效率不是很高。因此,sendmail还可以使用access.db来设定哪些地址的机器可以连接到 你的25端口投递信件。这个文件的缺省名字是/etc/mail/access.db,但是可以用FEATU RE(access_db)来修改(例如:FEATURE(access_db,`hash –o /etc/access)。
一般/etc/mail/access.db是一个散列表数据库,它是用/etc/mail/access为模版产生 出来的。/etc/mail/access文件的格式是这样:
[地址] [操作]
中间的分割符是空格键。
[地址]栏可以是主机地址或者名字,也可以是统配符,规则是这样:
yourdomain.com 代表所有*.yourdomain.com的名字。
192.168.12 代表所有192.168.12.*的地址。
202.135 代表所有202.135.*.*的地址。
someone@somedomain.com 代表一个特定的邮件发信人
而在每个地址后面可以跟上相应的操作,通常的操作有
OK 正常接受这封邮件
RELAY 允许SMTP代理投递,这样这封邮件就可以从你的机器中转到别的机器上去
REJECT 拒绝接受
DISCARD 忽略这封邮件,这种情况下,邮件看上去是正常投递了,但是由于没有人接 受,邮件会自动地“消失”在网络中。
错误代码+任何其他字符串:将向发信者返回这个字符串作为出错信息。错误代码是R FC 822定义的标准出错代码。例如
550 We don like a spammer!
客户机器在投递邮件的时候,就会产生一个“we don like a spammer”投递失败信 息。比如,你认为someone@spammer是个专门投递垃圾邮件的家伙,那么你可以这样写:
someone@spammer 550 we don like a spammer
修改了access文件之后,需要重新生成一下access.db,这可以用makemap命令完成:
makemap hash access.db < access
然后重新启动sendmail就可以使用这些功能了。
虚拟域
如同Apache一样,sendmail也允许使用虚拟主机功能,这是通过FEATURE(virtuserta ble)功能实现的,而虚拟主机的文件缺省是/etc/mail/virtusertable.db,它用/etc/m ail/virtusertable文件生成,这个文件的形式类似于aliases文件,即左地址 右地址 ,中间用Tab键分开。例如:
someone@otherdomain.com localuser
这样一行意味着本来应该发送给someone@otherdomain.com的邮件现在要发送给本机的 用户localuser。当然,这意味着:第一,你的DNS记录中,本机应该是otherdomain.co m的MX交换器;第二,你的本机sendmail.cw文件应该包含otherdomain.com这个名字。
当然纯粹的这样的域意义不大,但是sendmail还支持邮件虚拟域的参数翻译。例如:
@testdomain.com test@mydomain.com
意味着所有发往xxx@testdomain的邮件都会被发送到test@mydomain.com。而
@testdomain.com %1test@mydomain.com
则代表参数转义,例如user1@testdomain.com的邮件被发送到user1test@mydomain.c om,user2@testdomain.com被发送到user2test@mydomain.com。同样,这样的功能也要 通过MX记录和CW文件加上去。
建立virtusertable的方法与建立access的办法是一样的:
makemap hash virtusertable.db < virtusertable
然后重新启动sendmail。
定义邮差
/etc/mail/mailertable文件(在FEATURE(`mailertable’)里定义)用来定义对某个 域名或者用户使用什么样的邮差,如local:user,smtp:mail.test1等等。一般情况下, 并不需要定义这个功能。建立这个文件的方式与上面的几个hash数据库相同。
需要注意的是,当前版本的sendmail对各种附加文件和配置文件的属性都有着严格的 要求,特别是/etc/aliases文件,必须至少为0644以避免非授权的修改。
来源:水木清华BBS
1.为了安全,请不要在发帖时公布你的真实IP及域名;请在获得别人的帮助问题解决之后,编辑帖子分类为[已解决],并同样帮助有能力帮助的人--分享您的经验,分享大家的快乐!
2.专业提供邮件系统选型\安装部署\升级迁移\维护外包等全方位技术支持与咨询顾问服务;提供反垃圾邮件软件、硬件网关;Push Mail(移动电邮),BlackBerry(黑莓) 解决方案。
3.联系方式:QQ:36335336;MSN:neil_ding#msn.com;Email: neil_ding2000#yahoo.com.cn;TEL:020-84066934
|