[root@www ~]# ls -l /etc/postfix/access* -rw-r--r--. 1 root root 19648 2011-08-09 14:05 /etc/postfix/access -rw-r--r--. 1 root root 12288 2011-08-09 14:08 /etc/postfix/access.db # 你会发现有个 access.db 的档案才会同步更新!这才是 postfix 实际读取的! 用这个档案设定最大的好处是,你不必重新启动 postfix,只要将数据库建立好, 立刻就生效了!这个档案还有其它的进阶功能,你可以自行进入该档案查阅就知道了。但是进阶设定还需要 main.cf 内的其他参数有设定才行!如果只有之前 $mynetworks 的设定值时,你只能利用 access.db 的方式来开放 relay 的能力而已。不过,至少他可以让我们的设定简化啰! ^_^
22.2.7 设定邮件别名: /etc/aliases, ~/.forward
想一想,你的主机里面不是有很多系统账号吗?例如 named, apache, mysql..., 那么以这些账号执行的程序若有讯息发生时,他会将该讯息以 email 的方式传给谁?应该就是传给 named, apache... 等账号自己吧。 不过,你会发现其实这些系统账号的信息都是丢给 root! 这是因为其他的系统账号并没有密码可登入,自然也就无法接收任何邮件了,所以若有邮件就给系统管理员啰。不过,咱们的 MTA 怎么知道这些信件要传给 root ?这就得要 aliases 这个邮件别名配置文件来处理啦!
?
邮件别名配置文件: /etc/aliases
在你的 /etc/aliases 档案内,你会发现类似底下的字样: [root@www ~]# vim /etc/aliases mailer-daemon: postmaster postmaster: root bin: root daemon: root ....(底下省略).... 左边是『别名』右边是『实际存在的使用者账号或者是 email address』! 就是透过这个设定值,所以让我们可以将所有系统账号所属的信件通通丢给 root 啊!好,我们现在将他扩大化,假如你的 MTA 内有一个实际的账号名称为 dmtsai ,这个使用者还想要使用 dermintsai 这个名称来收他的信件, 那么你可以这样做:
[root@www ~]# vim /etc/aliases dermintsai: dmtsai # 左边是你额外所设定的,右边则是实际接收这封信的账号! [root@www ~]# postalias hash:/etc/aliases [root@www ~]# ll /etc/aliases* -rw-r--r--. 1 root root 1535 2011-08-09 14:10 /etc/aliases -rw-r--r--. 1 root root 12288 2011-08-09 14:10 /etc/aliases.db 从此之后不论是 dmtsai@www.centos.vbird 还是 dermintsai@www.centos.vbird 都会将信件丢到 /var/spool/mail/dmtsai 这个信箱当中喔!很方便吧!
?
/etc/aliases 实际应用一:让一般账号可接收 root 的信
假设你是系统管理员,而你常用的一般账号为 dmtsai,但是系统出错时的重要信件都是寄给 root 啊, 偏偏 root 的信件不能被直接读取....所以说,如果能够将『给 root 的信也转寄一份给 dmtsai 』的话, 那就太好了!可以达到吗?当然可以!你可以这样做: [root@www ~]# vim /etc/aliases root: root,dmtsai <==鸟哥建议这种写法! # 信件会传给 root 与 dmtsai 这两个账号! root: dmtsai <==如果 dmtsai 不再是管理员怎办? # 从此 root 收不到信了,都由 dmtsai 来接受! [root@www ~]# postalias hash:/etc/aliases 上面那两行你可以择一使用,看看 root 要不要保留他的信件都可以的!鸟哥建议使用第一种方式,因为这样一来, 你的 dmtsai 可以收到 root 的信,且 root 自己也可以『备份』一份在他的信箱内,比较安全啦!
?
/etc/aliases 实际应用二:发送群组寄信功能
想象一个情况,如果你是学校的老师,你虽然只带一班导生,但是『每年都一班』时,如果有一天你要将信发给所有的学生, 那在写 email 的标头时,可能就会头昏昏的了 (因为联络人名单太多了)!这个时候你可以这样做: (假设主机上学生的账号为 std001, std002... ) [root@www ~]# vim /etc/aliases student2011: std001,std002,std003,std004... [root@www ~]# postalias hash:/etc/aliases 如此一来只要寄信到这部主机的 student2011 这个不存在的账号时,该封信就会被分别存到各个账号里头去, 管理上面是否很方便啊! ^_^!事
实上,邮件别名除了填写自己主机上面的实体用户之外,其实你可以填写外部主机的 email 喔! 例如你要将本机的 dermintsai 那个不存在的用户的信件除了传给 dmtsai 之外,还要外传到 dmtsai@mail.niki.centos.vbird 时,可以这样做: [root@www ~]# vim /etc/aliases dermintasi: dmtsai,dmtsai@mail.niki.centos.vbird [root@www ~]# postalias hash:/etc/aliases 很方便吧!更多的功能就期待您自行发掘啰!
Tips:
在这本书里面,dmtai 的家目录并非在正规的 /home 底下,而是放置于 /winhome 当中 (参考第十六章的练习),所以实际操作 mail 指令会出错!这是因为 SELinux 的关系!请参考 /var/log/messages 底下的建议动作去处理即可!
?
个人化的邮件转递: ~/.forward
虽然 /etc/aliases 可以帮我们达到邮件别名设定的好处,不过 /etc/aliases 是只有 root 才能修改的档案权限, 那我们一般使用者如果也想要
进行邮件转递时,该如何是好?没关系,可以透过自己家目录下的 .forward 这个档案喔! 举例来说,我的 dmtsai 这个账号所接收到的信件除了自己要保留一份之外,还要传给本机上的 vbird 以及 dmtsai@mail.niki.centos.vbird 时,那你可以这样做设定: [dmtsai@www ~]$ vim .forward # 注意!我现在的身份现在是 dmtsai 这个一般身份,而且在他的家目录下! dmtsai vbird dmtsai@mail.niki.centos.vbird [dmtsai@www ~]$ chmod 644 .forward 记得这个档案内容是一行一个账号 (或 email) ,而且权限方面非常重要:
? ?
该档案所在用户家目录权限,其 group、other 不可以有写入权限。 .forward 档案权限,其 group、other 不可以有写入权限。
如此一来这封信就会开始转递啰!有趣吧! ^_^
22.2.8 察看信件队列信息: postqueue, mailq
说实话,设定到此为止咱们的 postfix 应该可以应付一般小型企业之 mail server 的用途了! 不过,有的时候毕竟因为网络的问题或者是对方主机的问题,可能导致某些信件无法送出而被暂存在队列中, 那我们如何了解队列当中有哪些邮件呢?还有,在队列当中等待送出的信件是如何送出的呢?
? ? ?
如果该封信在五分钟之内无法寄出,则通常系统会发出一封『警告信』给原发信者, 告知该封邮件尚无法被寄送出去,不过,系统仍会持续的尝试寄出该封邮件;
如果在四小时候仍无法寄出,系统会再次的发出警告信给原发信者;
如果持续进行五天都无法将信件送出,那么该封邮件就会退回给原发信者了!
当然啦,某些 MTA 已经取消了警告信的寄发,不过原则上,如果信件无法实时寄出去的话 MTA 还是会努力尝试 5 天的,如果接下来的 5 天都无法送出时,才会将原信件退回给发信者。 一般来说,如果 MTA 设定正确且网络没有问题时,应该是不可能会有信件被放在队列当中而传不出去的, 所以如果发现有信件在队列时,当然得要仔细的瞧一瞧啰!检查队列内容的方法可以使用 mailq , 也可以使用 postqueue -p 来检查的: [root@www ~]# postqueue -p Mail queue is empty 若您的邮件如此显示时,恭喜您,没有什么问题邮件在队列当中。不过如果你将 postfix 关闭, 并尝试发一封信给任何人,那就可能会出现如下的画面啦:
[root@www ~]# /etc/init.d/postfix stop [root@www ~]# echo \[root@www ~]# postqueue -p postqueue: warning: Mail system is down -- accessing queue directly -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- 5CFBB21DB 284 Tue Aug 9 06:21:58 root root -- 0 Kbytes in 1 Request. # 第一行就说明了无法寄出的原因为 Mail system is down 啦! # 然后才出现无法寄出的信件信息!包括来源与目标喔! 输出的信息主要为:
? ? ? ?
Queue ID:表示此封邮件队列的代表号 (ID),这个号码是给 MTA 看的,我们看不懂不要紧; Size :这封信有多大容量 (bytes) 的意思;
Arrival Time:这封信什么时候进入队列的,并且可能会说明无法立即传送出去的原因; Sender/Recipient:送信与收信者的电子邮件啰!
事实上这封信是放置在 /var/spool/postfix 里面,由于信件内容已经编码为给 MTA 看的数据排列, 所以你可以使用 postcat 来读出原信件的内容喔!例如这样做 (注意看档名与 Queue ID 的对应!):
[root@www ~]# cd /var/spool/postfix/maildrop [root@www maildrop]# postcat 5CFBB21DB <==这个档名就是 Queue ID *** ENVELOPE RECORDS 5CFBB21DB *** <==说明队列的编号啊 message_arrival_time: Tue Aug 9 14:21:58 2011 named_attribute: rewrite_context=local <==分析 named (DNS) 的特性来自本机 sender_fullname: root <==发信者的大名与 email sender: root recipient: root <==就是收件者啰! *** MESSAGE CONTENTS 5CFBB21DB *** <==底下则是信件的实际内容啊! Date: Tue, 09 Aug 2011 14:21:58 +0800 To: root Subject: testing queue User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit test *** HEADER EXTRACTED 5CFBB21DB *** *** MESSAGE FILE END 5CFBB21DB *** 如此一来你就知道目前我们的 MTA 主机有多少未送出的信件,还有未送出信件的内容你也可以追踪的到了! 很不错,对吧!不过,如果你想要我们的 postfix 立刻尝试将这些在队列当中的信件寄出去,那又该如何是好? 你有几个作法啦,可以重新启动 postfix ,也可以透过 postfix 的动作来处理,例如:
[root@www ~]# /etc/init.d/postfix restart [root@www ~]# postfix flush 鸟哥个人比较建议使用 postfix flush 啰!自行参考看看先! ^_^!接下来,让我们先来处理一下收信的 MRA 服务器, 搞定后再来处理客户端的用户接口吧!
22.2.9 防火墙设置
因为整个 MTA 主要是透过 SMTP (port 25) 进行信件传送的任务,因此,针对 postfix 来说,只要放行 port 25 即可呦! 修改一下 iptables.rule
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库22第二十二章、邮件服务器: Postfix(5)在线全文阅读。
相关推荐: