邮件服务器
作者:互联网
什么是邮件服务器?
电子邮件是一种利用网络传递信息给远程服务器的信息传递行为。我们可以将文件或信息传送到地球上任何一个有网络的地方,我们也可以在任何有网络的地方连上internet去收取邮件。但是其中也存在一些问题:
1、夹带病毒的电子邮件问题
2、黑客通过邮件程序入侵
3、广告信息与垃圾信息等
4、主机被大量不明邮件塞满
我们通常接收到的E-mail都是使用“账号@主机名”的方式来处理的,由于恶意的邮件和垃圾邮件的泛滥等种种原因,导致我们不被允许直接利用主机的ip地址来发送邮件,所以说,邮件服务器一定要有一个合法注册过的主机名。既然用到了主机名,也就是在DNS的查询当中你的主机名需要拥有一个A标志对于一般的服务器来说只要使用正解让客户端可以正确找到我们服务器的IP即可,由于目前收信端的邮件服务器会针对邮件的来源IP进行反解,而如果你的邮件服务器的地址不是固定IP时,该种IP在ISP方面通常会以xxx.dynamic.xxx之类的主机名来管理,偏偏这样的主机名会被主要的大型邮件服务器视为垃圾邮件,所以你的邮件服务器发出的邮件将可能会被丢弃。因此我们最好向ISP申请IP反解。
邮件服务器是如何通过DNS的信息来进行邮件的传递
当我们在发送一封邮件的时候,主机首先会先分析那封信的目标主机的DNS,先取得MX标志(Mail Exchanger),然后以最优先MX主机为准将信发送出去。
假设我们找到的目标主机DNS有如下信息:
haha.com IN MX 10 mail1.haha.com
haha.com IN MX 20 mail2.haha.com
haha.com IN A ip地址
1、当有一封信要传给user@haha.com时,由于MX记录标志最低者优先,所以该封信会先发送到mail1.haha.com这个主机上面。
2、如果mail1.haha.com由于种种原因未能收下这封信,该封信将以第二优先的MX主机来传送,也就是mail2.haha.com。
3、如果所有的MX主机都无法负责的话,那么该封信会以A的标志,直接传送给自己。
邮件的组件和相关协议
MUA:(Mail User Agent,邮件用户代理人)
客户端要发送邮件有两种办法,第一种直接登录上邮件服务器(例如ssh)来主动发出邮件;第二种就是需要通过MUA来帮你把信送给邮件服务器。MUA的主要功能就是收取邮件主机的电子邮件,以及提供用户浏览与编写邮件。接收邮件所使用的客户端软件,例如foxmail,outlook,Thunderbird(雷鸟是linux下的客户端工具)、Mutt(linux下的字符界面客户端工具)。MUA使用SMTP、IMAP或POP3协议与服务器通信。
WebMail:基于Web的电子邮件收发系统,扮演邮件用户代理角色。一般而言,WebMail系统提供邮件收发、用户在线服务和系统服务管理等功能。WebMail的界面直观、友好,不需要借助客户端,免除了用户对E-mail客户软件进行配置时的麻烦,只要能上网就能使用WebMail,方便用户对邮件进行接收和发送。常用的webmail有Openwebmail、Squirrelmail、Extmail,Extman。
MTA:(Mail Transfer Agent,邮件发送代理人)
MUA将用户的邮件发送到邮件主机上,如果这台邮件主机能够帮用户将这封邮件寄出去,那它就是一个MTA。Mail server就是一个MTA,MTA使用的协议是SMTP(Simple Mail Transfer Protocol)。MTA所使用的软件有sendmail,postfix,Exchange。
MTA的功能:
(1)接收邮件:
MTA会将来自客户端或是其它MTA的邮件收下来。这个时候MTA用的是SMTP协议,端口号为25。
(2)转发邮件
如果该封邮件的目的地并不是本身的用户,且该封邮件的相关数据符合使用MTA的权力,那么MTA就会将该封邮件再转发到下一台主机上。这是中继转发(Relay)的功能。
MDA:(Mail Delivery Agent,邮件投递代理人)
实际上MDA是挂在MTA下面的一个小程序,最主要的功能是:分析由MTA所收到的邮件表头或内容等数据,来决定这封邮件的去向。MDA分析之后发现这封邮件的目标是MTA,那么MDA会将这封邮件放到用户的邮箱(Mailbox)中;如果不是,就准备转发出去。MDA还有分析与过滤邮件的功能:
(1)过滤垃圾邮件
(2)自动回复
不过各主要的MTA程序都有自己的MDA功能。
常用的MDA有:ProcMail(postfix默认的邮件投递工具)、MailDrop(相对比较专业的投递代理工具)。
Mailbox
电子信箱,就是某个账号专用的邮件收取文件。linux里面默认的系统邮箱是放在/var/spool/mail/用户账号中的。
通过本地端的MUA将邮件发送到对方的邮件邮箱中去的过程
1、本地端的MUA想要使用MTA来发送邮件时,首先必须得取得MTA的权限。换言之,就是我们需要向MTA注册一个邮箱账号。
2、用户在MUA上编写完邮件后,发送至MTA上,邮件的数据主要有邮件标题和邮件内容,当你按下发送键后,你的这封邮件就会被放置到MTA的队列当中并等待发送。
2.1如果该封邮件的目标是本地端MTA自己的账号,那么MDA会将这封信送到相应用户的Mailbox去。
2.2如果该封邮件的目标是其它目标MTA,则开始中继转发的流程。首先,MTA会先判断该封包是否具有合法性,若具有权限时,则MDA会开始进行邮件转发,也就是该封邮件会通过我们的MTA向下一台MTA(SMTP(port 25))发送出去。如果该封邮件顺利地发出去了,那么就在队列中删除这封邮件。
3、远程的MTA会收到我们的MTA所发出的那封信,并将该邮件放置到正确的邮箱当中,等待用户来读取或者下载。
注意:这封邮件是留在对方的MTA上,而不是MUA上。
用户收信的过程
用户可以通过MRA服务器提供的POP(Post Office Protocol,邮政服务协议)来接收自己的邮件,也可以通过IMAP(Intenet Message Access Protocol,交互式数据消息访问协议)协议将自己的邮件保留在邮件主机上面,并进一步进行建立邮件数据文件夹等高级工作。
使用POP3协议接收邮件:
(1)MUA通过POP3的协议连接到MRA的port110,并且输入账号与密码来取得正确的认证与授权。
(2)MRA确认该用户的账号和密码没有问题后,会前往该用户的Mailbox取得用户的邮件并发送到用户的MUA软件上。
(3)当所有的邮件传送完毕后,用户的Mailbox内的数据将会被删除。
由于使用POP3协议会将已经接收到的邮件删除,因此,出现了IMAP(端口号143),这个协议可以让你将mailbox的数据存储到你主机上的用户主目录内,即客户端收取邮件后邮件依旧保留在服务器上。
常用的MRA:dovecot是一个开源的支持IMAP和POP3协议的邮件服务器(自带SASL功能)。
SMTP、POP3、IMAP这三种通信协议全部都是明文传输,尤其是在POP3和IMAP这两个通信协议中,用户必须要输入账号和密码才能收发邮件。所以就有了POP3s,IMAPs通信协议的出现,他们是通过ssl加密实现的。那么有没有SMTPs呢?有,但是没人用。原因如下:
由于POP3、IMAP只与MRA和自己的用户有关,因此只要设定好用户和服务器使用的MRA协议一致即可,并不会影响到其他的服务器。但是MTA就不同了,因为MTA必须与其他的MTA沟通,因此,若你使用了SMTPs,那么全世界要与你的MTA沟通,就全部需要改变为SMTPs通信协议才行,那么这是目前没有办法实现的。
当然,如果是特殊情况,你也可以将自己的数据加密后,再由MTA转交即可。
Relay与认证机制的重要性
当需要MTA帮你将邮件转发到下一台MTA去时,这个操作就成为邮件中继转发(Relay)。当所有人都可以通过这一台MTA帮忙进行Relay时,这个情况称之为Open Relay的操作。当MTA发生Open Relay且该MTA是连上因特网的,很可能会产生如下问题:
(1)你主机所在网络正常使用的连接速度将会变慢,因为网络带宽都被广告、垃圾邮件耗光了。
(2)你的主机可能由于大量发送邮件导致主机资源被耗尽,容易产生宕机之类的问题。
(3)你的MTA将会被因特网社会定义为“黑名单”,从此很多正常的邮件就会无法收发。
所以,目前所有的distributions几乎都将MTA默认启动为仅监听内部循环接口,而且也将Open Relay的功能取消了。所以你要使用MTA的转发功能时,必须要取得合法使用这个MTA的权限。通常设置Relay的方法有以下几种:
(1)规定某一个特定客户端的IP或网段可使用Relay。
(2)若客户端的IP不固定可以利用认证机制来处理
(3)将MUA搭建在MTA上面,例如OpenWebMail之类的Web接口的MUA功能。
认证机制上面常见的有SMTP邮件认证机制,以及SMTP after POP两种,不论是哪一种机制,基本上都是通过让用户输入认证用的账号与密码,来确定他有合法使用该MTA的权限,然后针对通过认证的用户开启relay的支持就可以了。
邮件服务器的搭建
主要配置文件
默认就提供postfix,它主要的配置文件在/etc/postfix/里面。
设置主配置文件的要求:
“#”符号是注释;
每一行第一个字符不可以是空白符,设置的方法“参数 = 设置值”等号两边要有空格符;
可以使用“$”来引用变量值,例如myorigin = $myhostname;
如果该参数支持两个以上的数据,则使用空格符或逗号来分隔;
可使用多行表示同一个设置值,只要在第一行有逗号,且第二行开头为空格符,即可将数据延伸到第二行继续写;
若重复设置某一项目,则以较晚出现的设置值为准。
/etc/postfix/main.cf 主要的postfix配置文件,几乎所有的设置参数都是在这文件内规范的。修改过该文件,需要重新启动postfix。
/etc/postfix/master.cf 主要规定了postfix每个程序的工作参数,这个文件默认已经好了,通常不需要更改。
/etc/postfix/access(利用postmap处理)可以设置开放Relay或拒绝连接的来源或目标地址等信息的外部配置文件,不过该文件在/etc/postfix/main.cf启动之后才生效,而且设置完毕后需要以postmap来处理成为数据库文件。
/etc/aliases(利用postalias或newaliases均可)作为邮件别名的用途,也可以作为邮件组的设置。
/usr/sbin/postconf 这个命令可以列出你的postfix的详细设置数据,包括系统参数值,数据量比较多。如果你只想要查看修改过的某些默认参数和非默认值的数据,可以使用postconf -n。
/usr/sbin/postfix 这是postfix的主要执行文件,可以使用这个命令来启动或重新读取配置文件。
postfix check 检查postfix相关的文件、权限等是否正确
postfix start/stop/reload
postfix flush 强制将目前正在邮件队列的邮件寄出
/etc/sbin/postalias 设置别名数据库的命令,因为MTA读取数据库格式的文件效率较好,所以要将ASCII格式的文件重建为数据库。在postfix中,这个命令主要用于转换/etc/aliases成为数据库文件。postaliases hash:/etc/aliases(hash为一种数据库格式,然后/etc/aliases就会自动被更新)
/usr/sbin/postcat主要用于检查放在队列当中的邮件内容。由于队列当中的邮件内容是给MTA看的,所以格式并不是我们一般看得懂的文字数据。
/usr/sbin/postmap这个命令用法和postaliases类似,它的作用在转换/etc/postfix/access文件的数据库.
/usr/sbin/postqueue类似mailq的输出结果,例如postqueue -p
实验一 普通用户邮件发送
准备工作:
1.软件安装 :安装MTA
yum install postfix -y #提供发邮件服务
2.安装一个邮箱MUA
yum install mailx -y #这里对mail命令不熟悉可以通过命令手册查看
3.需要dns服务器中配置的邮箱服务器的域名解析: mail.xian. 如下图:
第一步:配置主要配置文件 (/etc/postfix/mian.cf)
[root@localhost postfix]# vim /etc/postfix/main.cf
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain #设置能够收信的主机名,也就是说别人给你发邮件应该写成什么主机名。如果DNS里的设置有MX标志的话,最好将那个主机名写在mydestination内,否则很容易出现错误信息。
mydomain = xian.com
myhostname = mail.xian.com #主机名,需使用FQDN。因为你的mydomain的设置项目默认会取$myhostname第一个小数点之后的名称。
myorigin = $myhostname #发信时所显示的“发信源主机”,也就是代表本MTA传出去的邮件将以此设置值为准。
inet_interfaces = all #设置postfix的监听接口,默认情况下你的postfix只会监听本机接口lo(127.0.0.1),如果开放全部的接口可写为all。
mynetworks = 192.168.58.0/24 #规定信任的客户端。
第二步:创建用户发送邮件
创建用户
[root@rhce postfix]# useradd client1
[root@rhce postfix]# echo "123456" | passwd --stdin mailuser1
[root@rhce postfix]# useradd clientt2
[root@rhce postfix]# echo "123456" | passwd --stdin mailuser2
发送邮件
[root@rhce postfix]# echo "123" | mail -s "HELLO" client1@xian.com
[root@rhce postfix]# echo "123" | mail -s "HELLO" client2@xian.com
开启服务,关闭防火墙
[root@localhost /]# systemctl restart postfix.service
[root@localhost /]# systemctl stop firewall
[root@localhost /]# setenforce 0
第三步:客户端验证
client1用户:
client2用户:
实验二 群发邮件
第一步:编辑群发组设置,并转译成数据库文件
[root@localhost /]# vim /etc/aliases
#root: marc
workgroup: client1,client2 #添加群发用户组
[root@localhost /]#postalias /etc/aliases #转译数据库文件
开启服务,关闭防火墙
[root@localhost /]# systemctl restart postfix.service
[root@localhost /]# systemctl stop firewall
[root@localhost /]# setenforce 0
第二步: 群发邮件
[root@localhost /]# echo "groupfile" | mail -s "group" workgroup
第三步:验证结果
实验三 使用foxmail登录
安装软件:
yum install dovecot -y #提供收收邮件
yum install cyrus-sasl* -y #提供sasl服务
第一步:配置解析文件
配置解析文件:
一.第一个文件: /etc/postfix main.cf
root@localhost /]# vim /etc/postfix/main.cf
在文件末尾加入sasl配置:
smtpd_client_restrictions = permit_sasl_authenticated #对客户端的限制:允许sasl认证
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, #对接收方限制:允许mynetworks,允许sasl认证,拒绝未认证目的地址reject_unauth_destination
smtpd_sasl_auth_enable = yes #启用sasl
smtpd_sasl_local_domain = $mydomain #sasl启用所在的区域:$mydomain -> xian.com
smtpd_sasl_security_options = noanonymous #不允许匿名
inet_interfaces = all #指定监听接口
二.第二个文件:/etc/dovecot/dovecot.conf 发邮件配置文件
[root@localhost /]# vim /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp submission #使用发邮件的协议
login_trusted_networks = 192.168.58.0/24 #设置允许登录的ip段
三.第三个文件:/etc/dovecot/conf.d/10-auth.conf
[root@localhost conf.d]# vim 10-auth.conf
disable_plaintext_auth = NO #是否允许明文传输
四.第四个文件:/etc/dovecot/conf.d/10-mail.conf
[root@localhost conf.d]# vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u #设置我们MRA存储邮件的目录: MRA从MTA同步邮件后存储目录
五.第五个文件:/etc/dovecot/conf.d/10-ssl.conf
[root@localhost conf.d]# vim /etc/dovecot/conf.d/10-ssl.conf
ssl = required 修改为 ssl = no #不使用ssl
六.第六个文件: /etc/sysconfig/saslauthd
[root@localhost conf.d]# vim /etc/sysconfig/saslauthd
MECH=pam 修改为 MECH=shadow #登录读取/etc/shadow
开启服务,关闭防火墙
[root@localhost /]# systemctl restart postfix.service
[root@localhost systemctl restart dovecot
[root@localhost /]# systemctl restart saslauthd.service
[root@localhost /]# systemctl stop firewall
[root@localhost /]# setenforce 0
第二步:修改windows的hosts文件,以便于可以使用mail.
cmd输入host文件目录地址,文本形式打开并且修改。
在文本末尾添加mail的IP域名
第三步:在Linux上创建在foxmail登录后用户存放邮件的用户
[root@localhost /]#cd /home/client1/mail/.imap
[root@localhost /]#mkdir INBOX
[root@localhost /]#cd /home/client2/mail/.imap
[root@localhost /]# mkdir INBOX
第四步:windows打开foxmail软件,登录新建用户
打开软件点击其他邮箱
输入用户密码,这里的IMAP和SMTP两个服务器地址相同,点击创建。
点击完成及登录用户邮箱
client1用户登录成功
相同操作得到client2用户
标签:postfix,etc,localhost,服务器,MTA,root,邮件 来源: https://blog.csdn.net/weixin_54217950/article/details/122372058