一、概述
电子邮件服务是Internet上最基本的服务之一,用户可以通过它与远程用户进行经济、方便、快捷且无需在线的信息交流。在Internet上,超过30%的业务量来自电子邮件,仅次于WWW服务。本章主要介绍以postfix服务为中心的电子邮件系统的安装、配置和使用。
电子邮件服务的概述
电子邮件服务是Internet最基本的服务,也是最重要的服务之一。与传统的邮政信件服务类似,电子邮件可以用来在Internet或Intranet上进行信息的传递和交流,具有快速、经济的特点。发一封电子邮件给远在他方的用户,对方通常几分钟之内就能收到。如果选用传统邮件,发一封特快专递也需要至少一天的时间,而且电子邮件的费用低廉。与实时信息交流(如电话通话)相比,电子邮件采用存储转发的方式,因此发送邮件时并不需要收件人处于在线状态,收件人可以根据实际需要随时上网从邮件服务器上收取邮件,方便了信息的交流。
电子邮件系统的简介
与其他Internet服务相同,电子邮件服务是基于客户/服务器模式的。对于一个完整的电子邮件系统而言,它主要由以下三部分构件组成。
1.用户代理
用户代理(User Agent,缩写为UA)就是用户与电子邮件系统的接口,在大多数情况下它就是在邮件客户端上运行的程序,主要负责将邮件发送到邮件服务器和从邮件服务器上接收邮件。目前主流的用户代理主要有Microsoft公司的Outlook和国产的Foxmail等。
2.邮件服务器
邮件服务器是电子邮件系统的核心构件,它的主要功能是发送和接收邮件,同时向发件人报告邮件的传送情况。根据用途的不同,可以将邮件服务器分为发送邮件服务器(SMTP服务器)和接收邮件服务器(POP3服务器或IMAP4服务器)。
3.电子邮件使用的协议
要实现电子邮件服务还必须借助于专用的协议才行。目前,应用于电子邮件服务的协议主要有SMTP、POP3和IMAP4协议。
(1)SMTP协议
SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收件人的服务器上了。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
(2)POP3协议
POP3即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的协议。它是Internet电子邮件的第一个离线协议标准,POP3允许从服务器上把邮件存储到本地主机即自己的计算机上,同时删除保存在邮件服务器上的邮件。遵循POP3协议来接收电子邮件的服务器是POP3服务器。
(3)IMAP4协议
IMAP4即Internet信息访问协议的第4个版本,是用于从本地服务器上访问电子邮件的协议,它是一个客户/服务器模型协议,用户的电子邮件由服务器负责接收保存,用户可以通过浏览信件头来决定是否要下载此信。用户也可以在服务器上创建或更改文件夹或邮箱,删除信件或检索信件的特定部分。
虽然POP和IMAP都是处理接收邮件的,但两者在机制上却有所不同。在用户访问电子邮件时, IMAP4需要持续访问服务器,POP3则是将信件保存在服务器上,当用户阅读信件时,所有内容都会 被立即下载到用户的机器上。因此,可以把IMAP4看成是一个远程文件服务器,而把POP3看成是一 个存储转发服务器。就目前情况看,POP3的应用要远比IMAP4广泛得多。
4. 邮件网关简介
邮件网关除了进行邮件的转发外,还可以部署相关软件实现过滤病毒邮件、垃圾邮件以及执行企业内部相关管理制度的功能。
二、电子邮件服务的工作原理
如图9-1所示,E-mail的传输过程如下。
用户在各自的POP服务器注册登记,由网络管理员设置为授权用户,并取得一个POP信箱,获得POP和SMTP服务器的地址信息。假设两个服务器的域名分别为example.com和163.com,注册用户分别为liu和chen,E-mail地址分别为liu@example.com和chen@163.com。
当example.com服务器上的用户liu向chen@163.com发送E-mail时,E-mail首先从客户端被发送至example.com的SMTP服务器。
example.com的SMTP服务器根据目的E-mail地址查询163.com的SMTP服务器,并转发该E-mail。
163.com的SMTP服务器收到转发的E-mail,并保存。
163.com的chen用户利用客户端登录至163.com的POP服务器,从其信箱中下载并浏览E-mail。
服务器上有众多用户的电子信箱,即在计算机外部存储器(硬盘)上划出一块区域, 相当于邮局,这块存储区又分成许多小区,每个小区就是信箱。
三、主流电子邮件服务器软件
在Linux平台中,有许多邮件服务器可供选择,但目前使用较多的是Sendmail服务器、Postfix服务器和Qmail服务器。
(1)Sendmail服务器
从使用的广泛程度和代码的复杂程度来讲,Sendmail是一个很优秀的邮件服务软件。几乎所有Linux的缺省配置中都内置了这个软件,只需要设置好操作系统,它就能立即运转起来。但它的安全性较差,Sendmail在大多数系统中都是以root身份运行的,一旦邮件服务发生安全问题,就会对整个系统造成严重影响。同时在Sendmail开放之初,Internet用户数量及邮件数量都较少,使Sendmail的系统结构并不适合较大的负载,对于高负载的邮件系统,需要对Sendmail进行复杂的调整。
(2)Postfix服务器
Postfix是一个由IBM资助、由Wietse Venema负责开发的自由软件工程产物,它的目的就是为用户提供除Sendmail之外的邮件服务器选择。Postfix在快速、易于管理和提供尽可能的安全性方面都进行了较好的考虑。Postfix是基于半驻留、互操作的进程的体系结构,每个进程完成特定的任务,没有任何特定的进程衍生关系,使整个系统进程得到很好的保护。同时Postfix也可以和Sendmail邮件服务器保持兼容性以满足用户的使用习惯。
(3)Qmail服务器
Qmail是由Dan Bernstein开发的可以自由下载的邮件服务器软件,其第一个beta版本0.70.7发布于1996年1月24日,当前版本是1.03。Qmail是按照将系统划分为不同的模块的原则进行设计的,在系统中有负责接收外部邮件的模块,有管理缓冲目录中待发送的邮件队列的模块,也有将邮件发送到远程服务器或本地用户的模块。同时只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单,因此就可以达到较高的安全性。
Postfix邮件服务的安装
Red Hat Enterprise Linux提供了Sendmail和Postfix两种STMP邮件服务软件,让用户可以随意地选择其中一种。不过,默认情况下安装程序已将Sendmail安装到系统中了,如果要使用Postfix,就必须先将Sendmail服务停止,然后再安装Postfix服务软件。具体操作步骤如下。
用下面的命令检查Sendmail服务是否已启动。
netstat -nutlp | grep :25
该命令的执行情况如图9-2所示,Sendmail服务正在监听TCP的25号端口。
设置关闭Sendmail服务及开机时自启动,命令如下。
/etc/rc.d/init.d/sendmail stop
chkconfig sendmail off
上述命令的执行情况如图9-3所示,关闭自启动后,还可用“chkconfig sendmail --list”命令来查看其效果。
安装postfix服务。将Red Hat Enterprise Linux 5的第3张安装盘放入光驱,加载光驱后在光盘的Server目录下找到Postfix的RPM安装包文件postfix-2.3.3-2.i386.rpm,然后使用下面的命令安装。
rpm -ivh /mnt/Server/postfix-2.3.3-2.i386.rpm
命令执行后,如果出现如图9-4所示的结果,则表示postfix服务安装成功。
postfix服务的基本配置
与Sendmail相比,Postfix最被人称道的地方就在于其配置文件的可读性很高。Postfix的主配置文件是/etc/postfix/main.cf。虽然该配置文件的内容比较多,但其中大部分内容都是注释(“#”号开头的行),真正需要自行定义的参数并不多,而且这些参数就算不去定义,按照默认值也可以运行,只不过它只监听127.0.0.1这个接口的邮件收发。如果要使它能够支持客户端完成最基本的邮件收发任务,通常还需要进行下面的设置。
1.设置运行Postfix服务的邮件主机的主机名、域名
用myhostname参数指定运行Postfix服务的邮件主机的主机名称(FQDN名),用mydomain参数指定该主机的域名称。当然这两个参数也可以不进行设置,缺省情况下,myhostname参数被设置为本地主机名,而且Postfix会自动将myhostname参数值的第一部分删除并将其余部分作为mydomain参数的值。
myhostname = mail.gdvcp.net mydomain = gdvcp.net
2.设置由本机寄出的邮件所使用的域名或主机名称
myorigin参数实际上是设置由本台邮件主机寄出的每封邮件的邮件头中mail from的地址。由于Postfix默认使用本地主机名作为myorigin参数的值,因此一封由本地邮件主机寄出的邮件的邮件头中就会含有如“From:‘lbt’<lbt@mail.gdvcp.net>”这样的内容,它表明这封邮件是从mail.gdvcp.net主机发来的。不过,建议读者将myorigin参数设置为本地邮件主机的域名(即“myorigin = gdvcp.net或$mydomain”),这样一封由本地邮件主机寄出的邮件的邮件头中就会含有如“From:‘lbt’<lbt@gdvcp.net>”这样的内容,显然更具有可读性。
myorigin = $mydomain
3.设置Postfix服务监听的网络接口
默认情况下,inet_interfaces参数的值被设置为localhost,这表明只能在本地邮件主机上寄信。如果邮件主机上有多个网络接口,而又不想使全部的网络接口都开放Postfix服务,就可以用主机名指定需要开放的网络接口。不过,通常是将所有的网络接口都开放,以便接收从任何网络接口来的邮件,即将inet_interfaces参数的值设置为“all”。
inet_interfaces = all
4.设置可接收邮件的主机名称或域名
mydestination参数非常重要,因为只有当发来的邮件的收件人地址与该参数值相匹配时,Postfix才会将该邮件接收下来。例如,这里将该参数值设置为$mydomain和$myhostname,表明无论来信的收件人地址是xxx@gdvcp.net(其中xxx表示某用户的邮件账户名),还是xxx@mail.gdvcp.net,Postfix都会接收这些邮件。
mydestination = $mydomain, $myhostname
5.设置可转发(Relay)哪些网络的邮件
可以使用mynetworks参数来设置。可将该参数值设置为所信任的某台主机的IP地址,也可设置为所信任的某个IP子网或多个IP子网(用“,”或者“ ”分隔)。这里,将mynetworks参数值设置为192.168.16.0/24,则表示这台邮件主机只转发子网192.168.16.0/24中的客户端所发来的邮件,而拒绝为其他子网转发邮件。
mynetworks = 192.168.16.0/24
除了mynetworks参数外,还有一个用于控制网络邮件转发的参数是mynetworks-style, 它主要用来设置可转发邮件网络的方式。通常有以下3种方式。
class:在这种方式下,Postfix会自动根据邮件主机的IP地址得知它所在的IP网络类型
(即A类、B类或是C类),从而开放的它所在的IP网段,例如,如果邮件主机的IP地址为
168.100.192.10,这是一个B类网络的IP地址,则postfix会自动开放168.100.0.0/16
整个IP网络;
subnet:这是postfix的默认值,postfix会根据邮件主机的网络接口上所设置的IP地址、
子网掩码来得知所要开放的IP网段,例如,如果邮件主机的IP地址为192.168.16.177,
子网掩码为255.255.255.192,则postfix会开放192.168.16.128/30子网;
host:在这种方式下,postfix只会开放本机。
通常,用户不设置mynetworks-style参数,而直接设置mynetworks参数。如果这两个参
数都进行了设置,那么mynetworks参数的设置有效。
6.设置可转发哪些网域的邮件
mynetworks参数是针对邮件来源的IP来设置的,而relay_domains参数则是针对邮件来源的域名或主机名来设置的。例如,将该参数值设置为gdvcp.net,则表示任何由域gdvcp.net发来的邮件都会被认为是信任的,Postfix会自动对这些邮件进行转发。
relay_domains = gdvcp.net
完成了上面的基本设置后,重新启动Postfix服务,这台Postfix邮件主机就基本准备好了。但是目前它仅支持客户端发信,还不支持收信。
此外,要使它能在单位内部网络中更好地转发邮件,还必须进行DNS设置。本例中,在内部网络的DNS服务器上定义了一个主区域gdvcp.net,并在该区域配置文件中定义了以下记录
(除定义了SOA、NS记录外):
rhel5.gdvcp.net. IN A 192.168.16.177 mail.gdvcp.net. IN CNAME rhel5.gdvcp.net. gdvcp.net. IN MX 10 mail.gdvcp.net.
当编辑好Postfix主配置文件/etc/postfix/main.cf后,为了便于调试, 应在不打开该文件的情况下,直接读取该文件的各类设置数据, 可执行/usr/sbin/postconf命令。例如,要查看Postfix的当前主要配置 文件的存放路径,可以使用下面的命令:postconf -n
虚拟别名域的配置
使用虚拟别名域,可以将发给虚拟域的邮件实际投递到真实域的用户邮箱中;可以实现群组邮递的功能,即指定一个虚拟邮件地址,任何人发给这个邮件地址的邮件都将由邮件服务器自动转发到真实域中的一组用户的邮箱中。
这里的虚拟域可以是实际并不存在的域,而真实域既可以是本地域(即main.cf文件中的mydestination参数值中列出的域),也可以是远程域或Internet中的域。虚拟域是真实域的一个别名。实际上,通过一个虚拟别名表(virtual),实现了虚拟域的邮件地址到真实域的邮件地址的重定向。
下面通过一些例子来说明虚拟别名域的设置方法。
【例1】如果要将发送给虚拟域@dzxx.cn的邮件实际投递到真实的本地域@gdvcp.net,那么可在虚拟别名表中进行如下定义:
@dzxx.cn @gdvcp.net
【例2】如果要将发送给虚拟域的某个虚拟用户(或组)的邮件实际投递到本地Linux系统中某个用户账户的邮箱中,那么可在虚拟别名表中进行如下定义:
lbt st0321001,st0321002,st0321003
【例3】如果要将发送给虚拟域中的某个虚拟用户(或组)的邮件实际投递到本地Linux系统中和Internet中某个用户账户的邮箱中,那么可在虚拟别名表中进行如下定义:
daliu@example.com lbt,liu6812@163.com
在实际应用中,要实现上述虚拟别名域,必须按以下步骤进行。
编辑Postfix主配置文件/etc/postfix/main.cf,进行如下定义:
virtual_alias_domains = dzxx.cn,example.com virtual_alias_maps = hash:/etc/postfix/virtual
这里,参数virtual_alias_domains用来指定虚拟别名域的名称,参数virtual_alias_maps用来指定含有虚拟别名域定义的文件路径。
编辑配置文件/etc/postfix/virtual,进行如下定义:
@dzxx.cn @gdvcp.net lbt st0321001,st0321002 lbt,
在修改配置文件main.cf和virtual后,要使更改立即生效,应分别执行/usr/sbin目录下以下的两条命令。
postmap /etc/postfix/virtual postfix reload
其中,第1条命令用来将文件/etc/postfix/virtual生成Postfix可以读取的数据库文件/etc/postfix/virtual.db;第2条命令用于重新加载Postfix主配置文件main.cf文件。这两条命令的执行情况如图9-5所示。
用户别名的配置
使用用户别名最重要的功能是实现群组邮递(也称邮件列表)的功能,通过它可以将发送给某个别名邮件地址的邮件转发到多个真实用户的邮箱中。与虚拟别名域不同的是,用户别名机制是通过别名表(aliases)在系统范围内实现别名邮件地址到真实用户邮件地址的重定向的。
下面通过一些例子来说明用户别名的设置方法。
【例1】假设一个班级中的每位同学都在本地Linux系统中拥有真实的电子邮件账户,现在要发信给班上的每一位同学,那么可以在别名表中进行如下定义:
st0322: st0322001,st0322002,st0322003,st0322004
这里的st0322是用户别名,它并不是一个Linux系统中的真正用户或组。当发信给st0322@gdvcp.net这个邮件地址时,这封邮件就会自动发送给st0322001@gdvcp.net、st0322002@gdvcp.net、st0322003@gdvcp.net和st0322001@gdvcp.net。
此外,当真正用户人数比较多时,还可以将这些用户定义到一个文件中,然后用include参数来引用该文件。例如,先用vi编辑器生成一个/etc/mail/st0323文件,其内容为:
st0323001,\ st0323002,\ st0323003,\ … st0323050
然后,在别名表中进行如下定义:
st0323: :include: /etc/mail/st0323
如果Linux系统中的用户账户名太长或者不希望让外人知道它,那么可以为它设置一个或多个用户别名,平时发邮件时只需使用别名邮件地址,邮件服务器就会自动将邮件转发给真实用户,甚至还可以将邮件转发到该用户在Internet中的邮件信箱中。
【例2】某用户在本地Linux系统中的用户账户名为jczliuming,并且他在Internet中拥有一个电子邮件地址为liuming86@163.com。如果为它设置多个用户别名(如jcz01、lm01等),那么在别名表中可进行如下定义。
jcz01: jczliuming lm01: jczliuming,
在实际应用中,要实现上述用户别名,还必须按以下步骤进行。
打开Postfix主配置文件/etc/postfix/main.cf,应确认文件中包含以下两条默认语句。
alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases
这里,参数alias_maps用来指定含有用户别名定义的文件路径,alias_database用来指定别名表数据库文件路径。
编辑配置文件/etc/aliases,进行如下定义。
st0322: st0322001,st0322002,st0322003,st0322004 st0323: :include: /etc/mail/st0323 jcz01: jczliuming lm01: jczliuming,
注意,别忘了要编辑生成文件/etc/mail/st0323。
在修改配置文件main.cf和aliases后,要使更改立即生效,应分别执行/usr/sbin目录中的以下两条命令。
postalias /etc/aliases postfix reload
其中,第1条语句用来将文件/etc/aliases生成Postfix可以读取的数据库文件/etc/aliases.db。这两条命令的执行情况如图9-6所示。
图9-6 使用户别名设置生效
用户别名可以实现邮件列表的功能,但是只有root用户才能修改aliases文件, 那么普通用户能否实现自己的邮件列表功能呢?可以,这需要通过在该用户账户的主目录 下建立.forward文件来实现,具体实现方法请参考有关书籍。
四、SMTP认证的配置
如果任何人都可以通过一台邮件服务器来转发邮件,会有什么后果呢?很可能这台邮件服务器就成为了各类广告与垃圾信件的集结地或中转站,网络带宽也会很快被耗尽。为了避免这种情况的出现,Postfix默认不会对外开放转发功能,而仅对本机(localhost)开放转发功能。但是,在实际应用中,必须在Postfix主配置文件中通过设置mynetworks、relay_domains参数来开放一些所信任的网段或网域,否则该邮件服务器几乎没有什么用处。在开放了这些所信任的网段或网域后,还可以通过设置SMTP认证,对要求转发邮件的客户端进行用户身份(用户账户名与密码)验证。只有通过了验证,才能接收该用户寄来的邮件并帮助转发。
目前,比较常用的SMTP认证机制是通过Cyrus SASL包来实现的。
在默认情况下,Postfix邮件主机可以接收和转发来自什么地方的邮件呢?
注记:
(1)默认情况下,Postfix接收符合以下条件的邮件:
目的地为$inet_interfaces的邮件;
目的地为$mydestination的邮件;
目的地为$ virtual_alias_maps的邮件。
(2)默认情况下,Postfix转发符合以下条件的邮件:
来自客户端IP地址符合$mynetworks的邮件;
来自客户端主机名称符合$relay_domains及其子域的邮件;
目的地为$relay_domains及其子域的邮件。
此外,还可以通过其他方式来实现更强大的控制,如STMP认证就是其中的一种方式。
Cyrus SASL是Cyrus Simple Authentication and Security Layer的简写,它最大的功能是为应用程序提供了认证函数库。应用程序可以通过函数库所提供的功能定义认证方式,并让SASL通过与邮件服务器主机的沟通从而提供认证的功能。
下面介绍使用Cyrus SASL包实现SMTP认证的具体方法。
1.Cyrus-SASL认证包的安装
默认情况下,Red Hat Enterprise Linux安装程序会自动安装Cyrus-SASL认证包。读者可使用下面的命令检查系统是否已经安装了Cyrus-SASL认证包或查看已经安装了何种版本。
rpm -qa | grep sasl
命令执行结果如图9-7所示,这表示Cyrus-SASL已安装,它的版本为2.1.22-4(V2版),但它的相关程序还没有安装完全。
如果系统还没有安装Cyrus-SASL认证包,应将Red Hat Enterprise Linux 5第1、2和3张安装光盘分别放入光驱,加载光驱后在光盘的Server目录下找到与Cyrus-SASL认证包相关的RPM包文件,然后分别使用rpm -ivh命令安装。例如,要安装第1张光盘上的cyrus-sasl-2.1.22-4.i386.rpm包文件,可使用下面的命令。
rpm -ivh /mnt/Server/cyrus-sasl-2.1.22-4.i386.rpm
2.Cyrus-SASL V2的密码验证机制
默认情况下,Cyrus-SASL V2版使用saslauthd这个守护进程进行密码认证,而密码认证的方法有多种,使用下面的命令可查看当前系统中的Cyrus-SASL V2所支持的密码验证机制。
saslauthd -v
命令的执行情况如图9-8所示。
从图中可以看到,当前可使用的密码验证方法有getwent、kerberos5、pam、rimap、shadow和ldap。为简单起见,这里准备采用shadow验证方法,也就是直接用/etc/shadow文件中的用户账户及密码进行验证。因此,在配置文件/etc/sysconfig/saslauthd中,应修改当前系统所采用的密码验证机制为shadow,即:
MECH=shadow
3.测试Cyrus-SASL V2的认证功能
由于Cyrus-SASL V2版默认使用saslauthd这个守护进程进行密码认证,因此需要使用下面的命令来查看saslauthd进程是否已经运行。
ps aux | grep saslauthd
如果没有发现saslauthd进程,则可用下面的命令启动该进程并设置它开机自启动。
/etc/init.d/saslauthd start chkconfig saslauthd on
然后,可用下面的命令测试saslauthd进程的认证功能。
/usr/sbin/testsaslauthd –u lbt –p ‘123456’
其中,lbt为Linux系统中的用户账户名,‘123456’为用户lbt的密码。该命令执行后,如果出现如图9-9所示的结果,则表示saslauthd的认证功能已起作用。
4.设置Postfix启用smtp认证
默认情况下,Postfix并没有启用SMTP认证机制。要让Postfix启用SMTP认证,就必须对Postfix的主配置文件/etc/postfix/main.cf进行修改。
下面先给出main.cf文件中有关SMTP认证的设置部分(位于文件的最后面),然后对这部分内容进行说明
smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = '' smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination broken_sasl_auth_clients=yes smtpd_client_restrictions = permit_sasl_authenticated smtpd_sasl_security_options = noanonymous
(1)smtpd_sasl_auth_enable:指定是否要启用SASL作为SMTP认证方式。默认不启用,这里必须将它启用,所以要将该参数值设置为“yes”。
(2)smtpd_sasl_local_domain:如果采用Cyrus-SASL V2版进行认证,那么这里不做设置。
(3)smtpd_recipient_restrictions:表示通过收件人地址对客户端发来的邮件进行过滤。通常有以下几种限制规则。
permit_mynetworks:表示只要是收件人地址位于mynetworks参数中指定的网段就可以被转发邮件。
permit_sasl_authenticated:表示允许转发通过SASL认证的邮件。
reject_unauth_destination:表示拒绝转发含未信任的目标地址的邮件。
(4)broken_sasl_auth_clients:表示是否兼容非标准的SMTP认证。有一些Microsoft的SMTP客户端(如Outlook Express 4.x)采用非标准的SMTP认证协议,只需将该参数设置为“yes”就可解决这类不兼容问题。
(5)smtpd_client_restrictions:表示限制可以向Postfix发起SMTP连接的客户端。如果要禁止未经过认证的客户端向Postfix发起SMTP连接,则可将该参数值设置为
“permit_sasl_authenticated”。
(6)smtpd_sasl_security_options:用来限制某些登录的方式。如果将该参数值设置为“noanonymous”,则表示禁止采用匿名登录方式。
在完成上述设置后,必须使用命令“/etc/init.d/postfix reload”重新载入配置文件,或使用命令“/etc/init.d/postfix restart”重新启动Postfix服务。
此外,由于当Postfix要使用SMTP认证时,会读取/usr/lib/sasl2/smtpd.conf文件中的内容,以确定所采用的认证方式,因此如果要使用saslauthd这个守护进程来进行密码认证,就必须确保/usr/lib/sasl2/smtpd.conf文件中的内容为:
pwcheck_method: saslauthd
5.测试Postfix是否启用了SMTP认证
经过上面的设置,Postfix邮件服务器应该已具备了SMTP认证功能。可采用Telnet命令连接到Postfix服务器端口25来进行测试,测试过程如图9-10所示。
如图9-10所示,第6行输入EHLO命令向远程163.com域发出消息,在随后得到的本地Postfix响应信息中,如果出现第12、13行信息(显示当前Postfix所支持的认证方式),则表明Postfix已启用了SMTP认证功能。
如果没有安装Cyrus-SASL认证包的相关程序如 cyrus-sasl-md5-2.1.22-4.i386.rpm、cyrus-sasl-gssapi-2.1.22-4.i386.rpm等,第12、13行信息就显示为:
250-AUTH LOGIN PLAIN250-AUTH=LOGIN PLAIN
启动、停止和重启Postfix服务
/etc/init.d/postfix start /etc/init.d/postfix stop /etc/init.d/postfix restart
重新载入Postfix主配置文件的命令为:
/etc/init.d/postfix reload
每当修改了Postfix主配置文件/etc/postfix/main.cf后,想要使新的配置生效,虽然可以通过重新启动服务来实现,但是如果当前Postfix服务正在运行,重新启动服务就会花费不少的时间。最好的方法就是让Postfix重新载入主配置文件的内容,并使新的配置立即生效。
5.自动启动Postfix服务
如果需要让Postfix服务随系统启动而自动加载,可以执行“ntsysv”命令启动服务配置程序,找到“postfix”服务,在其前面加上星号(*),然后选择“确定”即可,如图9-15所示。
小心:Postfix服务使用TCP协议的25端口,如果Linux服务器开启了防火墙功能, 就应关闭防火墙功能或设置允许TCP协议的25端口通过。可以使用以下命令开放 TCP协议的25端口。 iptables -I INPUT -p tcp --dport 25 -j ACCEPT
五、dovecot服务的实现
1. dovecot服务的安装
Red Hat Enterprise Linux安装程序默认没有安装dovecot服务,可使用下面的命令检查系统是否已经安装了dovecot服务。
rpm -q dovecot
从图中可见,系统当前还没有安装dovecot服务。可将Red Hat Enterprise Linux 5的第2张安装光盘放入光驱,加载光驱后在光盘的Server目录下找到dovecot服务的RPM安装包文件dovecot-1.0-1.2.rc15.el5.i386.rpm和相关程序,然后使用下面的命令安装dovecot服务和相关程序。
pm -ivh /mnt/Server/perl-DBI-1.52-1.fc6.i386.rpm
rpm -ivh /mnt/Server/mysql-5.0.22-2.1.i386.rpm
rpm -ivh /mnt/Server/dovecot-1.0-1.2.rc15.el5.i386.rpm
命令执行后,如果出现如图9-17所示的结果,则表示dovecot服务安装成功。
2.dovecot服务的基本配置
dovecot服务的配置文件是/etc/dovecot.conf。要启用最基本的dovecot服务,只需要修改该配置文件中的以下内容。
protocols =pop3 pop3s protocol pop3 { listen = *:10100 }
其中,第1条语句用于指定本邮件主机所运行的服务协议,如POP3;第2条语句用来指定POP3服务所监听的网络接口,“*”表示要监听本机上的所有网络接口。
3.启动dovecot服务并设置为自启动
相关的命令为:
/etc/rc.d/init.d/dovecot start chkconfig --level 345 dovecot on
这两条命令的执行情况如图9-18所示。
在完成了dovecot服务和Postfix服务的安装配置后,电子邮件客户端就可以利用这台电子邮件服务器进行邮件的收发了。
注记:POP3使用TCP协议的110端口。如果Linux服务器开启了防火墙功能, 就应关闭防火墙功能或设置允许TCP协议的110端口通过。可以使用 以下命令开放TCP协议的110端口。
六、cyrus-imapd服务的实现
1.cyrus-imapd服务的安装
Red Hat Enterprise Linux安装程序默认没有安装cyrus-imapd服务。可使用下面的命令检查系统是否已经安装了cyrus-imapd服务。
rpm -qa | grep cyrus-imapd
统当前还没有安装cyrus-imapd服务。可将Red Hat Enterprise Linux 5的第2和第3张安装光盘放入光驱,加载光驱后在光盘的Server目录下找到以下与cyrus-imapd服务相关的RPM包文件:
cyrus-imapd-perl-2.3.7-1.1.el5.i386.rpm
cyrus-imapd-utils-2.3.7-1.1.el5.i386.rpm
db4-utils-4.3.29-9.fc6.i386.rpm
lm_sensors-2.10.0-3.1.i386.rpm
cyrus-imapd-2.3.7-1.1.el5.i386.rpm
cyrus-imapd-devel-2.3.7-1.1.el5.i386.rpm
然后,可使用rpm -ivh命令分别进行安装。例如,要安装cyrus-imapd服务包,可使用下面的命令:
rpm -ivh /mnt/Server/cyrus-imapd-2.3.7-1.1.el5.i386.rpm
命令执行后,如果出现如图9-20所示的结果,则表示cyrus-imapd服务安装成功。
2.cyrus-imapd服务的基本配置
cyrus-imapd服务的配置文件有以下3个。
/etc/sysconfig/cyrus-imapd:用于启动cyrus-imapd服务的配置文件。
/etc/cyrus.conf:是cyrus-imapd服务的主要配置文件,其中包含该服务中各个组件(IMAP、POP3、sieve和NNTP等)的设置参数。
/etc/imapd.conf:是cyrus-imapd服务中的IMAP服务的配置文件。
默认情况下,这些配置文件已经基本设置好,只要启动cyrus-imapd服务,就可以同时提供POP和IMAP服务。但是,由于Postfix默认并不支持Cyrus-IMAP信箱,因此为了使Postfix与cyrus-imapd整合在一起,必须在Postfix的主配置文件/etc/postfix/main.cf中加入以下内容。
mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
3.启动cyrus-imapd服务并设置自动运行
默认情况下,利用RPM包文件安装cyrus-imapd服务后,该服务是被停用的,所以用户必须手动启动它。如果需要开机自动运行,也必须手动启用。使用下面的命令可启动cyrus-imapd服务并设置其开机时自动运行。
service cyrus-imapd start chkconfig cyrus-imapd on
小心:如果已经安装了dovecot服务,则应该先关掉dovecot服务及开机时自启动,或者将dovecot服务卸载掉,然后启动cyrus-imapd服务并设置其开机时自启动。
4.用户邮件信箱的管理
Cyrus-IMAP的一个优点就是它可以为每个用户创建一个邮件信箱,而且这种信箱可具有层次结构。默认情况下,Cyrus-IMAP的邮件信箱位于/var/spool/imap目录下。创建邮件信箱时,为每一个邮件信箱命名的格式为:
信箱类型.名称[.文件夹名称[.文件夹名称]]…
例如,用户lbt的主要邮件信箱(即收件箱)的命名为user.lbt,其中关键字user表示信箱类型为用户信箱,lbt是Linux系统中的用户账户名。如果需要为用户lbt创建发件箱、垃圾箱和草稿箱,则可以分别用名称user.lbt.Sent(发件箱)、user.lbt.Trash(垃圾箱)和user.lbt.Drafts(草稿箱)。
值得注意的是,用户lbt的收件箱为user.lbt,用户lbt的其他所有文件夹都必须以user.lbt为基础来创建。
下面介绍创建和管理用户邮件信箱的具体方法。
(1)为Cyrus-IMAP管理员账户cyrus设置密码
passwd cyrus
该命令的执行情况如图9-22所示。
Cyrus-IMAP管理员账户cyrus是安装cyrus-imapd服务时自动创建的。在第一次为用户创建邮件信箱前,必须为该账户设置一个密码,供以后管理用户信箱时验证用户身份。
(2)使用cyradm管理工具为用户创建邮件信箱
cyradm管理工具位于/usr/bin/目录中,使用下面的命令可运行该管理工具。
/usr/bin/cyradm -u cyrus localhost
命令中必须用参数-u指定运行该管理工具的用户账户,通常为管理员账户cyrus。命令执行时,会提示输入用户密码,确认无误后就可以进入管理命令行状态。
RHEL5>
然后使用下面的命令就可为用户lbt创建一个邮件信箱。
createmailbox user.lbt
为用户创建邮件信箱后,可以使用listmailbox命令列出Cyrus-IAMP系统中已有的用户邮件信箱,上述命令的执行情况如图9-23所示。
(3)在用户邮件信箱下添加其他文件夹
在cyradm管理命令行状态下,可以使用下面的命令为用户lbt在其邮件信箱下创建发件箱、垃圾箱和草稿箱等其他文件夹。
createmailbox user.lbt.Send createmailbox user.lbt.Trash createmailbox user.lbt.Drafts
(4)为用户邮件信箱设置配额
为用户信箱设置配额,可以限制用户信箱使用磁盘空间的容量。例如,在cyradm管理命令行状态下,如果要为用户lbt的信箱user.lbt设置5MB的配额,可使用下面的命令。
setquota user.lbt 5210
其中,5120的单位为kB,设置后可用listquota命令查看该邮件信箱的使用情况。上述命令的执行情况如图9-25所示。
此外,在Linux系统提示符状态下,还可以用下面的命令查看用户邮箱的使用情况。
su -l cyrus -c /usr/lib/cyrus-imapd/quota
命令的执行情况如图9-26所示。
(5)为用户邮件信箱设置权限
默认情况下,当Cyrus-IMAP管理员为用户创建了一个邮件信箱时,只有该用户对该邮件信箱具有完全控制的权限。在Cyrus-IMAP中,要为用户信箱设置访问权限,通常可采用表9-1所示的6种缩写形式。
表9-1 Cyrus-IMAP中设置用户信箱权限的6种缩写形式
例如,如图9-27所示,在创建了用户信箱user.lbt后,想直接用deletemailbox命令来删除该邮箱,即使是管理员cyrus也无权(Permission denied)。要想删除它,必须先用下面的命令为管理员cyrus自己授予完全控制的权限(all)。
setacl user.lbt cyrus all
然后,可用listacl命令查看用户对该信箱所拥有的访问权限。从图9-27中可见,用户lbt和管理员cyrus都具有所有权限,即lrswipcda(实际上信箱的访问权限是由l、r、s、w、i、p、c、d和a共9种权限组合而成的)。
当用户cyrus取得了对信箱user.lbt的所有权限后,就可以用deletemailbox命令来删除该邮箱了。
最后还需要说明的是,在cyradm管理命令行状态下,由于各条管理命令比较长,因此在实际使用时通常采用这些命令的缩写形式,如listmailbox可缩写为lm。常用的cyradm管理命令及其缩写形式如表9-2所示。
表9-2 常用的cyradm管理命令及其缩写形式
七、电子邮件客户端的配置
电子邮件客户端软件有很多,各具特色。无论是在Linux还是在Windows平台上运行,这些客户端软件的配置步骤及所需设置的参数都基本相同,因此下面以Evolution为例来进行说明。
Evolution是一个以邮件处理为中心,集日程安排、任务管理等诸多功能于一体的电子邮件客户端软件。Red Hat Enterprise Linux 5中不带有该软件,而在Fedora Core 4默认安装时,还会被自动安装到计算机中。Fedora Core 4中初始配置Evolution的具体操作步骤如下。
单击桌面上的电子邮件图标,由于是第一次运行,系统会打开“Evolution设置助手”的“欢迎”页面。
单击“前进”按钮,在打开的“标识”对话框中,分别输入用户的全名和电子邮件地址,并保持“使它成为我的默认账户”复选框处于选中状态,如图9-28所示。
单击“前进”按钮,在打开的“接收电子邮件”对话框中做如下设置,如图9-29所示。
在“服务器类型”下拉列表框中,选择收信邮件服务器的类型(如选择POP)。
在“主机”文本框中输入收信邮件服务器主机的域名(如mail.gdvcp.net)或IP地址(如192.168.16.177),在“用户名”文本框中输入用户账户名(如lbt)。
单击“检查支持的类型”按钮,让客户端先自动测试邮件服务器所支持的认证类型,再从“认证类型”下拉列表框中选择一种验证用户密码的方式(如Password)。
为安全起见,通常保持“记住密码”复选框处于不选中状态。
单击“前进”按钮,在打开的“Receiving Options”(接收选项)对话框中,可选中“自动检查新邮件的间隔”复选框,并根据个人需要设置其间隔时间,如图9-30所示。
单击“前进”按钮,在打开的如图9-31所示的“发送电子邮件”对话框中做如下设置。
在“服务器类型”下拉列表框中选择发信邮件服务器的类型(如选择SMTP)。
在“主机”文本框中输入发信邮件服务器的域名(如mail.gdvcp.net)或IP地址,如果发信邮件服务器启用了认证功能,则应选中“服务器需要认证”复选框。
单击“检查支持的类型”按钮,让客户端先自动测试邮件服务器所支持的认证类型,再从“类型”下拉列表框中选中一种密码验证方式(如login),并在“用户名”文本框中输入用户账户名。
为安全起见,通常保持“记住密码”复选框处于不选中状态。
单击“前进”按钮,在打开的“账户管理”对话框中的“名称”文本框内输入一个描述性名称,以便于在管理账户时一目了然。
单击“前进”按钮,在打开的“Timezone”(时区)对话框中设置时区(如亚洲/上海)。
单击“前进”按钮,再单击“应用”按钮,保存设置后,即可打开如图9-32所示的Evolution工作窗口,从而完成了整个初始配置过程。
完成初始化配置后,就可以在Evolution工作窗口中进行邮件的收发和管理等工作了。此外,在工作过程中,还可随时根据需要更改上面所做的设置。具体方法是在Evolution工作窗口中,通过执行“编辑”→“首选项”菜单命令,然后在打开的“Evolution设置”对话框中,完成电子邮件账户的编辑、添加和删除等设置。
八、Web方式收发邮件
相信大多数人都在Internet上申请过免费的电子邮箱,体验过以Web方式撰写邮件、收发邮件、管理自己的邮箱的快乐。提供以Web方式收发邮件的服务被称为Web邮件服务,它是将电子邮件服务集成于Web来实现的。在Internet中,几乎所有的免费电子邮件服务都提供了Web邮件服务。在Linux中,虽然Postfix没有直接提供Web邮件服务功能,但是通常可通过将它与Apache以及第三方的Webmail软件(如squirrelmail、openwebmail等)集成在一起,提供Web邮件服务。
Red Hat Enterprise Linux 5中自带的squirrelmail(小松鼠网页电子邮件系统)就是一个用PHP4编写的、基于IMAP协议的Webmail电子邮件客户端软件。squirrelmail的主要特点是架设、操作与维护简便,无需使用SQL Server,与标准的电子邮件服务软件(如Postfix)的兼容性好,而且可以通过安装插件(Plugin)来扩充其功能。当需要更新版本或使用新的插件时,可以直接到squirrelmail官方网站(http://www.squirrelmail.org/)去下载,如图9-33所示的是squirrelmail官方网站的主页。
1.squirrel mail的安装
Red Hat Enterprise Linux安装程序默认没有安装squirrelmail。读者可使用下面的命令检查系统是否已经安装了squirrelmail。
rpm -q squirrelmail
命令的执行情况如图9-34所示。
从图9-34中可见,系统当前还没有安装squirrelmail。可将Red Hat Enterprise Linux 5第2、3张安装光盘放入光驱,加载光驱后在光盘的Server目录下分别找到squirrelmail的RPM安装包文件php-mbstring-5.1.6-5.el5.i386.rpm和squirrelmail-1.4.8-4.el5.noarch.rpm,然后使用下面的命令安装它。
图9-34 检查系统是否已经安装了squirrelmail
rpm -ivh /mnt/Server/php-mbstring-5.1.6-5.el5.i386.rpm
rpm -ivh /mnt/Server/squirrelmail-1.4.8-4.el5.noarch.rpm
命令执行后,如果出现如图9-35所示的结果,则表示squirrelmail安装成功。
2.squirrelmail的配置
squirrelmail的主配置文件为/etc/squirrelmail/config.php。要配置squirrelmail,可以直接修改该文件的内容,但是使用squirrelmail的配置工具来配置更方便、更直观。使用squirrelmail的配置工具进行配置的具体步骤如下。
打开squirrelmail的配置工具,可执行下面的命令。
/usr/share/squirrelmail/config/conf.pl
命令执行后打开设置主菜单,如图9-36所示。
选择主菜单项D,即在命令提示符(Command>>)后输入字母“d”,则进入指定IMAP服务器的预设置,如图9-37所示,然后可根据Linux系统的当前配置,在命令提示符后输入所用的IMAP服务器类型名,此处输入“cyrus”。
选择主菜单项1,即在命令提示符后输入数字“1”,进入组织设置子菜单,如图9-38所示。然后可根据具体情况修改组织的名称、标志等信息。设置完毕后在命令提示符后输入字母“r”,即可返回主菜单。
图9-38 squirrelmail的组织设置菜单
选择主菜单项2,即在命令提示符后输入数字“2”,进入服务器设置子菜单,如图9-39所示。由于前面已经对IMAP服务器做了预设置,因此这里只需要将服务器的域名(子菜单项1)修改为“gdvcp.net”,将发送邮件的方式(子菜单项3)改为“SMTP”(此时更新SMTP设置项即子菜单项B也随之变为“localhost:25”)。
选择主菜单项4,即在命令提示符后输入数字“4”,进入全局设置子菜单,如图9-40所示。将用户名用小写字母(子菜单项6)改为“true”。
选择主菜单项10。即在命令提示符后输入数字“10”,进入语言设置子菜单,如图9-41所示。这里可将缺省语言(子菜单项1)改为“zh_CN”(中文),将缺省字符集(子菜单项2)改为“gb2312”。
图9-39 squirrelmail的服务器设置菜单
图9-40 squirrelmail的全局设置菜单
图9-41 squirrelmail的语言设置菜单
选择主菜单项S,即可将所做的修改同时保存在文件/etc/squirrelmail/config.php和usr/share/squirrelmail/config/config.php(符号连接文件)中。
上述修改只是对squirrelmail的最基本配置,还可根据需要做进一步的修改。特别是,在默认情况下仅配置安装了3个插件,而Red Hat Enterprise Linux 5中共带了16个插件,因此需要时可选择主菜单项8,将其他插件配置到squirrelmail中。
在完成了对squirrelmail的配置后,为了能在浏览器中访问到squirrelmail的Webmail网页,应执行下面的命令来重新启动htttpd服务。
/etc/init.d/httpd restart
3.使用squirrelmail收发邮件
采用RPM包安装squirrelmail时,安装程序会在Apache服务器的默认Web站点中配置一个别名webmail,该别名被定义在/etc/httpd/conf.d/squirrelmail.conf文件中,即:
Alias /webmail /usr/share/squirrelmail
因此,可直接在浏览器的地址栏中输入“http://mail.gdvcp.net/webmail”(其中,mail.gdvcp.net是postfix+apache+squirrelmail服务器的域名),从而打开squirrelmail的登录页面,如图9-42所示。
在squirrelmail的登录页面中,输入Linux系统中的用户名及密码,系统验证无误后即可进入Webmail中,如图9-43所示。接下来,用户就可以正常地收发邮件了。