Red|服务器搭建实战详解--电子邮件服务器之一--基础原理

电子邮件服务简介 邮件用户代理程序

MUA(Mailer User Agent, 邮件用户代理程序),主要用于帮助用户发送和收取电子邮件。如outlook、foxmail等都属于MUA。

邮件传送代理程序
MTA(Mail Transfer Agent,邮件传送代理程序) 即通常说的邮件服务器,用来监控以及传送电子邮件;

电子邮件协议 SMTP smtp(simple mail transfer protocol),即简单mail传输协议,为用户提供高效、可靠的邮件传输,监听25号端口,是一个请求/响应 协议,用于接收用户的mail请求,并与远程mail服务器建立起smtp连接。smtp有一个重要特点,即能够接力传送邮件,让邮件通过不同网络上的主机接力式地传送。工作分两种情况 :一是电子邮件从客户机传送到服务器;二是电子邮件从一个服务器传送到另一个服务器。
POP3
pop3 (post office protocol )邮局协议,使用端口号110,用于电子邮件的接收,目前常用的是POP3。 pop3采用客户端/服务器工作模式;首先,客户端软件与pop3服务器建立TCP连接,然后pop3协议会确认客户机提供的用户名与密码,确认成功后便转入处理状态,这时用户可接收或者删除自己的邮件,之后退出系统转入更析状态,从服务器端删除用户标记为“删除”的邮件 。 #### IMAP4 IMAP (internet message access protocol),通过internet获取信息的一种协议,也可像pop提供方便的下载邮件服务,实现离线阅读功能。IMAP还提供了一种摘要浏览功能,让用户可以在阅读完邮件的主题、发件从、大小和到时时间等信息后再决定是否下载。 IMAP本身是一种邮箱访问协议,可用来管理在客户端服务器上的邮箱;POP3通过将邮件下载到本地以供用户查看,而IMAP的邮件却是保留在服务器上的。IMAP这一特点和webmail相似的,但是比webmail相比,更高效、安全及可以离线阅读等优点。

Web mail 在电子邮件协议中,web mail是最热门的。但实质上,web mail并不是一种协议,而是一种web 支持插件。专门针对安装在服务器上的邮件程序,实现了直接通过浏览器查收、阅读和发送邮件。
邮件名词术语 MUA
MUA(Mail User Agent 邮件用户代理人)主要用于将用户的邮件发送到邮件主机上或者将用户的邮件从邮件主机上接收下来。像foxmail、outlook等都是MUA
MTA
MUA用于将用户的邮件发送到邮件主机上,如果邮件主机能将这封信邮寄出去,那它就是一台MTA(Mail transfer agent 邮件传输代理)。MTA一般是指邮件服务器,其代表有sendmail,postfix、qmail以及windows下的exchange等。
严格来讲,MTA只是具备SMTP协议的主机,但实际上现在的MTA基本上都包括了邮件发送、接收、转递等方面功能 。
  1. 接收邮件
    MTA使用SMTP协议,接收来自客户端的邮件,端口号25.
  2. 转发邮件
    若邮件用户不在本地,MTA将这封邮件转发出去,直到最终地点。即为MTA的转发功能 。
  3. 响应用户守住要求
    MTA使用POP3或者IMAP协议,让客户端通过MUA将邮件接收下来。
MDA
MDA (mail delivery agent 邮件转发代理)分析MTA处理的邮件中的表头或者其他数据,以决定邮件的去向。
SMTP/POP3 SMTP
Smtp(simple mail transfer protocol 简单文件传输协议)用于发送方的邮件服务器发送邮件到接收方的邮件服务器,是internet电子邮件应用的核心。sendmail程序为linux提供了支持smtp连接所需的服务。
POP3
POP3(post office protocol 3)是TCP/IP协议簇中的一员,规定了如何将个人计算机连接到internet的邮件服务器,以及如何下载电子 邮件的电子协议,端口号110. 其有3个工作阶段: 特许阶段,用户代理以明文形式发送用户名和口令以鉴别用户;在事务处理阶段,用户代理取回报文并可以对邮件进行操作,如增加或取消报文删除标记。更新阶段,即客户机发出了quit命令后,结束该pop3会话并删除那些被标记删除的报文。
POSTFIX邮件服务器 安装postfix邮件服务器
  1. 关闭sendmail服务
    sendmail 和postfix都是邮件服务系统,两者同时启动会造成系统冲突。故在安装postfix之前,最好关闭系统默认安装运行的sendmail。
    查询系统是否已经安装启动了sendmail
    [root@localhost ~]# netstat -nutlp | grep :25
    关闭sendmail 服务
    service sendmail stop
    chkconfig sendmail off
  2. 安装postfix服务
    查询是否安装了postfix服务
    [root@localhost ~]# rpm -qa | grep postfix
    安装服务
    [root@localhost ~]# rpm -ivh postfix-2.10.1-6.el7.x86_64
POSTFIX配置文件 postfix安装完成之后,还需要进行一些特定的设置,才能实现为特定的域收发邮件功能。postfix的配置文件位于/etc/postfix目录,主要包括main.conf、master.cf、access及aliases几个部分。
  1. /etc/postfix/main.cf
    为主配置文件,几乎所有的postfix参数都可以在这里设置。文件中以#开头的是行为说明文档,可以根据这些详细说明轻松完成postfix的配置操作。
  2. /etc/postfix/master.cf
    主要用来规定postfix运行时的参数,默认情况下,该文件已经配置完成,不需要进行修改。
  3. /etc/postfix/access
    post 的存取控制文件,功能与sendmail的配置文件/etc/sendmail/access相同,主要用来设置开放传递,拒绝连机的来源或者IP地址等信息。/etc/sendmail/access文件要先在main.cf中启用,并使用postmap将其处理为数据库,才能生效。
  4. /etc/aliases
    定义postfix别名的数据库,用法与sendmail完全一样。
postfix基本配置 sendmail默认只监听本地127.0.0.1端口的邮件收发,postfix也是如此,要使其成为邮件服务器,必须使期能够监听其他客户端的连接请求才能实现。
1 语法规则
在postfix主配置文件main.cf中,用来控制postfix运行行为的参数通常都是以类似变量的形式存在的。比如 使用如下语句设置postfix主机名称
myhosthame = maillinux.localdomain.tst
另postfix变量设置的等号两边需要分别插入空格字符,若某变量有两个以上的设置值,必须用逗号或者空格符隔开。
2 打开postfix的网络发送邮件支持
默认,“intet_interfaces”参数值为“localhost”,也即postfix只监听本机的发信需求,只能在本地邮件主机寄信。若打开网络发送邮件支持,一般开放所有的网络接口,即设置“inet_interfaces”的值为“all”,在“inet_interfaces=localhost”前插入“#”把“inet_interfaces=all”前的“#”去掉,
inet_interfaces = all
#inet_interfaces = localhost
若服务器有多个网络接口,但又不希望开放全部的接口,可使用主机名指定需要开放的接口。
3 设置运行postfix服务的邮件主机名和域名
myhostname参数指定运行postfix服务的邮件主机名称。“mydomain”参数指定了该主机的域名称。若不需要在一台计算机上运行多个主机,这两个参数一般不需要修改。默认下,“myhostname”的值会被postfix自动删除第一部分,并将其余部分作为“mydoamin”的值 。
myhostname = host.domain.tld
mydomain = domain.tld
4 设置本机寄出的邮件所使用的域名或主机名称
当前邮件主机寄出所有邮件的邮件头“mail from”的地址是由“myorigin”参数设置的。
myorigin = $myhostname
5 设置可转发邮件网络
默认配置,postfix只允许转发本地网络的邮件,但可使用mynetworks或者mynetworks-style参数授权其他的网络。
  1. mynetworks
    参数值可以是信任的IP地址、IP子网或多个IP子网(之间用逗号或空格隔开)。例:mynetworks = 192.168.1.0/24 表示邮件主机只转发子网192.168.1.0/24中客户端发来的邮件,拒绝其他子网转发请求。
  2. mynetworks-style
    也是用于控制网络邮件转发参数,可选项包含以下三种,主要用来设置可转发邮件网络的方式。
    class: postfix根据邮件主机的IP地址判断其网络类型(A类、B类、C 类),并开放相应网段。譬如:邮件server地址192.168.1.6,为C类,则会自动开放192.168.1.0/24整个C类网络的转发授权。
    subnet: postfix会根据邮件服务器网络接口上所设置的IP地址、子网掩码来决定开放的IP段,也是postfix默认。譬如:服务IP为192.168.1.6,掩码 255.255.255.128,则postfix会开放192.168.1.0/25子网。
    host: postfix只开放本机的转发权限。
    PS: 通常,不需要管mynetworks-style参数的内容,直接配置mynetworks参数即可。两个同时设置,以mynetworks的值为准。
    6 设置允许接收的邮件
    发到服务器上的邮件,postfix并不是都接收的。mydestination参数决定了哪些邮件接收,只有匹配该参数值,该邮件才会puhcpostfix接收下来。
    mydestination= m y d o m a i n , mydomain, mydomain,myhostname
    7 设置可转发邮件的网域
    在postfix中还可以为域名授权,使用relay_domains参数。
    若将该参数设置为localdomain.tst,则表示信任所有由localdomain.tst域发来的邮件并自动进行转发。
    完成以上几点基本设置后,重新启动postfix服务,但该服务器目前仅支持客户端发信,暂时还不支持收信。
    8 DNS设置
    另外,还必须进行DNS设置,以使POSTFIX能在局域网中更好的转发邮件。
    在内部网络的DNS服务器上定义一个主区域localdomain.tst。并在该区域配置文件中定义以下记录(除定义了SOA、NS记录)。
    若需查看postfix的主配置文件是否正确,可以使用postconf指令来查看详细数据。也可执行postconf -n指令,只显示与内置默认参数不同的那些参数.
虚拟别名域 利用虚拟别名域能够实现群组邮递的功能,将发送给虚拟域的邮件实际投到真实域的用户邮箱中。指定一个虚拟邮件地址,当用户给这个邮件地址发送邮件时,邮件服务器会自动将邮件转发到真实域中的一组用户的邮箱里。虚拟域可能是不存在的域,真实域可能是本地域(main.cf文档中的mydestination参数指定的域)、远程域或者是internet域。实际上,虚拟域是真实域的一个别名,通过一个虚拟别名表,实现了虚拟域的邮件地址到真实域的邮件地址的重定向。
第1步 修改主配置文件/etc/postfix/main.cf
virtual_alias_domains = csoftz.cn,localdomain.tst
virtual_alias_maps = hash:/etc/postfix/virtual_
第2步 编辑配置文件/etc/postfix/virtual_domains,定义如下语句
@csoftz.cn @localdomain.tst //表示投递到csoftz.cn域的邮件会被发送到localdomain.tst
sales@localdomain.tst toplinux // 发送到sales@localdomain.tst的邮件,会转送到本地用户toplinux。
第3步 以上完成之后,需执行以下命令,方可生效。
postmap /etc/postfix/virtual_domains
postfix reload
用户别名 用户别名是通过别名表在系统范围内实现别名邮件地址到真实用户邮件地址的重定向。使用用户别名最重要的功能是实现群组邮递,通过用户别名可以将发送给某个别名邮件地址的邮件转发到多个真实的用户邮箱中。
第1步 修改配置文件,确认包含下列语句
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
第2步 编辑文件/etc/postfix/virtual_aliases,定义语句
team1: user1,user2,user3,user4 //说明发送给team1的邮件,都会自动发给用户user1、user2、user3及user4
team2: :include: /etc/mail/team2user // 发送给team2的邮件,都会自动转发给/etc/mail/team2user文件中指定的用户
toplinux: lu //tplinux是Lu的别名
newuser: lu, test@localdomain.test //newuser是lu和test@localdomain.tst的别名。
另:team2user文件内容及格式如下:
user21,
user22,
user23,
user24
斜杠只是实现分行,格式也可以如下
user21,user22,user23,user24
第3步,修改配置之后,执行命令,使配置生效
postalias /etc/postfix/virtual_aliases
posffix reload
smtp认证 【Red|服务器搭建实战详解--电子邮件服务器之一--基础原理】通过SMTP认证,只允许通过认证的用户发送邮件。cryus SASL(赛勒斯简单认证和安全层)是为应用程序提供认证的函数库,而应用程序通过函数库所提供的功能定义认证方式,让SASL通过与邮件服务器主机的沟通来实现认证功能。
  1. 安装 cyrusSASL认证包
    系统默认下已经安装了认证包,若没安装,在安装光盘里找到与cyrusSASL相关的RPM包文件,再使用rpm -ivh命令安装
    [root@localhost ~]# rpm -qa | grep sasl
    cyrus-sasl-lib-2.1.26-17.el7.x86_64
  2. cryusSASL V2的密码验证机制
    默认下,cyrusSASL v2版使用守护进程saslauthd进行密码认证。
  3. 测试cyrusSASL V2的认证功能
启动停止服务

    推荐阅读