00:00/00:00

章节概述:

本章节从电子邮局系统的组成角色开始讲起,了解MUA、MTA与MDA的作用,熟悉熟悉SMTP、POP3与IMAP4邮局协议。

学习postfix与dovecot服务程序的使用方法并逐条讲解配置参数,完整演示了部署基础电子邮局系统以及设置用户别名邮箱的方法。

15.1 电子邮局系统

1971年由美国国防部资助的的ARPANET科研项目遇到了严峻问题——参于科研项目的科学家在不同的地方工作,不能及时的分享各自的研究成果,迫切的需要一种能够借助于网络且建立在计算机之间的传输数据的方法。 当时麻省理工学院Ray Tomlinson博士也是ARPANET项目的科研成员,当年秋天他使用软件SNDMSG向自己另一台电脑发出了人类历史上第一封Email邮件。
电子邮件诞生

Ray Tomlinson博士决定选择"@"符号作为用户名与主机地址的间隔符。

邮件应用协议包括:

简单邮件传输协议(SMTP),用来发送或中转发出的电子邮件,占用tcp 25端口。

第三版邮局协议(POP3),用于将服务器上把邮件存储到本地主机,占用tcp 110端口。

第四版互联网信息访问协议(IMAP4),用于在本地主机上访问邮件,占用tcp 143端口。

邮件投递工程 电子邮件系统(E-mail,即Electronic mail system)由三部分组成

用户代理MUA(Mail User Agent):用于收发邮件。

邮件传输代理MTA(Mail Transfer Agent):将来自于MUA的邮件转发给指定用户。

邮件投递代理MDA(Mail Delivery Agent):将来自于MTA的邮件保存到本机的收件箱中。

电子邮件系统与大多数的网络应用协议有本质的不同,例如前面讲过的文本传输协议(FTP),FTP服务程序就像拨打电话一样,需要对方当前也保持在线,否则会报错连接超时。但电子邮件的发送者则并不需要等待投递工作完成,因为如果对方服务器宕机了,则会将要发送的内容自动的暂时保存到本地,检测到对方服务器恢复后再次投递。另外如果您想搭建企业级的电子邮件系统,请考虑下面几点:

反垃圾与反病毒模块:阻止垃圾邮件或病毒邮件对企业邮箱的干扰。
邮件加密:保证邮件内容不被嗅探、篡改。
邮件监控审核:监控全体职员邮件中有无敏感词,透露企业资料等。
稳定性:有较好的防DDOS攻击的能力,保证系统在线率等。
15.2 部署基础电子邮局系统

单独的使用Postfix服务程序并不能让用户完成收发邮件的操作,因为一个基础的电子邮局系统至少需要有SMTP服务器POP3/IMAP服务器,为了能够部署一个基础的电子邮局系统,我们需要使用到下面的软件:

Postfix:提供邮件发送服务,即SMTP。

Dovecot:提供邮件收取服务,即POP3。

OutLook Express:客户端收发邮件的工具。

邮局系统流程图

Postfix(发送邮件)+Dovectot(接收邮件)+OutLook(客户端工具)

配置本地主机名
修改本地主机名的配置文件:

[root@linuxprobe ~] # vim /etc/hostname
mail.linuxprobe.com
[root@mail~] # hostname
mail.linuxprobe.com

若要为用户提供linuxprobe域的电子邮局系统,则需先在DNS服务器中增加A记录和MX记录:

@ IN MX 10 mail.linuxprobe.com.
mail IN A 192.168.10.10

这样配置解析记录后,主机名即为mail.linuxprobe.com,而邮件域为@linuxprobe.com配置DNS地址

(请读者自行使用nmtui工具将网卡的DNS地址配置妥当即可)

15.2.1 配置Postfix服务程序

Postfix是一款由IBM出资研发的免费开源的邮局服务程序,兼容于Sendmail服务程序,即Sendmail用户可以很方便的迁移到Postfix程序,且收发件性能远超过Sendmail,能够自动增加减少进程的数量,保证邮局系统的高性能与稳定性,另外Postfix是由诸多的小模块组成,每个小模块完成特定的功能,使得管理员可以灵活的组合这些模块。
停止iptables防火墙:

[root@linuxprobe ~]# systemctl disable iptables 

红帽RHEL7系统中默认已安装postfix邮局服务程序:

[root@linuxprobe ~]# yum install postfix
Loaded plugins: langpacks, product-id, subscription-manager
rhel7 | 4.1 kB 00:00
(1/2): rhel7/group_gz | 134 kB 00:00
(2/2): rhel7/primary_db | 3.4 MB 00:00
Package 2:postfix-2.10.1-6.el7.x86_64 already installed and latest version
Nothing to do

Postfix邮局服务程序的配置文件如下:

文件 作用
/usr/sbin/postfix 主服务程序
/etc/postfix/master.cf master主程序的配置文件。
/etc/postfix/main.cf postfix服务的配置文件。
/var/log/maillog 记录邮件传递过程的日志。


第1步:查看Postfix服务程序主配置文件:

[root@mail~]# cat /etc/postfix/main.cf

配置文件足足有679行!但不用担心,绝大部分都是注释信息,我们只学习这些参数即可:

参数 作用
myhostname 邮局系统的主机名。
mydomain 邮局系统的域名。
myorigin 从本机寄出邮件的域名名称。
inet_interfaces 监听的网卡接口。
mydestination 可接收邮件的主机名或域名。
mynetworks 设置可转发那些主机的邮件。
relay_domains 设置可转发那些网域的邮件


编辑Postfix服务程序的主配置文件(修改5处参数,另外需要将参数前面的井号(#)去掉才可生效):

[root@mail~] # vim /etc/postfix/main.cf
//修改第76行的邮局主机名。
myhostname = mail.linuxprobe.com
//修改第83行的邮局域名。
mydomain = linuxprobe.com
//修改第99行的寄出邮件域名,$mydomain的值已在上面定义。
myorigin = $mydomain
//修改第116行的监听网卡。
inet_interfaces = all
//修改第164行的可接收邮件的主机名和域名。
mydestination = $myhostname, $mydomain

第2步:创建邮局帐号:

[root@mail~] # useradd boss
[root@mail~] # echo "linuxprobe" | passwd --stdin boss
Changing password for user boss. passwd: all authentication tokens updated successfully.

第3步:启动Postfix服务程序:

[root@mail~] # systemctl restart postfix
[root@mail~] # systemctl enable postfix
ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user.target.wants/postfix.service'

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:”systemctl enable postfix“。

15.2.2 配置Dovecot服务程序

第1步:安装Dovecot服务程序:

[root@mail~] # yum install dovecot -y
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装过程………………
Installing: dovecot x86_64 1:2.2.10-4.el7 rhel7 3.2 M
Installing for dependencies: clucene-core x86_64 2.3.3.4-11.el7 rhel7 528 k
………………省略部分安装过程………………
Complete!

第2步:修改Dovecot程序主配置文件:

[root@mail~] # vim /etc/dovecot/dovecot.conf
//修改第24行的支持邮局协议。
protocols = imap pop3 lmtp
//然后追加允许明文认证(25行)。
disable_plaintext_auth = no
//修改第48行的允许登陆网段地址,全部允许即为(0.0.0.0/0)。
login_trusted_networks = 192.168.10.0/24

第3步:配置邮件的格式与存储路径。<
编辑dovecot的配置文件(将第25行的注释符(#号)去掉):

[root@mail~] # vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u

第4步:创建邮件的存储目录:

[root@mail~] # su - boss
Last login: Sat Aug 15 16:15:58 CST 2015 on pts/1
[boss@mail ~]$ mkdir -p mail/.imap/INBOX

第5步:启动Dovecot服务程序:

[root@mail~] # systemctl restart dovecot
[root@mail~] # systemctl enable dovecot
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'

因为在红帽RHCSA、RHCE或RHCA考试后都要重启您的实验机再执行判分脚本。

所以请读者在日常工作中也要记得将需要的服务加入到开机启动项中:”systemctl enable dovcot“。

 

15.2.3 用户使用邮局系统

您可以在《软件资源库》下载到Windows7系统以及OutLook2007邮件管理工具,系统网卡请按要求配置IP地址:

主机名称 操作系统 IP地址
邮局服务器 红帽RHEL7操作系统 192.168.10.10
DNS服务器 红帽RHEL7操作系统 192.168.10.20
用户端主机 微软Windows7系统


配置客户机IP地址在outlook中登陆boss用户后尝试给root@linuxprobe.com发送邮件。

  • 第1步:开启OutLook程序。


登陆到邮局服务器(192.168.10.10)后查看root用户的邮件:

[root@mail~] # mail
Heirloom Mail version 12.5 7/5/10.Type ? for help.
"/var/mail/root": 3 messages 3 unread >
U 1 user@localhost.com Fri Jul 10 09:58 1631/123113 "[abrt] full crash r" 
U 2 Anacron Sat Aug 15 13:33 18/624 "Anacron job 'cron.dai" 
U 3 boss Sat Aug 15 19:02 118/3604 "Hello~" 
&> 3
Message 3:
From boss@linuxprobe.com Sat Aug 15 19:02:06 2015 
Return-Path:  
X-Original-To: root@linuxprobe.com 
Delivered-To: root@linuxprobe.com 
From: "boss" 
To: 
Subject: Hello~
Date: Sat, 15 Aug 2015 19:02:06 +0800
Content-Type: text/plain; charset="gb2312" 
当您收到这封邮件时,证明我的邮局系统实验已经成功!
> quit 
Held 3 messages in /var/mail/root

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

15.3 设置用户别名邮箱

我们刚刚顺利的向root用户发送了邮件,再来试试向bin用户(系统默认创建)的用户发送一封邮件吧:
向用户bin发送邮件
尝试切换到bin用户(提示此帐户当前不可用):

[root@mail ~]# su bin 
This account is currently not available. 

查看root用户的邮箱:

[root@mail ~]# mail
Heirloom Mail version 12.5 7/5/10. 
Type ? for help. 
"/var/mail/root": 4 messages 4 new > 
U 1 user@localhost.com Fri Jul 10 09:58 1630/123103 "[abrt] full crash r" 
U 2 Anacron Wed Aug 19 17:47 17/619 "Anacron job 'cron.dai" 
U 3 boss Sat Aug 15 19:02 118/3604 "Hello~" U 
4 boss Wed Aug 19 18:49 116/3231 "你好,用户Bin。" 
&> 4 
Message 4: 
From boss@linuxprobe.com Wed Aug 19 18:49:05 2015 
Return-Path: <boss@linuxprobe.com> 
X-Original-To: bin@linuxprobe.com 
Delivered-To: bin@linuxprobe.com 
From: "boss" <boss@linuxprobe.com> 
To: <bin@linuxprobe.com>
Subject: 你好,用户Bin。 
Date: Wed, 19 Aug 2015 18:49:05 +0800 
Content-Type: multipart/alternative; boundary="----=_NextPart_000_0006_01D0DAAF.B9104E90" 
X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AdDabKrQzUHVBTgRQMaCtUsVtqfL1Q== Content-Language: zh-cn Status: R Content-Type: text/plain; charset="gb2312" 
这是一封发给用户Bin的文件。 
&> exit 

好奇怪!这封明明发送给bin用户的邮件为什么会被root收到呢?这就是aliases别名机制

查看aliases别名机制的配置文件:[root@mail ~]# cat /etc/aliases

#
# Aliases in this file will NOT be expanded in the header from
# Mail, but WILL be visible over networks or from /bin/mail.
#
# >>>>>>>>>> The program "newaliases" must be run after
# >> NOTE >> this file is updated for any changes to
# >>>>>>>>>> show through to sendmail.
#
# Basic system aliases -- these MUST be present.
mailer-daemon: postmaster
postmaster: root
# General redirections for pseudo accounts.
bin: root
daemon: root
adm: root
lp: root
sync: root
shutdown: root
halt: root
mail: root
news: root
uucp: root
operator: root
games: root
gopher: root
ftp: root
nobody: root
radiusd: root
nut: root
dbus: root
vcsa: root
canna: root
wnn: root
rpm: root
nscd: root
pcap: root
apache: root
webalizer: root
dovecot: root
fax: root
quagga: root
radvd: root
pvm: root
amandabackup: root
privoxy: root
ident: root
named: root
xfs: root
gdm: root
mailnull: root
postgres: root
sshd: root
smmsp: root
postfix: root
netdump: root
ldap: root
squid: root
ntp: root
mysql: root
desktop: root
rpcuser: root
rpc: root
nfsnobody: root
ingres: root
system: root
toor: root
manager: root
dumper: root
abuse: root
newsadm: news
newsadmin: news
usenet: news
ftpadm: ftp
ftpadmin: ftp
ftp-adm: ftp
ftp-admin: ftp
www: webmaster
webmaster: root
noc: root
security: root
hostmaster: root
info: postmaster
marketing: postmaster
sales: postmaster
support: postmaster
# trap decode to catch security attacks
decode: root
# Person who should get root's mail
#root: marc

这样看完好像就大致明白了吧,原来这个文件定义了用户名与它的别名,格式为“别名 用户名”。

如果我们希望所有发送给xxoo@linuxprobe.com的邮件,均保存到root@linuxprobe.com的邮箱中,则这样追加:

# General redirections for pseudo accounts.
xxoo: root

顺利编辑/etc/aliases文件后需要执行命令"newaliases",这样追加的用户别名才能立即生效,然后尝试发送邮件。
向用户xxoo发送邮件

[root@mail ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/root": 5 messages 1 new 4 unread
U 1 user@localhost.com Fri Jul 10 09:58 1631/123113 "[abrt] full crash report"
U 2 Anacron Wed Aug 19 17:47 18/629 "Anacron job 'cron.daily' on mail.linuxprobe.com"
U 3 boss Wed Aug 19 18:44 114/2975 "hello"
4 boss Wed Aug 19 18:49 117/3242 "你好,用户Bin。"
>N 5 boss Wed Aug 19 19:18 115/3254 "这是一封发送给xxoo用户的邮件。"

而如果想取消别名的话,只需编辑掉aliases文件中的用户别名后执行newaliases命令即可,很简单吧~
出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:邮件应用协议包括:

答案:SMTP、POP3和IMAP4。

2:简述MUA、MTA、MDA的用处:

答案:MUA用于收发邮件、MTA用于转发邮件、MDA用于保存邮件。

3:如果在dovecot程序的配置文件中限制允许连接的主机?

答案:修改login_trusted_networks参数的值。

4:使用outlook连接后提示找不到服务器或连接超时,最可能是什么原因?

答案:极大可能是DNS问题,请ping mail.linuxprobe.com

5:定义邮件用户别名邮箱后让其立即生效?

答案:执行newaliases命令。

刘遄

刘遄

我们懂得《Linux就该这么学》作为一本Linux入门读物,更加有责任,有必要将文章质量不断提高,知识点不断扩充,让实验更加的实用,不辜负每位读者给予我们的支持,因此我们正在全球各地部署书籍的镜像站点,想用最迅猛的访问速度满足您心中那颗求知的小宇宙,同时,向每位会员承诺,本书可永久免费学习,提供所有所需工具以及在能力范围内的答疑支持。收费培训服务:http://www.linuxprobe.com/training
刘遄