290 likes | 443 Views
第 14 章 邮件服务器及其安装与配置. 【 本章提要 】 邮件服务器运作原理 Sendmail 的安装和配置 邮件客户端的使用介绍 本章主要介绍 Red Hat Linux 9.0 下 Sendmail 服务器的架设方法。首先介绍 Mail 与 DNS 系统的相关性和几个与邮件服务相关的概念,然后介绍邮件服务器的基本工作流程, Sendmail 服务器的安装与配置,最后介绍邮件用户端的设置及使用. 14.1 邮件服务器的工作原理.
E N D
第14章 邮件服务器及其安装与配置 【本章提要】 邮件服务器运作原理 Sendmail的安装和配置 邮件客户端的使用介绍 本章主要介绍Red Hat Linux 9.0下Sendmail服务器的架设方法。首先介绍Mail与 DNS系统的相关性和几个与邮件服务相关的概念,然后介绍邮件服务器的基本工作流程,Sendmail服务器的安装与配置,最后介绍邮件用户端的设置及使用
14.1邮件服务器的工作原理 • 关于Windows系统下的邮件服务器,在第5章做了一些介绍。本章从另外的侧重点先介绍邮件服务器与DNS 系统的相关性,邮件服务器的原理,然后再介绍Linux下邮件服务器的的设置。
14.1.1 Mail与DNS系统的相关性 • 邮件服务器与DNS系统是分不开的,一个用户难以记住计算机网络中的每一台主机的IP地址,借助DNS系统可以将网络中的主机名“翻译”成相对应的IP地址。因此,在使用邮件服务器来发送邮件时,如果不想死记邮件服务器的IP地址,那么就一定需要让邮件服务器的名称可以经由DNS系统来解析为其对应的IP地址。如果要创建一个Internet 上的邮件服务器,还需要注册一个合法的主机名称。 • 假设邮件服务器名称对应的IP地址已经成功的在 Internet 上完成了合法注册,也就是说在DNS服务器上存在了该主机名与IP对应的A记录,那么就可以架设邮件服务器了。DNS系统本身还有其它的功能可以使邮件服务器更稳定与具有更佳的避免邮件遗失的功能,DNS服务器上的MX记录(MX是 Mail eXchanger 的缩写)可以让Internet中的邮件迅速找到邮件服务器的位置。此外,由于MX后面可以接数字,因此,一个域(Domain) 或者是一部主机(这里“主机”是指邮件服务器),可以有多个MX标志,这样的好处是当主要的邮件服务器停机时,由于有MX标志,这样可以保证邮件不被直接退回,而是送到下一个MX设定的主机,并且暂存在该处,等到主要的邮件服务器启用之后,这个MX设定的主机就会将邮件给它传送到目的地。习惯上邮件地址的写法形如:ajia@server.name。符号“@”前面的内容指的是帐号,“@”后面的则是邮件服务器主机的名称。当寄出这样的一封邮件时,首先,邮件服务器会先去DNS系统寻找server.name 这个主机名称对应的IP地址与MX标志,若有MX标志,那么邮件将会被送到该MX主机,然后再由该MX主机将邮件送达到目的地,而如果有多个MX标志时,那么该邮件会送到最优先的MX主机,然后交给该主机来处理,在送达到邮件服务器后,该服务器则以前面的“@”前面的帐号名称,将邮件发送到各个使用者的邮件目录下。
14.1.2 邮件的传送流程 • 介绍完DNS与邮件服务器之间的关系后,接下来介绍邮件是如何传送到目的邮件服务器的。以下分“寄信”与“收信”两个主要的邮件服务器使用方式来加以介绍。首先是“寄信”,用户通常是使用个人计算机来寄信,例如使用Outlook Express或Foxmail等来寄信的时候,信到底是怎么寄出去的呢?可以参考如图14-1所示的过程。 图14 -1 邮件服务器寄送邮件示意图
14.1.2 邮件的传送流程 • 在上图中,MUA、MTA与MDA的概念需要读者做相应的了解。以下介绍这几个概念: • MUA ( Mail User Agent ):MUA称为邮件用户代理。通常情况下,客户端的计算机无法直接寄信,需要通过MUA来传送邮件,不论是送信还是收信,客户端的用户都需要借助操作系统提供的MUA才能够使用邮件系统。如Windows系统的Outlook Express可以看成是MUA,它主要的功能是接收邮件服务器的电子邮件,以及提供使用者浏览与编写邮件的功能。在Linux中主要有Evolution、Mozilla Mail和Mutt等。 • MTA ( Mail Transfer Agent ) :邮件传输代理。相对于MUA 是安装在客户端的软件而言,MTA 则是安装在邮件服务器上的软件,MTA可以看成是邮件传送代理人。顾名思义,既然是传送代理人,则用户在需要寄信和收信时,都是依靠MTA来实现。MTA 最主要的功能是接收外部来的邮件,只要邮件里有MTA 内部的帐号时,那么这封信就会被MTA 接收下来,只要使用者具有合法的使用MTA的权力,那么该使用者就可以利用该MTA将邮件传送出去。不过需要注意的是,MTA会将邮件送给目的地的MTA 而不是目的地的MUA,通常我们所说的邮件服务器指的是MTA。Red Hat Linux 9.0提供了两个MTA:Sendmail和Postfix。如果两者均安装了,Sendmail 就是默认的MTA,通过邮件传输代理切换器允许用户选择Sendmail 或postfix 作为系统的默认MTA。 • MDA ( Mail Delivery Agent ) :邮件递交代理。它主要的功能是将MTA所收到的邮件
14.1.2 邮件的传送流程 • 依照邮件的流向将该邮件放置到本机帐户下的邮箱(Mailbox)中或者是再经由MTA将这个邮件送到下个MTA 去,而如果邮件的流向是到本机,这个邮件递交代理的功能不只是将由MTA传来的邮件放到每个使用者的Mailbox,它还具有邮件过滤(filtering )与其它相关的功能。 • 了解了MUA、MTA与MDA的功能之后,下面介绍如何将信寄出去,具体分为下面几个步骤: • 1)用户使用MUA 寄信到MTA ; • 2)MTA 收到自己的邮件,交由MDA发送到该帐号的MailBox当中,如果在步骤1)所收到的邮件中,目标邮件服务器就是MTA自己,那么该MTA会将该邮件交由MDA去处理,将邮件放置在收件者的信箱中; • 3)如果由步骤1)收到的邮件的收件人并不是MTA 的内部帐号,那么该邮件将会被再转送出去,我们也称之为Relay (邮件转递)的功能。 • 4)远程的MTA会收到这封邮件,并将该邮件交给他的MDA来处理。此时,邮件会存放在远程MTA上,等待使用者登录读取或者下载到本地计算机中。接收邮件过程如图14-2所示。
14.1.2 邮件的传送流程 • 远程的MTA会收到这封邮件,并将该邮件交给他的MDA来处理。此时,邮件会存放在远程MTA上,等待使用者登录读取或者下载到本地计算机中。接收邮件过程如图14-2所示。 图14 -2 客户端收受邮件示意图
14.1.2 邮件的传送流程 • 用户使用的计算机直接远程连接到他的MTA ,通过MTA请求查看自己的mailbox(邮箱)是否有邮件。而MTA通过MDA进行检查,如果有邮件的话,就会将邮件传送回用户的MUA中。
14.1.3 使用的协议 • 在寄信时,由MUA将邮件发送到MTA,或由MTA将信转递到下一个MTA的过程。目前绝大多数的邮件服务器都是使用SMTP(Simple Mail Transfer Protocol ,简单邮件传输协议)协议来实现,端口号使用25。在寄信时,用户的MUA会主动地连接MTA的25号端口,然后将邮件经由MTA的SMTP协议发送出去,而邮件服务器MTA在转递的时候,同样也是经由下一台MTA的SMTP协议将邮件发送出去。收信则是MUA 经由POP ( Post Office Protocol,邮局协议)协议来连接到MTA的使用者Mailbox,以读取或者下载用户在Mailbox当中的邮件。目前常用的POP协议为POP3 ( Post Office Protocol version 3 ),该协议使用的端口号为110,MUA 经由MTA的110号端口将邮件由MTA的mailbox当中将邮件收到本地的MUA上供用户浏览。此外,目前也流行使用IMAP(Internet Message Access Protocol,Internet消息存取通讯协议)协议来收受邮件,IMAP可以避免POP3中当客户端收取了服务器端的邮件之后,该邮件会主动的被服务器端所删除的现象。IMAP具有让用户(客户端)自行定义邮件放置的目录功能,以及是否要储存下载的邮件之后,原邮件是否保留在服务器上面的功能。目前常见的Web接口的电子邮件使用,大部分就是以IMAP来实现的。
14.2 Sendmail的安装14.2.1 使用RPM安装Sendmail • 在安装Sendmail之前首先检查系统是否已经安装了Sendmail服务器软件,使用如下命令: • 以上信息输出说明系统已经安装了Sendmail组件,若是在Red Hat Linux 9安装时没有选择Sendmail服务器,则此时需要安装光盘的第一张,找出/Redhat/RPMS目录下名为Sendmail-8.12.8-4.i386.rpm的文件,然后输入如下指令,系统即会自动完成Sendmail服务器的安装过程。 • [root@jsjgcx root]#rpm –ivh Sendmail-8.12.8-4.i386.rpm • 安装完后,系统中即有相应的组件。其中的Sendmail是主要的邮件服务器程序,/etc/mail/Sendmail.cf是主要的信息配置文件,组件m4是用来转换Sendmail 配置文件的程序,mailx是提供最简单的mail寄信与收信的组件。安装完毕后,可到Red Hat的网站上去下载更新的RPM来更新。
14.2.2使用RPM 安装IMAP 组件 • 在Red Hat Linux 9安装时,可以选择安装POP和IMAP服务器,如果不知是否已安装此软件,可以使用如下方法来判断: • [root@jsjgcx root]# rpm -qa | grep imap • imap-2001a-18 • 若在安装系统时没有安装POP和IMAP服务器,可以找到安装光盘的第二张放入光驱中,用如下的命令安装: • [root@jsjgcx root]#cd /mnt/cdrom/RedHat/RPMS • [root@jsjgcx root]#rpm –ivh imap* • 安装完成后,即同时含有POP和IMAP服务器组件了。一般它的配置文件是在/etc/xinetd.d 里。在启动IMAP服务之前,必须先将/etc/xinetd.d/imap文件中的“disable”参数值改为“no”,同样,要启动POP3服务,必须修改/etc/xinetd.d/ipop3文件。以下是一个简单的设置实例。
14.2.2使用RPM 安装IMAP 组件 • 【例14-1】修改后的ipop3文件 • [root@jsjgcx root]#vi /etc/xinetd.d/ipop3 • #default:off • #description: The POP3 service allows remote users to access their mail \ • # using an POP3 client such as Netscape Communicator,mutt,\ • # or fetchmail. • Service pop3{ • Socket_type = stream • Wait = no • User = root • Server = /usr/sbin/ipop3d • Log_on_success += HOST DURATION • Log_on_failure += HOST • Disable = no //此处需要改为“no”. • }
14.2.2使用RPM 安装IMAP 组件 • 其它文件/etc/xinetd.d/imap文件配置方式类似,最后必须重启xinetd来读取新的配置文件,使对系统所做的修改生效: • [root@jsjgcx root]#/etc/rc.d/init.d/xinetd reload • 可以使用如下方式来测试POP3是否已经正常运行: • #telnet 192.168.0.1 110 • Trying 192.168.0.1… • Connected to jsjgcx(192.168.0.1) • Escape character is ‘^]’. • +OK POP3 jsjgcx v2001.78rh server ready • 以上信息表明POP3已经正常运行。在服务器上配置好POP3和IMAP服务后,就可以使用Outlook Express来连接至邮件服务器读取或下载个人邮件了。
14.2.2使用RPM 安装IMAP 组件 • 其它文件/etc/xinetd.d/imap文件配置方式类似,最后必须重启xinetd来读取新的配置文件,使对系统所做的修改生效: • [root@jsjgcx root]#/etc/rc.d/init.d/xinetd reload • 可以使用如下方式来测试POP3是否已经正常运行: • #telnet 192.168.0.1 110 • Trying 192.168.0.1… • Connected to jsjgcx(192.168.0.1) • Escape character is ‘^]’. • +OK POP3 jsjgcx v2001.78rh server ready • 以上信息表明POP3已经正常运行。在服务器上配置好POP3和IMAP服务后,就可以使用Outlook Express来连接至邮件服务器读取或下载个人邮件了。
14.3 【实验14.1】Sendmail的配置 • 14.3.1 使用m4来设置Sendmail • 一般来说,只要你安装完了Sendmail之后,邮件服务器就可以正式激活了。但在Red Hat 7.x以后的版本中(包含Red Hat 9),为了杜绝广告邮件的问题,在默认的情况下,Sendmail只监听来自127.0.0.1的邮件收发请求,这需要修改配置文件Sendmail.cf。Sendmail还有其它一些配置参数的修改,都需要对配置文件/etc/mail/Sendmail.cf进行修改。因为直接编辑此文件极为复杂,因此Sendmail引入了/etc/mail/Sendmail.mc宏配置文件,它采用一种易于理解的语法来通过宏的方式启用所有的配置选项。以下介绍如何使用m4来将设置文件Sendmail.mc转换成为Sendmail.cf。
14.3 【实验14.1】Sendmail的配置 • 1.m4程序的执行 • m4 程序在执行的时候,需要先读入相关的参数,假设m4设置文件名为Sendmail.mc,那么可以依照以下命令转换Sendmail所需要的Sendmail.cf: • [root@jsjgcx mail]# m4 Sendmail.mc >/etc/Sendmail.cf • 这时,m4已经按照宏配置文件重新建立了Sendmail.cf配置文件。接着重新启动Sendmail程序,这时Sendmail邮件服务器就可以发送邮件了。 • 2. 修改Red Hat Linux 9的设置文件 • 前面已经了解到Red Hat 7.x 以后版本的设定文件中将邮件来源的定义为:“仅来自127.0.0.1 这个接口”,因此我们需要开放监听的接口,修改/etc/mail/Sendmail.mc,这里以Sendmail.mc为主来说明: • 1)查找文件的内容 • [root@jsjgcx root]# cd /etc/mail • [root@jsjgcx mail]# vi Sendmail.mc • 找到下面这一段: • DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA') • 将它修改成 • DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA') • 存盘退出。
14.3 【实验14.1】Sendmail的配置 • 2)重新生成文件: • [root@jsjgcx mail]# m4 Sendmail.mc > redhat.cf • [root@jsjgcx mail]# mv Sendmail.cf Sendmail.cf.old • [root@jsjgcx mail]# cp redhat.cf Sendmail.cf Sendmail.mc文件包含很多用来描述所希望的配置文件的宏。这些宏表达式由宏名称和一些参数组成,宏名称相当于程序语言中的一个功能函数,而表达式中的参数可以逐字传送到Sendmail.cf输出文件或用来管理宏处理发生事件的方式。以下为Sendmail.mc的配置实例:
14.3 【实验14.1】Sendmail的配置 • 【例14-2】仅作为SMTP服务的Sendmail.mc文件示例 • Sendmail.mc配置文档内容如下: • divert(0) • include(`/usr/share/Sendmail-cf/m4/cf.m4') • define(`confDEF_USER_ID',``8:12'') • dnl define(`SMART_HOST',`smtp.your.provider') • undefine(`UUCP_RELAY')dnl • OSTYPE(`linux') • FEATURE(redirect) • FEATURE(always_add_domain) • FEATURE(use_cw_file)
14.3 【实验14.1】Sendmail的配置 • FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u') • MAILER(smtp) • MAILER(procmail) • 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. • 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
14.3 【实验14.1】Sendmail的配置 • dnl yourself from spam. However, the laptop and users on computers that do • dnl not have 24x7 DNS do need this. • FEATURE(`accept_unresolvable_domains')dnl • dnl FEATURE(`relay_based_on_MX')dnl Sendmail的宏定义说明: ①.divert(n)为m4定义一个缓冲动作,当n=-1时缓冲被删除,n=0时开始一个新缓冲, ②.OSTYPE定义宏所使用的操作系统,该宏允许m4程序增加同相关操作系统相关的文件, ③.Domain定义MTA将使用哪些域来传输邮件, ④.Feature定义配置文件中使用的一个特定的功能集, ⑤.Define定义配置文件中的一个特定的选项值, ⑥.MASQUERADE_AS定义Sendmail来应答邮件的其它主机名, ⑦.MAILER 定义Sendmail使用的邮件传输方法, ⑧.dnl注释。
14.3.2 启动Sendmail • Sendmail的启动比较简单,在Red Hat Linux 9.0的系统当中,可以依次启动Sendmail以及POP3服务,其中启动POP3服务的方法见14.2.2节。 • 启动Sendmail的命令如下: • [root@jsjgcx root]# /etc/rc.d/init.d/sendamil start • Starting Sendmail: [ OK ] • 启动Sendmail和POP3服务后,可用如下命令查看系统运行情况: • [root@jsjgcx root]# netstat -tl • Active Internet connections (only servers) • Proto Recv-Q Send-Q Local Address Foreign Address State • tcp 0 0 *:pop3 *:* LISTEN • tcp 0 0 *:smtp *:* LISTEN
14.3.3设定服务器名称 • 激活了Sendmail后,还需要规定服务器主机名称,假设Sendmail服务器的IP地址可以在Internet上以DNS系统查询到,有www.mail.abc.net 及mail.abc.net 两个主机名称个,并且两个主机名称均指向某一台邮件服务器机器,假如想只有mail.abc.net具有收信的资格,而寄信到www.mail.abc.net则不予以接收,并将邮件退回去,那么可以如下操作: • [root@jsjgcx root]# cd /etc/mail • [root@jsjgcx mail]# vi local-host-names • mail.abc.net • 在该文件中仅保留一个主机名即可,而如果有三个主机名,分别是mail.abc.net、www. mail.abc.net 以及mail.soho.net,而且希望三个主机名称都可以收到邮件的话,那么可以做如下的修改: • [root@jsjgcx root]# cd /etc/mail • [root@jsjgcx mail]# vi local-host-names • mail.abc.net • www. mail.abc.net • mail.soho.net • 如上所示,每一行有一个主机名称,将来如果主机新增了不同的HOSTNAME,并且希望该主机名称可以用来收发邮件,那么就修改local-host-names。
14.3.4设置使用者别名 /etc/aliases • 1.邮件群发功能 • 以下介绍关于使用Sendmail来实现群发功能。假设在某公司里,公司的每个员工都有自己的帐号,而公司经理使用电子邮件来向各个部门的员工发公司通告信息,如果要求主管能要记住整个公司的所有员工的电子邮件地址是不现实的,这时可以使用者别名设定功能来解决以上的问题。方法是将公司的每个部门取一个代号,例如销售部,就取sales这样的帐号,但这个帐号不是实际的用户帐号,而仅仅是一个别名,该帐号代表了销售部全体人员的电子邮件,要实现这个功能,可以通过编辑/etc/aliases来实现设置/etc/aliases的语法如下: • 在邮件上面的收件者帐号:真实帐号1, 真实帐号2, 真实帐号3.... • sales:sales1, sales2, sales3.... • 按照上面的设置,当经理寄出一封信给sales@mail.abc.net的时候,在mail.abc.net主机收到这封信之后,会将该封信复制成四封并分别寄给sales1, sales2, sales3三个使用者,所以经理只要记住帐号sales就可以将公司通告以邮件方式发给销售部的所有员工了,具体配置操作如下:
14.3.4 设置使用者别名 /etc/aliases • 1)编辑别名设定文件: • [root@jsjgcx root]# vi /etc/aliases • 新加入这一行在aliases的最底下: • sales: sales1, sales1, sales1..... • 2)生成数据库/etc/aliases.db • [root@jsjgcx root]# newaliases • 注意:在编辑完成/etc/aliases后,要使用newaliases 命令来将资料变成数据库,否则Sendmail将读取不到所做的修改。 • 2.用户的别名设定与重要邮件备份 • 除了邮件群发功能之外,aliases还可以用来作为一个用户多个邮件名称的设定。例如,如果你拥有两个帐号在mail.abc.net中,aaa@mail.abc.net及bbb@mail.abc.net,如果希望通过bbb@mail.abc.net也可以接收到发给aaa@mail.abc.net的邮件,只要在/etc/mail/aliases 里面加入一行: • [root@jsjgcx root]# vi /etc/mail/aliases • aaa:bbb • 做了以上设置并重新生成aliases.db后,发给上述两个电子邮件地址的邮件都将寄到邮件服务器的/var/spool/mail/bbb信箱里面。所以不论是寄给aaa还是bbb,都可以直接以bbb这个帐号来取得这两个邮件地址的邮件。
14.4【实验14.2】邮件客户端的使用 • 下面分别简单介绍Linux下与Windows下客户端如何收发从Sendmail服务器收发电子邮件。 • 在Linux下,可以使用mail命令或者图形界面的客户端软件。 • 在Linux系统中,客户端使用邮件的命令是mail ,以下来介绍如何使用mail来进行发信与收信。 • 1.用mail直接编辑文字邮件与发信 • 使用mail最简单的方式是直接使用编辑的方式来将文字资料传送出去,例如,如果要发送一封邮件给ajia@mail.soho.com时,可以使用如下命令: • [root@jsjgcx root]# mail ajia@mail.soho.com • Subject: This is a test mail. • There are writing area! • You can't use the Up/Down button in this form... • you can finish with "." • 注:这个“.”是结束符号,要正常离开编辑画面使用. • 如上所示,mail 会主动向用户显示Subject ,可以在此输入邮件的标题,然后进入编辑画面,可以在编辑画面中输入中英文,需要注意的是,正文书写完毕在回车换行后输入西文句点“.”,这样mail就会开始将信传送出去。
14.4【实验14.2】邮件客户端的使用 • 2.用mail接收mailbox中的邮件 • 收信还是使用mail命令,直接在提示符之后输入mail 时,会提取用户在/var/spool/mail下的邮箱( mailbox )。例如,对于ajia这个邮件帐号,在系统提示符下输入mail 后,就会将/var/spool/mail/ajia这个文件的内容读出来,并且显示给用户ajia浏览。 • 3.客户端软件Evolution • Linux图形环境Xwindow下可以运行的客户端软件有Evolution、Mozilla和Kmail等,下面简介Evolution的使用。 • (1)启动Evolution • 点击“主菜单|互联网|Evolution电子邮件”,启动程序,出现Evolution电子邮件图形界面,
14.4【实验14.2】邮件客户端的使用 • 如图14-3所示。 图14-3 Evolution界面
14.4【实验14.2】邮件客户端的使用 • (2)设置邮件帐号 • 需要设置:邮件地址;接收邮件服务器类型(选择POP),主机(Sendmail邮件服务器)的域名,邮件帐号,如图14-4所示;发送邮件服务器的类型(选择SMPT),主机的域名,邮件帐号。 图14-4接收邮件服务器的参数设置
14.4【实验14.2】邮件客户端的使用 • (3)邮件收发 • 点击“新建”即可写一封新邮件。邮件的收发与在Outlook express 中十分类似,不再赘述。 • 4.Windows下使用客户端软件Outlook Express或MS Outlook • Outlook Express 的配置使用请参阅本书第5章的相关内容。 • 【习题】 • 1.请列举出四个邮件服务器的相关的组件,并描述它们的功能。 • 2.POP3与SMTP协议的功能是什么? • 3.请简单说明DNS中的MX记录与邮件的关系。 • 4.如果要修改Sendmail,请问Sendmail 的主要配置文件的位置在哪里?可以使用什么程序对Sendmail 进行修改?