电子邮件服务

电子邮件服务基于客户/服务器模式,对于一个完整的电子邮件系统而言,它由三部分构件组成

1.用户代理 (User Agent) 用户与电子邮件系统的接口,负责发送邮件到邮件服务器,和从邮件服务器上接受邮件

MUA(Mail User Agent)邮件用户代理 ,用于收发mail的程序,前主流的是Outlook,Foxmail Evolution Thunderbird

2.邮件服务器 邮件服务器是电子邮件系统的核心构件

MTA(Mail Transfer Agent)邮件传送代理,将MUA的信件转发给指定的用户,最主流的MTA 有Sendmail,Postmail Qmail,等

MDA(Mail Delivery Agent)邮件投递代理,用来投递邮件 主流MDA有 Pocmail, Maildrop等

MRA(Mail Retrieval Agent)邮件访问代理 常用的MRA 有imap cryus-imap ,dovecot等

SASL 简单认证安全层,提供一种做认证的功能

clip_image002

3.电子邮件使用的协议

SMTP 简单邮件传输协议

是一组用于由源地址到目的地址传送邮件的规则,由它来控制邮件的中转方式,属于TCP/IP协议,帮助每台计算机在发送或中转邮件时找到下一个目的地

POP3 邮件接收协议

它规定怎样将个人计算机连接到Internet 的邮件服务器和下载电子邮件的协议,是Internet电子邮件的第一个离线协议标准,pop3允许从服务器上把电子邮件存储到本地主机,同时删除保存在邮件服务器上的邮件。

了解邮件服务的工作原理后,我们来介绍邮件服务器的配置

sendmail 服务器

sendmail 的安装包有三个 sendmail , sendmail -cf (转换各个配置文件到所需要的格式),sendmail –doc

默认监听端口为 25 ,主程序:/usr/sbin/sendmail , 进程名为 sendmail, 服务脚本:/etc/init.d/sendmail ,配置目录:/etc/mail 主配置文件是: /etc/mail/sendmail.mc 定义别名:/etc/aliases 定义访问控制:/etc/mail/access 定义自己管理的域:/etc/mail/local-host-names/

smtp:25 ,smtps:465,pop3:110 ,pops:995,imap:143,imaps:993

clip_image004

 

查看主配置目录会发现,在目录下有许多与配置文件相同的后缀名为.db的文件,这是因为sendmail读取的是二进制文件,我们只需要安装sendmail –cf 包,在配置好服务后,重启sendmail服务,它就会将配置好的服务自动生成到.db文件中。与sendmail.mc 相对应的二进制文件是sendmail.cf

(做sendmail实验需要dns正反向解析的支持,请先配好dns,mx记录,mail A记录,主机名与域名)

下面先开启一个sendmail 服务器

安装sendmail的三个包后,就可以编辑配置文件了

1。vim +116 /etc/mail/sendmail 指定协议,监听端口

clip_image006

2. vim /etc/mail/access 允许给0网段做转发

clip_image008

3. vim /etc/mail/local-host-name 添入自己负责域

clip_image010

现在一个基本的sendmail服务已经配置好 开启服务,建立两个用户发送邮件,测试一下吧

发送邮件

clip_image012

接收邮件

clip_image014

 

一。现在深入定义别名,在/etc/aliases 下格式

body1: body2

body1 这个用户名可能就是不存在的,但是凡是发给body1的都会转到body2的邮箱里

为redhat定义别名wendy,将发送给redhat的邮件都转发给windy,将发送给anyone这个用户(虚拟组)的邮件转发给wendy,redhat,root,

1 vim /etc/aliases

clip_image016

 

分别给redhat anyone 发送邮件,测试会发现redhat没有收到邮件,wendy都到两份,那是发给redhat的都被转发给wendy

虚拟用户别名 /etc/mail/virtusertable 顾名思义前面的域或用户都是虚拟的,与 aliase相似,对域的定义能力更强

@123.com root #发送给这个域的都发送给root

admin@xxyz.com jdj #将发送admin的信件都发送给jdj

pagem@he.net lmiwtc@pg.com

@cba.com cba@acl.com #将发送到cba.com域的所有邮件都转发到cba@acl.com

@doml.org %1@dom2.org #发送到第一个域每个用户的文件都转发都后面域的同一个用户

 

二。sendmail的访问控制

1.开启sendmail.mc 的一项 (sendmail默认为开启)

FEATURE(`blacklist_recipients')dnl

2.在/etc/mail/access 编辑控制策略

Connect:204.168.23 REJECT 明确拒绝

Connect:abc.net DISCARD 悄悄丢弃

Connet:10.3 OK 即使有协议拒绝,它也OK

To:nobody@ ERROR:550 error informations 错误给予错误信息

From:domain.com RELAY 给予转发

To:user@dom9.com SKIP 跳过

看看例子

clip_image018

不允许wendy@st.com 发邮件明确拒绝

clip_image020

clip_image022

三. 做地址伪装, 修改发送前的地址域名

1 编辑 /etc/mail/sendmail.mc 开启下列各项

MASQUERADE_AS(`mydomain.com')dnl 是否对信息作伪装

修改 MASQUERADE_AS(`text.com')dnl 伪装成text.com域名

FEATURE(masquerade_envelope)dnl 是否对整个域(包括子域)做伪装

FEATURE(masquerade_entire_domain)dnl

MASQUERADE_DOMAIN(localhost)dnl 对localhost域做伪装

MASQUERADE_DOMAIN(localhost.localdomain)dnl

将locahost.com域伪装成text.com

四 。为sendmail做认证

用户发信必须提供账号和密码,不能冒名发信

1 主配置文档 /etc/mail/sendmail.mc

开启下列两项

clip_image024

2强行要求用户必须通过认证发信

clip_image026

3 开启sasl服务

clip_image028

可以先测试一下看sendmail是否支持认证

执行命令确保出现标记文字

clip_image030

clip_image032

现在尝试发送邮件已经不在被yunxu

现在为natasha用户的用户名和密码做base64码

clip_image034

clip_image036

#拷贝Cg==前的字母

clip_image038