? 如果你的 MTA 被利用来发黑函,你是找不到原发信者的,所以你这部 MTA 将会被追踪为最终站!
问题很大呦!所以啊,目前所有的 distributions 都一样,几乎都将 MTA 预设启动为仅监听内部循环接口 (lo) 而已,而且也将 Open Relay 的功能取消了。既然取消 Open Relay 的功能,那么怎么使用这部 MTA 的 Relay 来帮忙转信啊?呵呵!所以我们在上头才会一直说,你『必需』取得合法使用该 MTA 的权限啊! 这也就是说,设定谁可以使用 Relay 的功能就是我们管理员的任务啦!通常设定 Relay 的方法有这几种:
? ? ?
规定某一个特定客户端的 IP 或网段,例如规定内部 LAN 的 192.168.1.0/24 可使用 Relay; 若客户端的 IP 不固定时 (例如拨接取得的非固定 IP) 可以利用认证机制来处理。 将 MUA 架设在 MTA 上面,例如 OpenWebMail 之类的 web 接口的 MUA 功能。
认证机制上面常见的有 SMTP 邮件认证机制,以及 SMTP after POP 两种,不论是哪一种机制, 基本上都是透过让使用者输入认证用的账号与密码,来确定他有合法使用该 MTA 的权限,然后针对通过认证者开启 Relay 的支持就是了。如此一来你的 MTA 不再启动 Open Relay ,并且客户端还是可以正常的利用认证机制来收发信件, 身为管理员的你可就轻松多啰! ^_^
22.1.6 电子邮件的数据内容
看过上头的数据后,您应该对于 Mail server 有一些程度的认识了。再来要谈的是,那么一封 email 的内容有哪些部分呢?就跟人类社会的邮件有信封袋以及内部的信纸一样,email 也有所谓的标头 (header) 以及内容 (body) 两部份喔!
email 的标头部分 (类似邮件信封) 会有几个重要信息,包括:这封信来自那个 MTA、是由谁所发送出来的、要送给谁、 主旨为何等等,至于内容 (类似信封内的信纸) 则是发信者所填写的一些说明啰。如果你使用 dmtsai 的身份下达这个指令: [dmtsai@www ~]$ echo \然后将自己的信箱内容叫出来,如下所示:
[dmtsai@www ~]$ cat /var/spool/mail/dmtsai From dmtsai@www.centos.vbird Mon Aug 8 18:53:32 2011 <==发信者的 email Return-Path:
此外,这个邮件的标头以及内容的分析部分,你还可以藉由某些分析软件来进行过滤, 这部份我们将在后头再慢慢的介绍给大家了解喔! ^_^!您先知道一封邮件至少有这些数据,以后咱们再慢慢的解释啰!
22.2 MTA 服务器: Postfix 基础设定
可达成 MTA 的服务器软件非常多,例如我们的 CentOS 预设就提供了数十年老牌子的 sendmail (http://www.sendmail.org) 以及近期以来很热门的 Postfix (http://www.postfix.org)。虽然 sendmail 曾是最为广泛使用的 mail server 软件,但由于 sendmail 的配置文件太过于难懂,以及早期的程序漏洞问题导致的主机安全性缺失;加上 sendmail 将所有的功能都统合在 /usr/sbin/sendmail 这个程序当中,导致程序太大可能会有效能方面的疑虑等等, 所以新版的 CentOS 已经将预设的 mail server 调整为 postfix 啰!我们这里也主要介绍 postfix。当然啦,原理方面都一样,您也可以自己玩玩其他的 mail server。
22.2.1 Postfix 的开发
Postfix 是由 Wietse Zweitze Venema 先生(http://www.porcupine.org/wietse)所发展的。早期的 mail server 都是使用 sendmail 架设的,还真的是『仅此一家,绝无分号』!不过,Venema 博士觉得 sendmail 虽然很好用,但是毕竟不够安全,尤其效能上面并不十分的理想,最大的困扰是...sendmail 的配置文件 sendmail.cf 真的是太难懂了!对于网管人员来说,要设定好 sendmail.cf 这个档案,真不是人作的工作。 为了改善这些问题, Venema 博士就在 1998 年利用他老大在 IBM 公司的第一个休假年进行一个计划:『 设计一个可以取代 sendmail 的软件套件,可以提供网站管理员一个更快速、 更安全、而且完全兼容于 sendmail 的 mail server 软件!』这个计划还真的成功了! 而且也成功的使用在 IBM 内部,在 IBM 内可以说是完全取代了 sendmail 这个邮件服务器!在这个计划成功之后, Venema 博士也在 1998 年首次释出这个自行发展的邮件服务器,并定名为 VMailer。
不过,IBM 的律师却发现一件事,那就是 VMailer 这个名字与其他已注册的商标很类似, 这样可能会引起一些注册上面的困扰。为了避免这个问
题,所以 Venema 博士就将这个邮件软件名称改为 Postfix !『Post 有在什么什么之后』的意思,『fix 则是修订』的意思,所以 postfix 有 『在修订之后』的意思。
鸟哥个人认为, Venema 先生最早的构想并不是想要『创造一个全新的 Mail server 软件,而是想要制造一个可以完全兼容于 sendmail 的软件』,所以,Venema 先生认为他自行发展的软件应该是『改良 sendmail 的缺失』,所以才称为 Postfix 吧!取其意为: 『改良了 sendmail 之后的邮件服务器软件!』
所以啦, Postfix 设计的理念上面,主要是针对『想要完全兼容于 sendmail』所设计出来的一款『内在部分完全新颖』的一个邮件服务器软件。就是由于这个理念,因此 Postfix 改善了 sendmail 安全性上面的问题,改良了 mail server 的工作效率, 且让配置文件内容更具亲和力!因此,你可以轻易的由 sendmail 转换到 Postfix 上面!这也是当初 Venema 博士的最初构想啊!
就是基于这个构想,所以 Postfix 在外部配置文件案的支持度,与 sendmail 几乎没有两样,同样的支持 aliases 这个档案,同样的支持
~/.forward 这个档案,也同样的支持 SASL 的 SMTP 邮件认证功能等等! 所以,呵呵!赶紧来学一学怎样架设 Postfix 这个相当出色的邮件服务器吧! ^_^
22.2.2 所需要的软件与软件结构
由于 CentOS 6.x 预设就是提供 postfix 的!所以根本无须调整啥咚咚~直接来使用吧! 那么 postfix 有哪些重要的配置文件呢?他主要的配置文件都在 /etc/postfix/ 当中,详细的档案内容就让我们来谈谈:
?
/etc/postfix/main.cf
这就是主要的 postfix 配置文件啰,几乎所有的设定参数都是在这个档案内规范的! 这个档案预设就是一个完整的说明档了,你可以参考这个档案的内容就设定好属于你的 postfix MTA 呢! 只要修改过这个档案,记得要重新启动 postfix 喔!
?
/etc/postfix/master.cf
主要规定了 postfix 每个程序的运作参数,也是很重要的一个配置文件。不过这个档案预设已经很 OK 了,通常不需要更改他。
/etc/postfix/access (利用 postmap 处理)
可以设定开放 Relay 或拒绝联机的来源或目标地址等信息的外部配置文件,不过这个档案要生效还需要在 /etc/postfix/main.cf 启动这个档案的用途才行。且设定完毕后需要以 postmap 来处理成为数据库档案呢! /etc/aliases (利用 postalias 或 newaliases 均可)
做为邮件别名的用途,也可以作为邮件群组的设定喔!
?
?
至于常见的执行档则有底下这些:
?
/usr/sbin/postconf (查阅 postfix 的设定数据)
这个指令可以列出目前你的 postfix 的详细设定数据,包括系统默认值也会被列出来, 所以数据量相当的庞大!如果你在 main.cf 里面曾经修改过某些预设参数的话,想要仅列出非默认值的设定数据, 则可以使用『postconf -n』这个选项即可。 /usr/sbin/postfix (主要的 daemon 指令)
?
此为 postfix 的主要执行档,你可以简单的使用他来启动或重新读取配置文件:
[root@www ~]# postfix check <==检查 postfix 相关的档案、权限等是否正确! [root@www ~]# postfix start <==开始 postfix 的执行 [root@www ~]# postfix stop <==关闭 postfix [root@www ~]# postfix flush <==强制将目前正在邮件队列的邮件寄出! [root@www ~]# postfix reload <==重新读入配置文件,也就是 /etc/postfix/main.cf 要注意的是,每次更动过 main.cf 后,务必重新启动 postfix,可简单的使用『postfix reload』即可。不过老实说,鸟哥还是习惯使用 /etc/init.d/postfix reload..
?
/usr/sbin/postalias
设定别名数据库的指令,因为 MTA 读取数据库格式的档案效能较佳,所以我们都会将 ASCII 格式的档案重建为数据库。 在 postfix 当中,这个指令主要在转换 /etc/aliases 成为 /etc/aliases.db 啰!用法为:
[root@www ~]# postalias hash:/etc/aliases # hash 为一种数据库的格式,然后那个 /etc/aliases.db 就会自动被更新啰! ?
/usr/sbin/postcat
主要用在检查放在 queue (队列) 当中的信件内容。由于队列当中的信件内容是给 MTA 看的, 所以格式并不是一般我们人类看的懂的文字数据。所以这个时候你得要用 postcat 才可以看出该信件的内容。 在 /var/spool/postfix 内有相当多的目录,假设内有一个文件名为 /deferred/abcfile , 那你可以利用底下的方式来查询该档案的内容喔:
[root@www ~]# postcat /var/spool/postfix/deferred/abcfile ?
/usr/sbin/postmap
这个指令的用法与 postalias 类似,不过他主要在转换 access 这个档案的数据库啦!用法为:
[root@www ~]# postmap hash:/etc/postfix/access ?
/usr/sbin/postqueue
类似 mailq 的输出结果,例如你可以输入『postqueue -p』看看就知道了!
整个 postfix 的软件结构大致上是这个样子的,接下来让我们先来简单的处理一下 postfix 的收发信件功能吧!
22.2.3 一个邮件服务器的设定案例
前面谈到 mail server 与 DNS 系统有很大的相关性,所以如果你想要架设一部可以连上 Internet 的邮件服务器时, 你必需要已经取得合法的 A 与 MX 主机名,而且最好反解也已经向您的 ISP 申请修改设定了, 这可是个大前提!不要忽略他!在底下的练习当中鸟哥以之前十九章 DNS 内的设定为依据,主要的参数是这样的:
? ? ? ?
邮件服务器的主要名称为: www.centos.vbird
邮件服务器尚有别名为 linux.centos.vbird 及 ftp.centos.vbird 也可以收发信件; 此邮件服务器已有 MX 设定,直接指向自己 (www.centos.vbird) 这个 www.centos.vbird 有个 A 的标志指向 192.168.100.254。
在实际的邮件服务器设定当中,上述的几个标志是很重要的,请自行参考 DNS 章节的介绍吧!底下就让我们来实际设定 postfix 服务器啰!
22.2.4 让 Postfix 可监听 Internet 来收发信件
在预设的情况下,CentOS 6.x 的 MTA 仅针对本机进行监听,不相信吗?测测看: [root@www ~]# netstat -tlnp | grep :25 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3167/master 所以如果你要对整个 Internet 开放的话,就得要努力的搞定几个简单的设定啰!而几乎所有的设定你都可已经由 /etc/postfix/main.cf 这个档案搞定!修改前你需要注意的项目有:
? ? ? ? ? ?
『 # 』符号是批注的意思;
所有设定值以类似『变量』的设定方法来处理,例如 myhostname = www.centos.vbird,请注意等号的两边要给予空格符喔, 且第一个字符不可以是空白,亦即『my..』要由行首写起;
可以使用『 $ 』来延伸使用变量设定,例如 myorigin = $myhostname,会等于 myorigin = www.centos.vbird;
如果该变量支持两个以上的数据,则使用空格符来分隔,不过建议使用逗号加空格符『, 』来处理。 例如: mydestination = $myhostname, $mydomain, linux.centos.vbird,意指 mydestination 支持三个数据内容之意。
可使用多行来表示同一个设定值,只要在第一行最后有逗号,且第二行开头为空格符, 即可将数据延伸到第二行继续书写 (所以刚刚第二点才说,开头不能留白!);
若重复设定某一项目,则以较晚出现的设定值为准!
要让你的 postfix 可以收发信件时,你必需要启动的设定数据有底下这些喔: