电子邮件系统
电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有下面这些。
简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的25/TCP端口。
邮局协议版本3(Post Office Protocol 3):用于将电子邮件存储到本地主机,占用服务器的110/TCP端口。
Internet消息访问协议版本4(Internet Message Access Protocol 4):用于在本地主机上访问邮件,占用服务器的143/TCP端口。
在电子邮件系统中,为用户收发邮件的服务器名为邮件用户代理(Mail User Agent,MUA)。另外,既然电子邮件系统能够让用户在离线的情况下依然可以完成数据的接收,肯定得有一个用于保存用户邮件的“信箱”服务器,这个服务器的名字为邮件投递代理(Mail Delivery Agent,MDA),其工作职责是把来自于邮件传输代理(Mail Transfer Agent,MTA)的邮件保存到本地的收件箱中。其中,这个MTA的工作职责是转发处理不同电子邮件服务供应商之间的邮件,把来自于MUA的邮件转发到合适的MTA服务器。例如,我们从新浪信箱向谷歌信箱发送一封电子邮件,这封电子邮件的传输过程如图所示。
在生产环境中部署企业级的电子邮件系统时,有4个注意事项请留意。
1.添加反垃圾与反病毒模块:它能够很有效地阻止垃圾邮件或病毒邮件对企业信箱的干扰。
2.对邮件加密:可有效保护邮件内容不被黑客盗取和篡改。
3.添加邮件监控审核模块:可有效地监控企业全体员工的邮件中是否有敏感词、是否有透露企业资料等违规行为。
4.保障稳定性:电子邮件系统的稳定性至关重要,运维人员应做到保证电子邮件系统的稳定运行,并及时做好防范分布式拒绝服务(Distributed Denial of Service,DDoS)攻击的准备。
部署基础的电子邮件系统
一个最基础的电子邮件系统肯定要能提供发件服务和收件服务,为此需要使用基于SMTP协议的Postfix服务程序提供发件服务功能,并使用基于POP3协议的Dovecot服务程序提供收件服务功能。这样一来,用户就可以使用Outlook Express或Foxmail等客户端服务程序正常收发邮件了。电子邮件系统的工作流程如图所示。
例1:在配置电子邮件服务前
服务器需要做的:
1.配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致;
2.清空iptables防火墙默认策略,并保存策略状态,避免因防火墙中默认存在的策略阻止了客户端DNS解析域名及收发邮件;
3.为电子邮件系统提供域名解析,配置好后重启bind服务,更改网卡DNS地址为服务器本机,重启网卡服务。
vim /etc/hostname #配置服务器主机名称
mail.linuxprobe.com
hostname #查看当前服务器主机名称,看是否修改成功
iptables -F #清空iptables防火墙默认策略
service iptables save #保存iptables防火墙当前策略状态
yum install -y bind-chroot #安装bind服务,配置DNS域名解析
vim /etc/named.conf #编辑bind服务主配置文件
...
listen-on port 53 { any; }; #允许服务器上所有IP地址均可提供DNS域名解析服务
...
allow-query { any; }; #允许所有人对本服务器发送DNS查询请求
...
vim /etc/named.rfc1912.zones #编辑bind服务的区域配置文件
zone "linuxprobe.com" IN {
type master;
file "linuxprobe.com.zone";
allow-update {none;};
};
cd /var/named #进入保存数据配置文件以及相关模板文件的目录
cp -a named.localhost linuxprobe.com.zone #复制正向解析模板,复制文件保留原有权限属性
vim linuxprobe.com.zone #编辑数据配置文件
$TTL 1D
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
; serial
1D ; refresh
1H ; retry
1W ; expire
3H); minimum
NS ns.linuxprobe.com.
ns IN A 192.168.10.10
@ IN MX 10 mail.linuxprobe.com.
mail IN A 192.168.10.10
systemctl restart named #重启bind服务
systemctl enable named #把bind服务加入开机启动项
vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 #修改网卡参数
...
DNS=192.168.10.10
...
systemctl restart network #重启网卡服务
配置Postfix服务程序
Postfix是一款由IBM资助研发的免费开源电子邮件服务程序,能够很好地兼容Sendmail服务程序,可以方便Sendmail用户迁移到Postfix服务上。Postfix服务程序的邮件收发能力强于Sendmail服务,而且能自动增加、减少进程的数量来保证电子邮件系统的高性能与稳定性。另外,Postfix服务程序由许多小模块组成,每个小模块都可以完成特定的功能,因此可在生产工作环境中根据需求灵活搭配它们。
Postfix服务程序主配置文件中的重要参数
参数 | 作用 |
---|---|
myhostname | 邮局系统的主机名 |
mydomain | 邮局系统的域名 |
myorigin | 从本机发出邮件的域名名称 |
inet_interfaces | 监听的网卡接口 |
mydestination | 可接收邮件的主机名或域名 |
mynetworks | 设置可转发哪些主机的邮件 |
relay_domains | 设置可转发哪些网域的邮件 |
安装Postfix:yum install -y postfix。RHEL7默认已经安装。需要禁用iptables防火墙(systemctl disable iptables),否则外部用户无法访问电子邮件系统。
Postfix与vsftpd服务程序一样,都可以调用本地系统的账户和密码。
Postfix服务程序的主配置文件:/etc/ postfix/main.cf。内容679行(大部分都是注释)。
例2:在例1基础上,配置Postfix服务程序。
yum install -y postfix #安装postfix服务程序
systemctl disable iptables #禁用iptables防火墙
vim /etc/postfix/main.cf #编辑Postfix服务的主配置文件
...
myhostname = mail.linuxprobe.com #定义一个名为myhostname的变量,用来保存服务器的主机名称
...
mydomain = linuxprobe.com #定义一个名为mydomain的变量,用来保存邮件域的名称
...
myorigin = $mydomain #调用前面的mydomain变量,用来定义发出邮件的域(调用变量的好处是避免重复写入信息,以及便于日后统一修改)。
...
inet_interfaces = all #定义网卡监听地址。可以指定要使用服务器的哪些IP地址对外提供电子邮件服务;也可以干脆写成all,代表所有IP地址都能提供电子邮件服务
...
mydestination = $myhostname , $mydomain #定义可接收邮件的主机名或域名列表
useradd liwh #新建用户liwh(做邮件收发测试用)
echo "linuxprobe" | passwd --stdin liwh #为用户liwh设置密码
systemctl restart postfix #重启postfix服务
systemctl enable postfix #把postfix服务加入开机启动项
配置Dovecot服务程序
Dovecot是一款能够为Linux系统提供IMAP和POP3电子邮件服务的开源服务程序,安全性极高,配置简单,执行速度快,而且占用的服务器硬件资源也较少。
dovecot服务的主配置文件:/etc/dovecot/dovecot.conf 。
dovecot服务的子配置文件:/etc/dovecot/conf.d/10-mail.conf。
Dovecot服务程序为了保证电子邮件系统的安全而默认强制用户使用加密方式进行登录。
例3:在例2基础上,配置上Dovercot服务程序。
yum install -y dovecot #安装dovecot服务程序
vim /etc/dovecot/dovecot.conf #编辑dovecot服务的主配置文件
...
protocols = imap pop3 lmtp #使得Dovecot服务程序支持的电子邮件协议修改为imap、pop3和lmtp
disable_plaintext_auth = no #允许用户使用明文进行密码验证
...
login_trusted_networks = 192.168.10.0/24 #设置允许登录的网段地址
...
vim /etc/dovecot/conf.d/10-mail.conf #编辑dovecot服务的子配置文件
...
mail_location = mbox:~/mail:INBOX=/var/mail/%u #指定要将收到的邮件存放到服务器本地的位置
...
su - muzi #切换到muzi用户
mkdir -p mail/.imap/INBOX #建立用于保存邮件的目录,~/mail:INBOX = home/liwh/mail/.imap/INBOX
exit #退出muzi用户
systemctl restart dovecot #重启dovecot服务
systemctl enable dovecot #把dovecot服务加入开机启动项
客户使用电子邮件系统
可以使用Windows操作系统中自带的Outlook软件来进行测试(也可以使用其他电子邮件客户端来测试,比如Foxmail)电子邮件系统是否已经能够正常收发邮件。
发邮件例子:
mail muzi@linuxprobe.com #向muzi@linuxprobe.com发邮件
Subject: muzi #邮件主题为muzi
木子真棒 #邮件正文
. #当输入“.”并按下Enter,代表正文结束并发送邮件。
设置用户别名邮箱
用户别名功能是一项简单实用的邮件账户伪装技术,可以用来设置多个虚拟信箱的账户以接受发送的邮件,从而保证自身的邮件地址不被泄露,还可以用来接收自己的多个信箱中的邮件。
编辑aliases邮件别名服务的配置文件:/etc/aliases。里面定义了大量的用户别名,这些用户别名大多数是Linux系统本地的系统账户,而在冒号(:)间隔符后面的root账户则是实际用来接收这些账户邮件的人。用户别名可以是Linux系统内的本地用户,也可以是完全虚构的用户名字。
newaliases命令:让用户别名配置文件的设置立即生效。
例:使用用户别名技术,使得发送给muzi@linuxprobe.com的邮件,最后被root@linuxprobe.com接收。
im /etc/aliases #编辑aliases邮件别名服务的配置文件
...
muzi: root #追加别名
...
newaliases #让用户别名配置文件的设置立即生效