linux下搭建邮件服务器
- 格式:docx
- 大小:740.33 KB
- 文档页数:9
linux下搭建邮件效劳器
默认分类 2021-11-16 18:51:54 阅读42 评论0 字号:大中小 订阅
一、Sendmail概述
sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理用来接受用户的指令,将用户的信件传送至信件传输代理,如:outlook express、foxmail等。而投递代理那么从信件传输代理取得信件传送至最终用户的邮箱,如:procmail。
当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用户代理必须试图去寻找一个信件传输代理,把邮件提交给它。信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理效劳器, 并且通过网络将邮件传送给它。对方的效劳器接收到邮件之后,将其缓冲存储在本地,直到电子邮件的接收者观察自己的电子信箱。
显然,邮件传输是从效劳器到效劳器的,而且每个用户必须拥有效劳器上存储信息的空间〔称为信箱〕才能接受邮件〔发送邮件不受这个限制〕。可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件效劳器,将信件在效劳器之间传输并且将接收到的邮件缓冲或者 提交给最终投递程序。有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置十分复杂,因此,也有人使用另外的一些工具,如qmail、postfix等等。
当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递给对应的效劳器,这是通过DNS效劳实现的。例如一封邮件的目标地址是tom@example ,那么sendmail首先确定这个地址是用户名〔tom〕+机器名〔example 〕的格式,然后,通过查询DNS来确定需要把信件投递给某个效劳器。
DNS数据中,与电子邮件相关的是MX记录,例如在example 这个域的DNS数据文件中有如下设置:
IN MX 10 mail
IN MX 20 mail1
mail IN A 202.99.11.120
mail1 IN A 202.99.11.121
显然,在DNS中说明example 有两个信件交换〔MX〕效劳器,于是,sendmail试图将邮件发送给两者之一。一般来说,排在前面的的MX效劳器的优先级别比拟高,因此效劳 器将试图连接mail.example 的25端口,试图将信件报文转发给它。如果成功,你的smtp效劳器的任务就完成了,在这以后的任务,将由mail.example 来完成。在一般的情况下,mail换器会自动把信件内容转交给目标主机,不过,也存在这样的情况,目标主机〔比方example 〕可能并不存在,或者不执行smtp效劳,而是由其mx交换器来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来观察它。
如果DNS查询无法找出对某个地址的MX记录〔通常因为对方没有信件交换主机〕,那么sendmail将是试图直接与来自邮件地址的主机对话并且发送邮件。 二、Sendmail的配置文件
sendmail安装完毕后,具有多个配置文件,所有文件都旋转在/etc/mail目录下.其中主配置文件为/etc/mail/sendmail.cf,与它存放在同一目录下的许多文件都具有重要功能,如下所示:
/etc/mail/access sendmail访问数据库文件
/etc/aliases 邮箱别名
/etc/mail/local-host-names sendmail接收邮件主机列表
/etc/mail/submit.cf /etc/mail/submit.mc sendmail辅助配置文件
/etc/mail/mailertable 邮件分发列表
/etc/mail/virtusertable 虚拟用户和域列表
三、搭建sendmail效劳器
1) Sendmail效劳器的网络配置:
效劳器IP地址是192.168.1.110;DNS效劳已经启动,并可以解析example 域名;具体操作如下列图所示:
2) 安装sendmail所需软件:
sendmail的主程序包sendmail-8.13.8默认已经安装
sendmail-cf 程序是为了以后使用m4命令生成sendmail的主配置文件
dovecot程序主要负责接收邮件,但该程序包与mysql-5、perl-DBI程序有依赖关系,所以安装该程序包时也必须安装mysql-t和perl-DBI。具体操作如下列图所示: Sendmail所需软件安装完毕后,需要设置sendmail效劳与dovecot效劳开机时自动启动,具体操作如下列图所示:
3) 修改sendmail相关配置文件:
为了使本区域内部实现收发邮件,需要编辑/etc/mail/local-host-names文件,并在该文件中添加本区域的域名(本例中为example )。具体操作如下列图所示:
/etc/mail/local-host-names文件的内容为:
由于sendmail主配置文件sendmail.cf文件的内容比拟复杂,修改时的难度较大,所以我们可以先修改/etc/mail/sendmail.mc文件,然后再将该文件的内容导入到sendmail.cf文件。方法如下:vim /etc/mail/sendmail.mc,将文件中的"Addr=127.0.0.1"修改为"Addr=邮件效劳器IP地址"即可;然后再使用m4 sendmail.mc > sendmail.cf命令将sendmail.mc的内容导入到sendmail.cf中。具体操作如下列图所示:
/etc/mail/sendmail.mc源文件内容如下列图所示:
/etc/mail/sendmail.mc修改后的文件内容如下列图所示:
使用m4 sendmail.mc > sendmail.cf 命令如下列图所示:
配置文件修改完毕,此时可以启动sendmail 效劳与dovecot效劳,操作如下列图所示:
4) 收发邮件测试:
通过以上操作,已经可以实现在example 区域内部收发邮件,我们可以新建立几个邮件用户并进行测试。
新建立邮件用户操作如下列图所示:
使用当前用户(root)给tom用户发邮件,邮件内容为"hello tom",邮件标题为"first mail"。并使用tom的身份登录邮箱,查看邮件是否存在。
发邮件使用以下命令:echo "邮件内容"|mail -s "邮件标题" 收件人 收邮件使用以下命令:mutt -f pop://用户名@邮件效劳器地址
具体操作如下列图所示:
翻开邮箱后可以看到一封新邮件,如下列图所示(邮件是发给tom用户的,标题为first mail):
上图中输入回车后可以查看邮件内容,如下列图所示:
5) 使用access.db文件设置邮件中继功能:
由于上述操作只能实现example 区域内部收发邮件,不能实现内部用户与外部邮件系统的通迅〔例:上述操作不能实现example 的用户向internet上的邮件系统发邮件〕。所以我们需要修改/etc/mail/access文件,以实现本区域的邮件用户与外部邮件系统通迅。
方法如下:vim /etc/mail/access 文件,并在该文件中添加允许中继的网段〔即添加本邮件效劳器允许将哪些网段客户端的邮件中继转发到外部区域〕。本例中/etc/mail/access文件的内容如下列图所示:
修改完/etc/mail/access文件后,还需要使用makemap命令将access文件的内容导入到access.db文件中,并且重新启动sendmail效劳即可。方法:makemap hash access.db < access,具体操作如下列图所示:
6) 邮件客户端测试:
客户端的根本网络配置如下列图所示:
配置foxmail客户端软件,并准备向外部邮件系统发邮件(本例中是向caiyuanji at gobenet 用户发邮件),具体操作如下列图所示: 使用外部邮箱用户登录,查看是否已经收到邮件,本例中我们使用caiyuanji at gobent 用户登录邮箱,如下列图所示:
7) 使用sasl实现公司外出(出差或分公司)员工与公司内部或外部的邮件通迅。
由于access.db只能通过IP网段来控制邮件中继功能,它不能实现用户名+密码的认证方式来控制邮件中继功能。所以它不能满足公司外出员工使用自己的内部邮箱与互联网上的其它邮件系统通迅。(假设公司有专线接入Internet, 且在其它城市有多个分支机构, 公司有统一的域名example ,所有员工的邮件地址类似如username@example 。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。还有一种情况是移动用户,经常外地出差,公司派遣用户在外出差旅行期间,用户需要发送邮件,那么也同样需要一种认证方案去允许合法用户的邮件relay。〕
因此我们需要使用sasl的认证机制来控制合法用户的邮件中继(主要是通过验证用户名与密码是否正确,然后控制用户是否可以中继邮件)。
SASL简单身份验证和平安层 (Simple Authentication and Security Layer, ) 是一种为网络协议提供验证和可选平安性效劳的框架。应用程序将调用 SASL 库 /usr/lib/libsasl.so,此库提供给用程序与各种 SASL 机制之间的胶合层。验证过程及提供可选平安性效劳时会使用 SASL 机制。
首先:安装sasl的程序包cyrus-sasl,并启动saslauthd效劳〔提示:别忘了使用chconfig saslauthd on 命令设置开机自动运行〕。redhat Enterprise 5默认已经安装,如下列图所示:
然后:修改/etc/mail/sendmail.mc文件,将文件中的"Addr=127.0.0.1"修改为"0.0.0.0",并将dnl DAEMON_OPTIONS('Port=submission, Name=MSA, M=Ea ')dnl 行最前的dnl删除。效果如下列图所示:
并且将该文件中含有"MD5"的两行 行首的"dnl"删除,并保存退出,效果如下列图所示:
最后:使用 m4 sendmail.mc > sendmail.cf 命令将sendmail.mc文件导入sendmail.cf配置文件中。并且重新启动sendmail效劳即可(server sendmail restart)。
通过以上操作sendmail效劳器已经支持sasl认证功能。但还需要在客户端软件中设置支持"smtp身份验证"功能。