自建立基于Linux的邮件服务器.docx
《自建立基于Linux的邮件服务器.docx》由会员分享,可在线阅读,更多相关《自建立基于Linux的邮件服务器.docx(24页珍藏版)》请在冰豆网上搜索。
![自建立基于Linux的邮件服务器.docx](https://file1.bdocx.com/fileroot1/2023-3/1/94649d30-2b4b-4778-8340-e9ae0326f772/94649d30-2b4b-4778-8340-e9ae0326f7721.gif)
自建立基于Linux的邮件服务器
3.1建立基于Linux的邮件服务器
✧工作情境
电子邮件服务是Internet上最基本的服务之一,每一个企业都希望能够建立自己的邮件服务器。
运用Linux系统,建立一台postfix+cyrus-imapd+squirrelmail电子邮件服务器,实现企业内部网络的邮件服务,同时也能够在Internet收发邮件(接收邮件,企业必须在Internet上注册域名)。
✧学习目标
通过本章节的学习,能够了解电子邮件服务器的工作原理,并能够在Linux系统上建立一台postfix+cyrus-imapd+squirrelmail电子邮件服务器,实现Web方式的电子邮件收发服务。
✧考核评价
能够在Linux系统上建立一台postfix+cyrus-imapd+squirrelmail电子邮件服务器,并在邮件服务器上开设两个用户,分别在两台工作站上相互发送邮件,接收邮件。
电子邮件服务是Internet上最基本的服务之一,用户可以通过它与远程用户进行经济、方便、快捷且无需在线的信息交流。
在Internet上,超过30%的业务量是电子邮件,仅次于WWW服务。
3.11.1电子邮件服务的概述
1.电子邮件服务
电子邮件服务是Internet最基本的服务,电子邮件可以用来在Internet或Intranet上进行信息的传递和交流,具有快速、经济的特点。
发一份电子邮件给远在他方的用户,通常来说,对方几分钟之内就能收到。
如果选用传统邮件,发一封特快专递也需要至少一天的时间,而且电子邮件的费用最多只需几毛钱。
与实时信息交流,如电话相比,因为电子邮件采用存储转发的方式,发送邮件时,并不需要收件人处于在线状态,收件人可以根据实际需要随时上网从邮件服务器上收取邮件,方便了信息的交流。
2.电子邮件系统
与其他Internet服务相同,电子邮件服务是基于客户/服务器模式的。
对于一个完整的电子邮件系统而言,它主要由以下三部分构件组成。
(1)用户代理
用户代理(UserAgent,缩写为UA)就是用户与电子邮件系统的接口,在大多数情况下它就是在邮件客户端上运行的程序,主要负责将邮件发送到邮件服务器和从邮件服务器上接收邮件。
目前主流的用户代理主要有Microsoft公司的Outlook和国产的Foxmail等。
(2)邮件服务器
邮件服务器是电子邮件系统的核心构件,它的主要功能是发送和接收邮件,同时向发件人报告邮件的传送情况。
根据用途的不同,可以将邮件服务器分为发送邮件服务器(SMTP服务器)和接收邮件服务器(POP3服务器或IMAP4服务器)。
(3)电子邮件使用的协议
要实现电子邮件服务还必须借助于专用的协议才行。
目前,应用于电子邮件服务的协议主要有SMTP、POP3和IMAP4协议。
⏹SMTP协议
SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
通过SMTP协议所指定的服务器,就可以把E-mail寄到收件人的服务器上了。
SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
⏹POP3协议
POP3即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的协议。
它是Internet电子邮件的第一个离线协议标准,POP3允许从服务器上把邮件存储到本地主机即自己的计算机上,同时删除保存在邮件服务器上的邮件。
遵循POP3协议来接收电子邮件的服务器是POP3服务器。
⏹IMAP4协议
IMAP4即Internet信息访问协议的第4个版本,是用于从本地服务器上访问电子邮件的协议,它是一个客户/服务器模型协议,用户的电子邮件由服务器负责接收保存,用户可以通过浏览信件头来决定是否要下载此信。
用户也可以在服务器上创建或更改文件夹或邮箱,删除信件或检索信件的特定部分。
3.电子邮件服务的工作原理
电子邮件的工作过程遵循客户/服务器模式。
每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。
发送方通过邮件客户程序,将编辑好的电子邮件向邮件服务器(称为SMTP服务器)发送,通常采用SMTP协议。
邮件服务器识别接收者的地址,并向管理该地址的邮件服务器(POP3服务器)发送消息。
邮件服务器将消息存放在接收者的电子信箱内,并告知接收者有新邮件到来。
接收者通过邮件客户程序连接到服务器后,就会看到服务器的通知,进而打开自己的电子信箱来查收邮件。
通常Internet上的个人用户不能直接接收电子邮件,而是通过申请ISP邮件服务器的一个电子信箱,由ISP邮件服务器负责电子邮件的接收。
一旦有用户的电子邮件到来,ISP邮件服务器就将邮件移到用户的电子信箱内,并通知用户有新邮件。
因此,当发送一条电子邮件给一另一个客户时,电子邮件首先从用户计算机发送到ISP邮件服务器,再到Internet,再到收件人的ISP邮件服务器,最后到收件人的个人计算机。
ISP邮件服务器起着“邮局”的作用,管理着众多用户的电子信箱。
每个用户的电子信箱实际上就是用户所申请的账号名。
每个用户的电子邮件信箱都要占用ISP邮件服务器一定容量的硬盘空间,由于这一空间是有限的,因此用户要定期查收和阅读电子信箱中的邮件,以便腾出空间来接收新的邮件。
电子邮件在发送与接收过程中都要遵循SMTP、POP3、IMAP4等协议,这些协议确保了电子邮件在各种不同系统之间的传输。
其中,SMTP负责电子邮件的发送,而POP3或IMAP4则用于接收Internet上的电子邮件。
在Internet上将一个邮件从一台计算机传送到另一台计算机上,是通过两种协议来完成,即SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)和POP3(Post Office Protocol,邮局协议3)或IMAP4(第4个版本的Internet信息访问协议)。
SMTP是Internet协议集中的邮件标准。
在Internet上能够接收电子邮件的服务器都有SMTP。
电子邮件在发送前,发件方的SMTP服务器与接收方的SMTP服务器联系,确认接收方准备好了,则开始邮件传递;若没有准备好,发送服务器便会等待,并在一段时间后继续与接收方邮件服务器联系。
这种方式在Internet上称为“存储——转发”方式。
POP3和IMAP4可允许E-mail客户向某一SMTP服务器发送电子邮件,另外,也可以接收来自SMTP服务器的电子邮件。
换句话说,电子邮件在客户PC机与服务提供商ISP之间的传递是通过P0P3或IMAP4来完成的,而电子邮件在Internet上的传递则是通过SMTP来实现。
3.11.2邮件服务器介绍
在Linux平台中,有许多邮件服务器可供选择,但目前使用较多的是Sendmail服务器、postfix服务器和Qmail服务器。
1.Sendmail服务器
从使用的广泛程度和代码的复杂程度来看,Sendmail是一个很优秀的邮件服务软件。
几乎所有Linux的缺省配置中都内置了这个软件,只需要设置好操作系统,它就能立即运转起来。
但它的安全性较差,Sendmail在大多数系统中都是以root身份运行,一旦邮件服务发生安全问题,就会对整个系统造成严重影响。
同时在Sendmail开放之初,Internet用户数量及邮件数量都较少,使Sendmail的系统结构并不适合较大的负载,对于高负载的邮件系统,需要对Sendmail进行复杂的调整。
2.Postfix服务器
postfix是一个由IBM资助、由WietseVenema负责开发的自由软件工程产物,它的目的就是为用户提供除Sendmail之外的邮件服务器选择。
postfix在快速、易于管理和提供尽可能的安全性方面都进行了较好的考虑。
postfix是基于半驻留、互操作的进程的体系结构,每个进程完成特定的任务,没有任何特定的进程衍生关系,使整个系统进程得到很好的保护。
同时postfix也可以和Sendmail邮件服务器保持兼容性以满足用户的使用习惯。
3.Qmail服务器
Qmail是由DanBemstein开发的可以自由下载的邮件服务器软件,其第一个beta版本0.70.7发布于1996年1月24日。
Qmail是按照将系统划分为不同的模块的原则进行设计的,在系统中有负责接收外部邮件的模块,有管理缓冲目录中待发送的邮件队列的模块,也有将邮件发送到远程服务器或本地用户的模块。
同时只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单,因此就可以达到较高的安全性。
3.11.3邮件服务器的安装与配置
RedHatEnterprise Linux提供了Sendmail和postfix两种STMP邮件服务软件,让用户可以随意地选择其中一种。
与Sendmail相比,postfix的安全性和配置文件的可读性优于Sendmail,同时,postfix也和Sendmail邮件服务器保持兼容性,满足用户的使用习惯。
本章节,采用postfix实现STMP邮件服务,提供邮件的转发和本地的分发功能;采用cyrus-imapd软件实现POP或IMAP服务,实现邮件的异地接收功能;通过第三方的Webmail软件(如squirrelmail)实现Web方式收发邮件,提供Web邮件服务。
因此,通过一个实例,建立一台postfix+cyrus-imapd+squirrelmail电子邮件服务器,实现企业内部网络的邮件服务,同时也能够向Internet发送邮件。
为什么不能从Internet接收邮件邮件呢?
是性能不足吗?
这个简单的问题,留给读者思考。
[实例3.11.1]使用实例3.8.2构建的DNS服务器和所使用的域名:
teach.com。
构建一台postfix+cyrus-imapd+squirrelmail电子邮件服务器,其IP地址:
192.168.1.252,域名:
mail.teach.com。
同时申请两个用户邮件地址,实现邮件的相互收发,并在网络能够连接互联网时,向读者的常用邮箱发送一个邮件。
1.Postfix邮件服务的安装
(1)先检查并停止sendmail的服务
Red HatEnterpriseLinux默认情况下安装程序已经将Sendmail安装到系统中了,如果要使用postfix,就必须先将Sendmail服务停止,然后再安装postfix服务软件。
用下面的命令检查Sendmail服务是否已启动。
netstat-nutlp|grep:
25
该命令的执行结果如图3.11.1所示,表明Sendmail服务正在监听TCP的25号端口。
图3.11.1Sendmail服务正在监听TCP的25号端口
(2)关闭Sendmail服务及开机时自启动功能
设置关闭Sendmail服务及开机时自启动功能,采用命令如下:
/etc/rc.d/init.d/sendmailstop
chkconfigsendmailoff
执行了关闭命令后,情况如图3.11.2所示。
关闭自启动功能后,还可以用以下命令来查看其效果。
chkconfigsendmail --list
图3.11.2关闭Sendmail服务及开机自启动
2.安装postfix服务
通过Linux安装光盘的Server目录中的RPM安装包:
postfix-2.3.3-2.1.el5_2.i386.rpm安装postfix服务。
安装命令:
rpm -ivh/mnt/cdrom/Server/postfix-2.3.3-2.1.el5_2.i386.rpm。
命令执行后,如果出现图3.11.3所示的结果,则表示postfix服务安装成功。
图3.11.3成功安装postfix的过程
3.Postfix邮件服务的配置
Postfix的主要配置文件是/etc/postfix/main.cf。
按照默认值也可以运行,但它只监听127.0.0.1这个接口的邮件收发,如果要使它能够支持客户端完成最基本的邮件收发任务,通常还需要进行下面的设置,修改/etc/postfix/main.cf文件内容。
(1)设置运行postfix服务的邮件主机的主机名、域名
用myhostname参数指定运行postfix服务的邮件主机的主机名称(FQDN名),而用mydomain参数指定该主机的域名称。
myhostname=mail.teac
mydomain=teach.com
当然这两个参数也可以不进行设置,缺省情况下,myhostname参数被设置为本地主机名,而且postfix自动将myhostname参数值的第一部分删除并将其余部分作为mydomain参数的值。
(2)设置由本机寄出的邮件所使用的域名或主机名称
myorigin参数实际上是设置由本台邮件主机寄出的每封邮件的邮件头中mailfrom的地址。
建议用户将myorigin参数设置为本地邮件主机的域名(即:
myorigin=teach.com或$mydomain),这样一封由本地邮件主机寄出的邮件的邮件头中就会含有如类似“From:
“username”c:
\iknow\docshare\data\cur_work\mailto:
”这样的内容,显然更具有可读性。
ﻩmyorigin=$mydomain
(3)设置postfix服务监听的网络接口
默认时,inet_interfaces参数的值被设置为localhost,表明只能在本地邮件主机上寄信。
如果邮件主机上有多个网络接口,而又不想使全部的网络接口都开放postfix服务,就可以用主机名指定需要开放的网络接口。
不过,通常是将所有的网络接口都开放,以便接收从任何网络接口来的邮件,即将inet_interfaces参数的值设置为“all”。
ﻩinet_interfaces=all
(4)设置可接收邮件的主机名称或域名
mydestination参数非常重要,因为只有当发来的邮件的收件人地址与该参数值相匹配时,postfix才会将该邮件接收下来。
例如,这里将该参数值设置为$mydomain和$myhostname,(其中,xxx表示某用户的邮件帐户名),还是,postfix都会接收这些邮件。
ﻩmydestination =$myhostname, $mydomain
(5)设置可转发(Relay)哪些网络的邮件
可以使用mynetworks参数来设置。
可将该参数值设置为所信任的某台主机的IP地址,也可设置为所信任的某个IP子网或多个IP子网(用“,”或者“”分隔)。
这里,将mynetworks参数值设置为192.168.1.0/24,则表示这台邮件主机只转发子网192.168.1.0/24中的客户端所发来的邮件,而拒绝为其他子网转发邮件。
mynetworks=192.168.1.0/24
(6)设置可转发哪些网域的邮件
mynetworks参数是针对邮件来源的IP来设置的,而relay_domains参数则是针对邮件来源的域名或主机名来设置的。
例如,将该参数值设置为teach.com,则表示任何由域teach.com发来的邮件都会被认为是信任的,postfix会自动对这些邮件进行转发。
现在将该参数值设置为$mydestination,实际包含了mail.teach.com和teach.com。
relay_domains=$mydestination
(7)重新启动postfix服务
使用命令/etc/init.d/postfixrestart重新启动postfix服务。
完成了上面的基本设置后,重新启动postfix服务后,这台postfix邮件主机就基本准备好了。
但是目前它仅支持客户端发信,还不支持收信。
4.SMTP认证的配置
Postfix默认不会对外开放转发功能,而仅对本机(localhost)开放转发功能。
实际应用中,虽然必须在Postfix主配置文件中通过设置mynetworks、relay_domains参数来开放一些所信任的网段或网域,但是,还必须通过SMTP认证,对要求转发邮件的客户端进行用户身份(用户帐户与密码)验证。
只有通过了验证,才能接收该用户寄来的邮件并帮助转发。
目前,常用的SMTP认证机制是通过Cyrus SASL软件来实现的。
以下是实现使用CyrusSASL软件实现SMTP认证的具体方法。
(1)检测Cyrus-SASL认证包的安装
RedHatEnterpriseLinux系统默认将安装Cyrus-SASL认证包。
可查看其安装了什么版本。
图3.11.4表明默认安装的Cyrus-SASL认证包版本是2.1.22-4(V2版)。
但相关程序还未安装完全。
图3.11.4 检测Cyrus-SASL安装情况
进一步运行下面的安装Cyrus-SASL认证包相关的程序:
rpm-ivh /mnt/cdrom/Server/cyrus-sasl-gssapi-2.1.22-4.i386.rpm
rpm -ivh/mnt/cdrom/Server/cyrus-sasl-md5-2.1.22-4.i386.rpm
(2)Cyrus-SASLV2的密码验证机制
默认情况下,Cyrus-SASLV2版使用saslauthd这个守护进程进行密码认证,使用saslauthd -v命令可以查看当前系统中的Cyrus-SASLV2所支持的密码验证机制。
图3.11.5 查看系统中的Cyrus-SASLV2所支持的密码验证机制
使用saslauthd-v命令的执行情况如图3.11.5所示,说明了当前可使用的密码验证方法有getwent、kerberos5、pam、rimap、shadow和ldap。
现在采用shadow验证方法,也就是直接用邮件服务器Linux系统的/etc/shadow文件中的用户帐户及密码进行验证。
因此,在配置文件/etc/sysconfig/saslauthd中,应修改当前系统所采用的密码验证机制为shadow,即修改/etc/sysconfig/saslauthd文件中的内容,将
默认的语句MECH=pam修改为MECH=shadow。
修改后的结果如图3.11.6所示。
图3.11.6采用shadow验证时/etc/sysconfig/saslauthd文件内容
(3)测试Cyrus-SASLV2的认证功能
由于Cyrus-SASL V2版默认使用saslauthd这个守护进程进行密码认证,因此需要使用下面的命令:
psaux|grepsaslauthd来查看saslauthd进程是否已经运行。
如果命令ps aux|grepsaslauthd执行的结果类似于图3.11.7所示,表明saslauthd进程已经在运行。
图3.11.7捕获正在运行的saslauthd进程
如果没有发现saslauthd进程,则可用下面的命令启动该进程并设置它开机自启动。
/etc/init.d/saslauthd start
chkconfig saslauthdon
假定这个Linux邮件服务器系统已有两个普通用户teacher和student,密码分别是“qwerty”和“poiuyt”,然后,可用下面的命令测试saslauthd进程的认证功能。
测试teacher账号认证的命令如下:
/usr/sbin/testsaslauthd-u teacher-p'qwerty'
图3.11.8所示的结果,则表示通过teacher、student账号和密码的认证,说明saslauthd的认证功能已起作用。
图3.11.8 使用saslauthd的认证teacher、student账号和密码
(4)设置postfix启用SMTP认证
要让postfix启用SMTP认证,就必须对postfix的主配置文件/etc/postfix/main.cf进行修改,添加有关SMTP认证的设置,因此,在/etc/postfix/main.cf文件后面添加如图3.11.9所示的内容。
图3.11.9 添加启用SMTP认证内容
在完成上述设置后,必须使用命令/etc/init.d/postfixreload重新载入配置文件,或使用重新启动Postfix服务命令/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来进行测试,测试过程如图3.11.10所示,测试时当然必须先启动postfix服务,再进行测试。
图3.11.10测试Postfix是否启用了SASL认证
图3.11.10所示的情况表明,输入ehlo命令向远程126.com域发出消息,在随后得到的本地Postfix响应信息中,如果出现第12、13行信息(显示当前Postfix所支持的认证方式),则表明Postfix已启用了SMTP认证功能。
5.启动和停止Postfix服务
(1)启动Postfix服务
启动Postfix服务的命令为:
/etc/init.d/postfixstart
(2)停止Postfix服务
停止Postfix服务的命令为:
/etc/init.d/postfix stop
(3)重新启动Postfix服务
重新启动Postfix服务的命令为:
/etc/init.d/postfixrestart
(4)重新载入Postfix主配置文件
重新载入Postfix主配置文件的命令为:
/etc/init.d/postfix reload
每当修改了Postfix主配置文件/etc/postfix/main.cf后,想要使新的配置生效,虽然可以通过重新启动服务来实现,但是如果当前Postfix服务正在运行,重新启动服务就会花费不少的时间。
最好的方法就是让Postfix重新载入主配置文件的内容,并使新的配置立即生效。
(5)自动启动Posffix服务
如果需要让Postfix服务随系统启动而自动加载,可以执行“ntsysv”命令启动服务配置程序,找到“postfix”服务,在其前面加上星号(*),然后选择“确定”即可。
6.防火墙与Posffix服务
Postfix服务使用TCP协议的25端口,如果Linux服务器开启了防火墙功能,就应关闭防火墙功能或设置允许TCP协议的25端口通过。
可以使用以下命令开放TCP协议的25端口。
iptables -IINPUT-ptcp--dport25-jACCEPT
7.IMAP邮件服务的实现
Postfix服务只是一个邮件传输代理,它只提供SMTP服务,也就是只提供邮件的转发及本地的分发功能。
要实现邮件的异地接收,还必须安装POP或IMAP服务。
通常情况下,都是将STMP服务和POP或IMAP服务安装在同一台主机上,那么这台主机也就称为电子邮件服务器。
在本例子中采用RedHatEnterprise