下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

E-mail服务器的架设与配置解析

作者:课课家教育     来源: http://www.kokojia.com点击数:3898发布时间: 2017-03-31 11:08:55

标签: Email系统配置

  电子邮件(electronic mail,简称E-mail,标志:@,也被大家昵称为“伊妹儿”)又称电子信箱、电子邮政,它是—种用电子手段提供信息交换的通信方式。是Internet应用最广的服务:通过网络的电子邮件系统,用户可以用非常低廉的价格(不管发送到哪里,都只需负担电话费和网费即可),以非常快速的方式(几秒钟之内可以发送到世界上任何你指定的目的地),与世界上任何一个角落的网络用户联系,这些电子邮件可以是文字、图像、声音等各种方式。同时,用户可以得到大量免费的新闻、专题邮件,并实现轻松的信息搜索。希望大家仔细阅读本篇文章哦~

Postfix收邮件过程

  Postfix通过smtpd/qmqpd,Postfix(由Postfix生成的邮件)收取邮件,并将邮件传递给cleanup处理。cleanup进程对收到的邮件做一些处理,必要时调用trivial-rewrite格式化不合格发件人地址后。将邮件存放到incoming队列中。

  通过sendmail调用接受的邮件先将邮件发送给postdrop,postdrop将邮件放置到maildrop队列中。在Postfix服务没启动的情况下,maildrop队列作为缓存存放待发送的邮件。一旦Postfix服务启动,有master创建的pickup进程就会检测maildrop队列中是否有邮件。此时maildrop中暂存的邮件就被pickup传递给cleanup处理了。

  下图为Postfix收取邮件流程简图(紫框 代表进程,蓝框 代表队列):

E-mail服务器的架设与配置解析_Email_系统_配置_课课家教育

  分享:e-mail历史

 

  起源对于世界上第一封电子邮件(e-mail),根据资料,有两种说法:

  第一种说法1969年10月世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短消息。据《互联网周刊》报道世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短消息(时间应该是1969年10月),这条消息只有两个字母:“LO”。Leonard K.教授因此被称为电子邮件之父。Leonard K.教授解释,“当年我试图通过一台位于加利福尼亚大学的计算机和另一台位于旧金山附近斯坦福研究中心的计算机联系。我们所做的事情就是从一台计算机登录到另一台

起源对于世界上第一封电子邮件(e-mail),根据资料,有两种说法:

  电子邮件机。当时登录的办法就是键入L-O-G。于是我方键入L,然后问对方:‘收到L了吗?’对方回答:‘收到了。’然后依次键入O和G。还未收到对方收到G的确认回答,系统就瘫痪了。所以第一条网上信息就是‘LO’,意思是‘你好!’”第二种说法1971年,美国国防部资助的阿帕网正在如火如荼的进行当中,一个非常尖锐的问题出现了:参加此项目的科学家们在不同的地方做着不同的工作,但是却不能很好地分享各自的研究成果。原因很简单,因为大家使用的是不同的计算机,每个人的工作对别人来说都是没有用的。他们迫切需要一种能够借助于网络在不同的计算机之间传送数据的方法。为阿帕网工作的麻省理工学院博士Ray Tomlinson把一个可以在不同的电脑网络之间进行拷贝的软件和一个仅用于单机的通信软件进行了功能合并,命名为SNDMSG(即Send Message)。为了测试,他使用这个软件在阿帕网上发送了第一封电子邮件,收件人是另外一台电脑上的自己。尽管这封邮件的内容连Tomlinson本人也记不起来了,但那一刻仍然具备了十足的历史意义:电子邮件诞生了。Tomlinson选择"@"符号作为用户名与地址的间隔,因为这个符号比较生僻,不会出现在任何一个人的名字当中,而且这个符号的读音也有着"在"的含义。阿帕网的科学家们以极大的热情欢迎了这个石破天惊般的创新。他们天才的想法及研究成果,现在可以用最快的--快得难以觉察--速度来与同事共享了。许多人回想起来,都觉得阿帕网所获得的巨大成功当中,电子邮件功不可没。(这个说法也是较为广传的。)

  发展历程虽然电子邮件是在70年代发明的,它却是在80年才得以兴起。70年代的沉寂主要是由于当时使用Arpanet网络的人太少,网络的速度也仅为56Kbps标准速度的二十分之一。受网络速度的限制,那时的用户只能发送些简短的信息,根本别想象那样发送大量照片;到80年代中期,个人电脑兴起,电子邮件开始在电脑迷以及大学生中广泛传播开来;到90年代中期,互联网浏览器诞生,全球网民人数激增,电子邮件被广为使用。

  Eudora简史使电子邮件成为主流的第一个程序是Euroda,是由史蒂夫·道纳尔在1988年编写的。由于Euroda是第一个有图形界面的电子邮件管理程序,它很快就成为各公司和大学校园内的主要使用的电子邮件程序。然而Euroda的地位并没维持太长时间。随着互联网的兴起,Netscape和微软相续推出了它们的浏览器和相关程序。微软和它开发的Outlook使Euroda逐渐走向衰落。在过去5年中,关于电子邮件发生的最大变化是基于互联网的电子邮件的兴起。人们可以通过任何联网的计算机在邮件网站上维护他们的邮件帐号,而不是只能在他们家中或公司的联网电脑上使用邮件。这种邮件是由Hotmail推广的。如今Hotmail已经成为一大热门网站,微软在8月宣布,邮件服务的用户已经达到了1.1亿。但微软在1998年收购此网站的时候却仅用了4亿美元,这个价格后来令Hotmail的创建者沙比尔·布哈蒂尔后悔不迭。Hotmail的成功使一大批竞争者得到了启发,很快电子邮件成为门户网站的必有服务,如雅虎,netscape,Exicite和Lycos等,都有自己的电子邮件服务。

 

  Postfix投递邮件过程

  qmgr进程从incoming队列中读取邮件,将邮件传递到active队列。为了防止active队列因为邮件数量过多造成内存溢出,设置用来暂存未处理邮件的deferred队列。qmgr每次从active队列取一封邮件多一些处理,必要时调用trivial-rewrite格式化不合格的收件人地址后,根据收件人域的不同将邮件投递给smtp,lmtp,local,virtual,pipe进程按照如下方法处理:

  smtp处理外部域的邮件,即外发邮件。

  lmtp常见于分布式电子邮件系统。用于处理去往代理目的端的邮件,即转发邮件。

  local处理基于Linux/Unix账户和包含邮件别名的邮件以及其他邮件,即到往本地账户,和用户名在/etc/aliases文件中的邮件。local可将邮件投递给第三方MDA,所以其他邮件由第三方MDA处理。

  virtual可简单处理基于virtual domains和virtual mailbox的邮件。

  pipe管道将邮件传递给第三方MDA处理。

  Postfix投递邮件流程简图如下:

通过sendmail调用接受的邮件先将邮件发送给postdrop,postdrop将邮件放置到maildrop队列中。在Postfix服务没启动的情况下,maildrop队列作为缓存存放待发送的邮件。一旦Postfix服务启动,有master创建的pickup进程就会检测maildrop队列中是否有邮件。此时maildrop中暂存的邮件就被pickup传递给cleanup处理了。

  基础配置:

  软件安装,需要安装E-mail Server 软件包组,在安装之前可以查看这个软件包组包含那些软件。

  [root@mail2 ~]# yum groupinfo 'E-mail Server'

  Loaded plugins: fastestmirror, presto, security

  Setting up Group Process

  Group: E-mail server

  Description: Allows the system to act as a SMTP and/or IMAP e-mail server. //组描述

  Default Packages: //默认安装的软件包

  dovecot //用来实现POP3/IMAP4服务

  postfix //用来实现SMTP服务

  spamassassin //用来检测垃圾邮件

  Optional Packages: //可选安装的软件

  clamav //反病毒

  clamav-data

  clamav-milter

  cyrus-imapd //另外一个POP3/IMAP4实现

  dovecot-MySQL //Dovecot的mysql扩展

  dovecot-pgsql

  dovecot-pigeonhole

  mailman //提供邮件列表功能

  opendkim

  sendmail

  sendmail-cf

  spambayes

  sqlgrey

  uw-imap

  安装软件包

  yum groupinstall “E-mail Server”

  切换MTA

  将系统默认的MTA从Sendmail切换到Postfix。

  [root@mail2 ~]# alternatives --config mta

  There are 2 programs which provide 'mta'.

  //*号表示默认值,+号表示生效

  Selection command

  -----------------------------------------------

  * +1 /usr/sbin/sendmail.sendmail

  + 2 /usr/sbin/sendmail.postfix

  Enter to keep the current selection[+], or type selection number: 2

  [root@mail2 ~]# chkconfig sendmail off

  [root@mail2 ~]# chkconfig postfix on

  [root@mail2 ~]# service sendmail stop

  Shutting down sm-client: [ OK ]

  Shutting down sendmail: [ OK ]

  [root@mail2 ~]# service postfix start

  Starting postfix: [ OK ]

  设置Linux防火墙设置:

  需要允许TCP 协议25 110 143 463 993 995 端口的入连接。编辑/etc/sysconfig/iptables 文件,根据实际情况,添加如下两行中的一行到包含“–dport 22 -j accept ”行的后面:

  -A INPUT -m state --state NEW -m multiport -p tcp --dport 25,110,143,465,993,995 -j ACCEPT

  #CentOS风格

  -A RH-Firewall-1-INPUT -m state --state NEW -m multiport -p tcp --dport 25,110,143,465,995,993 -j ACCEPT

  #Redhat风格

  service iptables restart

  Linux SElinux设置:

  建议设置SElinux为Permissive 模式。但是不要在disabled。笔者还没有找到简单的解决Postfix和SElinux冲突方法。很有可能要手动编写SElinux模块。没时间和精力再捯饬SElinux了。设置为Permissive模式,留着以后解决。这点和政府对待钓鱼岛问题采取的策略一样,呵呵!

  [root@mail2 ~]# getenforce

  Enforcing

  [root@mail2 ~]# setenforce 0

  [root@mail2 ~]# getenforce

  Permissive

  编辑文件/etc/selinux/config做如下修改,使配置重启后仍旧生效。

  # This file controls the state of SELinux on the system.

  # SELINUX= can take one of these three values:

  # enforcing - SELinux security policy is enforced.

  # permissive - SELinux prints warnings instead of enforcing.

  # disabled - No SELinux policy is loaded.

  SELINUX=permissive //修改部分

  # SELINUXTYPE= can take one of these two values:

  # targeted - Targeted processes are protected,

  # mls - Multi Level Security protection.

  SELINUXTYPE=targeted

  Postfix配置文件:

  postfix主要有master.cf main.cf两个配置文件。main.cf文件开启或关闭Postfix功能,指明Postfix要操作的文件的路径,及其他信息。master.cf设定由master创建的子进程所使用的参数,创建的数量,子进程类型等。Postfix主进程为master;master根据master.cf配置创建子进程来完成邮件的收发。

  Postfix使用syslogd记录日志。其日志内容输出到/var/log/maillog

  main.cf必备配置

  myhostname = mail2.xiyang-liu.com

  #我的主机名

  mydomain = mail2.xiyang-liu.com

  #我的域

  myorigin = $mydomain

  #我发送出去的邮件用户名以什么结尾

  inet_interfaces = $myhostname

  #监听哪个ip地址,必要时修改/etc/hosts

  inet_protocols = all

  #只支持IPv4协议,还是IPv4 IPv6都支持

  mydestination = $myhostname,localhost

  #我收取用户名以什么结尾的邮件

  mynetworks_style = host

  #我信任的网络类型

  home_mailbox = Maildir/

  #“邮筒”类型。Unix style ,Q-mail style

  smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

  #smtpd 旗标

  验证配置:

  首先,验证DNS配置是否生效。启动Postfix服务后,向163发送邮件。然后直接回复看能否收到。

  修改inet_interfaces 参数的值,使其分别取all, localhost,$myhostname。使用netstat -tnlp查看25端口分别在哪个地址监听?

  在inet_interfaces取值$myhostname的时候,很有可能会遇到Postfix服务起不来的情况,只需要在/etc/hosts文件中添加mail2.xiyang-liu.com 到 10.1.100.107的映射即可解决问题。添加到公网地址的映射行不行?你知道为什么吗?

  阅读配置文件确定mynetworks_style和mynetworks的关系,实际应用中改用哪个参数?

  mynetwork取值127.0.0.0/8时,分别在服务器本地(mail2.xiyang-liu.com)和你的电脑(随便一个客户端)通过telnet登录到mail2.xiyang-liu.com的25端口按照上面讲的方法发送一封邮件,看结果有何不同?你认为为什么?

  修改smtpd_banner内容,telnet 25端口查看有什么变化?你知道该如何伪装自己SMTP程序吗?你看,一不小心也涉及到安全范畴了不是。

  查看/var/log/maillog日志记录,看cleanup,qmgr等进程是怎么处理邮件的?对照上面的收信和投递流程理解。

  文档讲解了Postfix基础配置的详细方法。包含切换MTA,main.cf文件讲解,pickup、clean、qmgr等进程协作方法,main.cf配置文件各配置语句的意义,和验证Postfix配置文件个语句的作用等知识点。当然也包括linux防火墙和selinux的相关配置。希望通过这些配置帮助读者加深对Postfix的理解。

     小结:相信大家阅读完毕本篇文章后,收获不小吧?当然如果大家还想了解更多相关方面的详细内容,请登录课课家教育平台资讯~

赞(20)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程