sendmail

clip_image002

电子邮件的发送及接收流程:

一、同一区域发送接收邮件

例:user1@163.com 向 user2@163.com 发送邮件

1. user1@163.com 用户使用自己的MUA(邮件用户代理,也就是邮件客户端软件)编辑信件,编辑后使用简单邮件传输协议(smtp)将信件发送给自己客户端中定义的发送邮件服务器地址,DNS 服务器通过解析MX记录,将邮件发送服务器的ip 地址返回给客户端用户user1@163.com,客户端子再根据ip地址加上端口号25 将邮件发送给服务器mail.163.com的MTA

2.服务器mail.163.com 接收到邮件后,交给MDA(邮件分拣代理),邮件的目的地为user2@163.com,属于163.com区域,属于本地信件。

3.服务器mail.163.com 查看本地是否有user2账户,如果有该账户,则将该信件投递到该账户的邮箱。如果没有该账户,信件原路退回

4.user2@163.com 通过pop3 或imap协议连接上邮件服务器,将信件取回。

一、不同区域发送接收邮件

例:user1@163.com 用户向user3@sina.com 用户发送邮件

1. user1@163.com 用户使用自己的MUA(邮件用户代理,也就是邮件客户端软件)编辑信件,编辑后使用简单邮件传输协议(smtp)将信件发送给自己客户端中定义的发送邮件服务器地址,DNS 服务器通过解析MX记录,将邮件发送服务器的ip 地址返回给客户端用户user1@163.com,客户端子再根据ip地址加上端口号25 将邮件发送给服务器mail.163.com的MTA

2. 服务器mail.163.com 接收到邮件后,交给MDA(邮件分拣代理),邮件的目的地为user3@sina.com,属于sina.com区域,而自己属于163.com,这时该邮件服务器使用smtp协议将该邮件转发到sina.com区域的邮件服务器

3.mail.sina.com 服务器使用MDA分拣代理查看邮件域名,发现是属于该区域的邮件,系统查看是否有该帐号,如果有就将该邮件放到该用户的邮箱,如果没有该用户,则将邮件原路退回。

4. user3@sina.com用户 通过pop3 或imap协议连接上邮件服务器,将信件取回。

端口:

smtp 25 pop3:110 imap:143

smtps:465 pop3s:995 imaps:993

https:443 squid:3128

相关术语:

1.MTA:邮件传输代理。用来监控以及传授电子邮件。(mail transfer agent)

2.MUA:邮件用户代理,帮助用户发送接收邮件 (mail user agent)

3.MAA :邮件访问代理。(mail access agent)

4.MDA:邮件分拣服务。(Mail delivery agent)

5.smtp:简单邮件传输协议,为用户通过可靠地邮件传输,25号端口

6. pop3协议:邮局协议。用于邮件接收,tcp 110 端口。

7. imap4协议:通过互联网获取信息的协议,提供摘要浏览功能;143端口

电子邮件的发送流程

发送方通过邮件客户程序,将编辑好的电子邮件通过SMTP发送给服务器。服务器识别接收者的地址,若是本地的账户保存下来,消息存放在接收者的电子信箱内,并告知接收者有新邮件到来。接收 者通过POP3接受邮件。若不是本地的邮件,则将邮件转发到对应的电子邮件服务器,服务器将消息存放在接收者的电子信箱内,并告知接收者有新邮件到来。接收 者通过POP3接受邮件。

1.新建挂载点,挂载光盘

[root@mail ~]# mkdir /mnt/cdrom

[root@mail ~]# mount /dev/cdrom /mnt/cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only

2.配置yum工具

[root@mail ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo

[rhel-server] ##仓库名

name=Red Hat Enterprise Linux server ##仓库描述

baseurl=file:///mnt/cdrom/Server ##仓库位置

enabled=1 ##开启仓库

gpgcheck=1 ##进行gpg私钥检测

gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release ## gpg私钥位置

3.查看邮件日志记录位置:“-”表示异步存储方式

[root@mail ~]# vim /etc/syslog.conf

mail.* -/var/log/maillog

4. 在邮件服务器内telnet 127.0.0.1 25 ,可以进入邮件服务器

clip_image004

5.通过其他主机telnet 192.168.101.250 会失败

clip_image006

6.这是由于sendmail的默认监听地址为127.0.0.1 ,外部主机无法获得服务,需要修改/etc/mail/sendmail.mc文件,将DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl 修改为 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl ,

clip_image008

7.修改后,重启sendmail服务。继续通过其他主机telnet 192.168.101.250 访问,还会失败。这是因为系统读取sendmail.cf文件,虽然修改了sendmail.mc文件,但是却没有修改sendmail.cf文件。需要安装sendmail-cf-8.13.8-2.el5.i386.rpm软件,安装后将直接可以编辑sendmail.mc文件,m4-1.4.5-3.el5.1.i386.rpm软件系统默认安装,使sendmail.mc 自动转换为sendmail.cf文件

clip_image010

clip_image012

clip_image014

8.重启后,连接成功

clip_image016

9.修改access文件

Connect:localhost.localdomain RELAY

Connect:localhost RELAY

Connect:127.0.0.1 RELAY

Connect:192.168.101 RELAY

sina.com RELAY

163.com OK 到达163.com的邮件

10.修改local-host-names

clip_image018

11.更改主机名

编辑etc/sysconfig/network 文件

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=mail.163.com

修改/etc/hosts文件,将其他的名称去掉

clip_image020

12安装DNS服务器软件

clip_image022

13.进入 /var/named/chroot/etc下

[root@mail etc]# cp -p named.caching-nameserver.conf named.conf

[root@mail etc]# vim named.conf

clip_image024

clip_image025

14.编辑区域声明文件,并设置转发

[root@mail etc]# vim named.rfc1912.zones

clip_image027

15.切换到 /var/named/chroot/var/named/,编辑区域文件

[root@mail named]# cp -p localdomain.zone 163.com.db

clip_image029

16.编辑文件/etc/resolv.conf

[root@mail named]# vim /etc/resolv.conf

nameserver 192.168.101.250

17 重启DNS服务器,解析记录

[root@mail named]# service named restart

停止 named: [确定]

启动 named: [确定]

[root@mail named]# nslookup mail.163.com

Server: 192.168.101.250

Address: 192.168.101.250#53

Name: mail.163.com

Address: 192.168.101.250

[root@mail named]# nslookup

> set q=mx

> 163.com

Server: 192.168.101.250

Address: 192.168.101.250#53

163.com mail exchanger = 10 mail.163.com.

> set q=ns

> 163.com

Server: 192.168.101.250

Address: 192.168.101.250#53

163.com nameserver = ns.163.com.

> pop3.163.com

Server: 192.168.101.250

Address: 192.168.101.250#53

pop3.163.com canonical name = mail.163.com.

> smtp.163.com

Server: 192.168.101.250

Address: 192.168.101.250#53

smtp.163.com canonical name = mail.163.com.

18. 安装接收服务器 dovecot

clip_image031

19启动dovecot 服务

clip_image033

20.创建账户user1,user2,互相发送邮件,看是否能够发送接收成功

clip_image035

21.root向user1发送邮件

clip_image037

查看日志

clip_image039

22.切换到用户user1 ,接收邮件

clip_image041

23.user1 向user2 发送邮件

clip_image043

24. user2 接收收件

clip_image045

25 配置到达192.168.100.0网段的路由

[root@mail ~]# route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0

[root@mail ~]# route add default gw 192.168.100.250

163.com 配置完成

下面开始配置右半边sina.com区域

1.修改主机名

[root@mail ~]# vim /etc/sysconfig/network

clip_image047

clip_image049

2.新建挂载点,挂载光驱

[root@mail ~]# mkdir /mnt/cdrom

[root@mail ~]# mount /dev/cdrom /mnt/cdrom

3.配置yum工具

[root@mail ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo

[rhel-server]

name=Red Hat Enterprise Linux serverbaseurl=file:///mnt/cdrom/Server

enabled=1

gpgcheck=1

gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release

4.安装DNS服务器软件

[root@mail ~]# yum install bind bind-chroot caching-nameserver -y

clip_image051

5.切换到/var/named/chroot/etc/ 修改DNS的配置文件

[root@mail ~]# cd /var/named/chroot/etc/

[root@mail etc]# cp -p named.caching-nameserver.conf named.conf

[root@mail etc]# vim named.conf

clip_image053

clip_image055

6.修改区域声明文件

[root@mail etc]# vim named.rfc1912.zones

clip_image057

7.切换到/var/named/chroot/var/named,创建区域文件

[root@mail named]# cp -p localdomain.zone sina.com.db

[root@mail named]# vim sina.com.db

1 $TTL 86400

2 @ IN SOA ns.sina.com. root (

3 42 ; serial (d. adams)

4 3H ; refresh

5 15M ; retry

6 1W ; expiry

7 1D ) ; minimum

8 @ IN NS ns.sina.com.

9 ns IN A 192.168.100.250

10 mail IN A 192.168.100.250

11 pop3 IN CNAME mail

12 smtp IN CNAME mail

13 @ IN MX 10 mail

8.重启DNS服务器,编辑/etc/resolv.conf,尝试解析

[root@mail mail]# vim /etc/resolv.conf

nameserver 192.168.100.250

[root@mail named]# nslookup mail.sina.com

Server: 192.168.100.250

Address: 192.168.100.250#53

Name: mail.sina.com

Address: 192.168.100.250

[root@mail named]# nslookup pop3.sina.com

Server: 192.168.100.250

Address: 192.168.100.250#53

pop3.sina.com canonical name = mail.sina.com.

Name: mail.sina.com

Address: 192.168.100.250

[root@mail named]# nslookup

> set q=mx

> sina.com

Server: 192.168.100.250

Address: 192.168.100.250#53

sina.com mail exchanger = 10 mail.sina.com.

9.安装sendmail-cf-8.13.8-2.el5.i386.rpm

[root@mail Server]# yum install sendmail-cf -y

10.切换到/etc/mail 下

[root@mail mail]# vim sendmail.mc

clip_image059

[root@mail mail]# vim access

clip_image061

[root@mail mail]# vim local-host-names

clip_image063

10.重启sendmail 服务器

[root@mail mail]# service sendmail restart

关闭 sm-client: [确定]

关闭 sendmail: [确定]

启动 sendmail: [确定]

启动 sm-client: [确定]

11.安装邮件接收软件dovecot,并启动

[root@mail mail]# yum install dovecot -y

clip_image065

[root@mail mail]# service dovecot start

启动 Dovecot Imap: [确定]

12.配置到达192.168.101.0网段的路由

[root@mail mail]# route add -net 192.168.101.0 netmask 255.255.255.0 dev eth0

[root@mail mail]# route add default gw 192.168.101.250

13.在sina.com端解析对方域名

clip_image067

clip_image069

13新建系统账户user3 user4

clip_image071

配置user1 @163.com 邮件客户端

clip_image072

clip_image073

clip_image074

clip_image075

clip_image076

配置user3@sina.com的客户端

clip_image077

clip_image078

clip_image079

clip_image080

clip_image082

user1@163.com 用户向 user3@sina.com发送邮件

clip_image083

sina.com 邮件服务器日志记录:

clip_image085

163.com邮件服务器日志记录:

clip_image087

user3 接收到邮件

clip_image089

虽然发送成功,但是发送速度较慢,这是由于邮件服务器默认不进行不同区域的中继,所以当收到163.com区域的邮件时,得知其ip 地址为192.168.101.250 ,服务器会根据该ip地址进行反向解析

所以要在两台DNS服务器上配置DNS反向解析记录

配置163.com 区域的DNS反向记录

切换到/var/named/chroot/etc

[root@mail etc]# vim named.rfc1912.zones

clip_image091

切换到/var/named/chroot/var/named

[root@mail named]# cp -p named.local 192.168.101.db

$TTL 86400

@ IN SOA localhost. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS localhost.

250 IN PTR mail.163.com.

~

配置sina.com 区域的DNS反向记录

[root@mail ~]# cd /var/named/chroot/etc/

[root@mail etc]# vim named.rfc1912.zones

编辑区域声明文件

clip_image093

[root@mail etc]# cd ../var/named/

[root@mail named]# cp -p named.local 192.168.100.db

[root@mail named]# vim 192.168.100.db

$TTL 86400

@ IN SOA localhost. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS localhost.

250 IN PTR mail.sina.com.

重启DNS服务器

[root@mail named]# service named restart

停止 named: [确定]

启动 named: [确定]

解析192.168.100.250

[root@mail named]# nslookup 192.168.100.250

Server: 192.168.100.250

Address: 192.168.100.250#53

250.100.168.192.in-addr.arpa name = mail.sina.com.

user1@163.comuser3@sina.com 发送邮件,很快就能发送到对方

clip_image094

clip_image096

clip_image098

在sina.com邮件服务器上安装wireshark 抓包

[root@mail ~]# yum install wireshark

clip_image100

启动wireshark

[root@mail ~]# tshark -ni eth0 -R "tcp.dstport eq 110"

clip_image102

user1@163.com 向user3@sina.com 发送邮件,然后user3@sina.com 接收邮件

clip_image103

user3@sina.com 接收邮件

clip_image105

此时,sina.com上的转抓包工具可以抓到有价值信息

clip_image107

所以要想实现安全的通信,需要使用安全的加密邮件进行发送

下面就来实现smtps 和pop3s

##############################邮件安全###############################

由于配置163.com 区域 和 配置 sina.com区域 完全相同,所以实验中 仅在sina.com中设置邮件安全。

首先配置发送邮件协议的安全

邮件的发送协议为smtp ,要实现smtps ,需要使用starttls在25号端口上加密

1.查看编译sendmail时是否是否加入了starttls 功能

[root@mail ~]# sendmail -d0.1 -bv

clip_image109

2.查看sendmail 是否开启了starttls功能

clip_image111

需要搭建CA证书服务器

3. [root@mail ~]# vim /etc/pki/tls/openssl.cnf

clip_image113

clip_image115

clip_image117

4.切换到/etc/pki/CA/ 下,新建三个目录和两个文件,并给serial一个初始值01

[root@mail ~]# cd /etc/pki/CA/

drwx------ 2 root root 4096 2009-06-30 private

[root@mail CA]# mkdir certs newcerts crl

[root@mail CA]# touch index.txt serial

[root@mail CA]# echo "01">serial

5.ca产生自己的私钥

[root@mail CA]# openssl genrsa 1024 >private/cakey.pem

clip_image119

6.CA根据自己的私钥产生证书

[root@mail CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem

clip_image121

7.×××及私钥的权限为600

[root@mail CA]# chmod 600 cacert.pem

[root@mail CA]# chmod 600 private/cakey.pem

8.为sendmail创建存放证书及私钥文件的位置

[root@mail CA]# mkdir -pv /etc/mail/sendmail_certs

9.切换到/etc/mail/sendmail_certs/下,产生私钥文件。

[root@mail sendmail_certs]# openssl genrsa 1024 >sendmail.key

clip_image123

10.根据私钥文件产生请求文件

[root@mail sendmail_certs]# openssl req -new -key sendmail.key -out sendmail.csr

clip_image125

11.CA服务器颁发证书

[root@mail sendmail_certs]# openssl ca -in sendmail.csr -out sendmail.cert

clip_image127

12.修改sendmai服务器的证书、私钥的权限为600

[root@mail sendmail_certs]# chmod 600 *

clip_image129

13.编辑/etc/mail、sendmail.mc文件

define(`confCACERT_PATH', `/etc/pki/CA')dnl

define(`confCACERT', `/etc/pki/CA/cacert.pem')dnl

define(`confSERVER_CERT', `/etc/mail/sendmail_certs/sendmail.cert')dnl

define(`confSERVER_KEY', `/etc/mail/sendmail_certs/sendmail.key')dnl

DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl

14.重启sendmail服务,再次查看是否开启starttls 功能

clip_image131

下面来配置接收邮件的安全:pop3s

1.创建存放接收邮件服务器的证书、私钥的位置

[root@mail ~]# mkdir -pv /etc/dovecot/certs

clip_image133

2.产生私钥文件

[root@mail certs]# openssl genrsa 1024 >dovecot.key

clip_image135

3.产生请求文件

[root@mail certs]# openssl req -new -key dovecot.key -out dovecot.csr

clip_image137

4.ca颁发证书

[root@mail certs]# openssl ca -in dovecot.csr -out dovecot.cert

clip_image139

5.修改权限

[root@mail certs]# chmod 600 *

clip_image141

6.编辑/etc/dovecot.conf

ssl_cert_file = /etc/dovecot/certs/dovecot.cert

ssl_key_file = /etc/dovecot/certs/dovecot.key

7.重启dovecot 服务

[root@mail certs]# service dovecot restart

clip_image143

pop3s 配置完成

8.配置outlook 邮件客户端

配置user4@sina.com

clip_image144

配置user3@sina.com

clip_image145

9. user4@sina.com 向 user3@sina.com发送邮件

clip_image147

10.点击“是”,继续使用该服务器,邮件发送出去

11.user3@sina.com 连接上邮件服务器接收邮件

clip_image148

clip_image150

12.查看抓包内容,没有截获到有用信息。

clip_image152

身份验证设置:

在outlook上新建账户user5@sina.com ,而user5在Linux 邮件服务器上并不存在。

clip_image154

clip_image155

clip_image156

clip_image157

clip_image158

clip_image159

clip_image160

user5@sina.com 向 user3@sina.com发送邮件

clip_image161

user3@sina.com 能够收到邮件

clip_image163

由于user5用户在邮件服务器中根本不存在,但是却可以使用该邮件服务器发送邮件,那么该邮件服务器容易成为邮件垃圾中转站。

切换到/usr/lib/sasl2/ 打开文件Sendmail.conf

[root@mail sasl2]# cat Sendmail.conf

pwcheck_method:saslauthd

查看是否启用验证功能

[root@mail sasl2]# telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.sina.com ESMTP Sendmail 8.13.8/8.13.8; Tue, 11 Sep 2012 21:20:22 +0800

ehlo 127.0.0.1

250-mail.sina.com Hello localhost.localdomain [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE

250-DSN

250-ETRN

250-STARTTLS

250-DELIVERBY

250 HELP

查看是否安装cyrus-sasl

clip_image165

编辑 /etc/mail/sendmail.mc

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN ')dnl

clip_image167

将define(`confAUTH_OPTIONS', `A')dnl 改为 define(`confAUTH_OPTIONS', `A y')dnl

将 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA ')dnl

改为

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA ,M=Ea')dnl

重启sendmail和saslauthd服务

[root@mail Server]# service sendmail restart

关闭 sm-client: [确定]

关闭 sendmail: [确定]

启动 sendmail: [确定]

启动 sm-client: [确定]

[root@mail Server]# service saslauthd restart

停止 saslauthd: [确定]

启动 saslauthd: [确定]

再次使用 user5@sina.com 发送邮件

clip_image168

发送失败

clip_image169

这样就可以杜绝垃圾邮件经过该服务器向外传递。