sendmail

sendmail 电子邮件服务器_第1张图片

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

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

例:[email protected][email protected] 发送邮件

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

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

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

[email protected] 通过pop3 或imap协议连接上邮件服务器,将信件取回。

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

例:[email protected] 用户向[email protected] 用户发送邮件

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

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

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

4. [email protected]用户 通过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 会失败

sendmail 电子邮件服务器_第2张图片

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文件

sendmail 电子邮件服务器_第3张图片

sendmail 电子邮件服务器_第4张图片

sendmail 电子邮件服务器_第5张图片

8.重启后,连接成功

sendmail 电子邮件服务器_第6张图片

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

sendmail 电子邮件服务器_第7张图片

11.更改主机名

编辑etc/sysconfig/network 文件

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=mail.163.com

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

sendmail 电子邮件服务器_第8张图片

12安装DNS服务器软件

sendmail 电子邮件服务器_第9张图片

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

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

[root@mail etc]# vim named.conf

sendmail 电子邮件服务器_第10张图片

sendmail 电子邮件服务器_第11张图片

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

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

sendmail 电子邮件服务器_第12张图片

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

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

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

sendmail 电子邮件服务器_第13张图片

19启动dovecot 服务

clip_image033

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

sendmail 电子邮件服务器_第14张图片

21.root向user1发送邮件

sendmail 电子邮件服务器_第15张图片

查看日志

sendmail 电子邮件服务器_第16张图片

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

sendmail 电子邮件服务器_第17张图片

23.user1 向user2 发送邮件

sendmail 电子邮件服务器_第18张图片

24. user2 接收收件

sendmail 电子邮件服务器_第19张图片

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

sendmail 电子邮件服务器_第20张图片

sendmail 电子邮件服务器_第21张图片

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

sendmail 电子邮件服务器_第22张图片

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

sendmail 电子邮件服务器_第23张图片

sendmail 电子邮件服务器_第24张图片

6.修改区域声明文件

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

sendmail 电子邮件服务器_第25张图片

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

sendmail 电子邮件服务器_第26张图片

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

sendmail 电子邮件服务器_第27张图片

10.重启sendmail 服务器

[root@mail mail]# service sendmail restart

关闭 sm-client: [确定]

关闭 sendmail: [确定]

启动 sendmail: [确定]

启动 sm-client: [确定]

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

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

sendmail 电子邮件服务器_第28张图片

[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端解析对方域名

sendmail 电子邮件服务器_第29张图片

sendmail 电子邮件服务器_第30张图片

13新建系统账户user3 user4

sendmail 电子邮件服务器_第31张图片

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

sendmail 电子邮件服务器_第32张图片

sendmail 电子邮件服务器_第33张图片

sendmail 电子邮件服务器_第34张图片

sendmail 电子邮件服务器_第35张图片

sendmail 电子邮件服务器_第36张图片

配置[email protected]的客户端

sendmail 电子邮件服务器_第37张图片

sendmail 电子邮件服务器_第38张图片

sendmail 电子邮件服务器_第39张图片

sendmail 电子邮件服务器_第40张图片

sendmail 电子邮件服务器_第41张图片

[email protected] 用户向 [email protected]发送邮件

sendmail 电子邮件服务器_第42张图片

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

clip_image085

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

sendmail 电子邮件服务器_第43张图片

user3 接收到邮件

sendmail 电子邮件服务器_第44张图片

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

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

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

切换到/var/named/chroot/etc

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

sendmail 电子邮件服务器_第45张图片

切换到/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

编辑区域声明文件

sendmail 电子邮件服务器_第46张图片

[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.

[email protected][email protected] 发送邮件,很快就能发送到对方

sendmail 电子邮件服务器_第47张图片

sendmail 电子邮件服务器_第48张图片

sendmail 电子邮件服务器_第49张图片

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

[root@mail ~]# yum install wireshark

sendmail 电子邮件服务器_第50张图片

启动wireshark

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

sendmail 电子邮件服务器_第51张图片

[email protected][email protected] 发送邮件,然后[email protected] 接收邮件

sendmail 电子邮件服务器_第52张图片

[email protected] 接收邮件

sendmail 电子邮件服务器_第53张图片

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

sendmail 电子邮件服务器_第54张图片

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

下面就来实现smtps 和pop3s

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

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

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

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

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

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

sendmail 电子邮件服务器_第55张图片

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

sendmail 电子邮件服务器_第56张图片

需要搭建CA证书服务器

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

sendmail 电子邮件服务器_第57张图片

sendmail 电子邮件服务器_第58张图片

sendmail 电子邮件服务器_第59张图片

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

sendmail 电子邮件服务器_第60张图片

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

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

sendmail 电子邮件服务器_第61张图片

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

sendmail 电子邮件服务器_第62张图片

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

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

sendmail 电子邮件服务器_第63张图片

11.CA服务器颁发证书

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

sendmail 电子邮件服务器_第64张图片

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

[root@mail sendmail_certs]# chmod 600 *

sendmail 电子邮件服务器_第65张图片

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 功能

sendmail 电子邮件服务器_第66张图片

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

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

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

2.产生私钥文件

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

sendmail 电子邮件服务器_第67张图片

3.产生请求文件

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

sendmail 电子邮件服务器_第68张图片

4.ca颁发证书

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

sendmail 电子邮件服务器_第69张图片

5.修改权限

[root@mail certs]# chmod 600 *

sendmail 电子邮件服务器_第70张图片

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 邮件客户端

配置[email protected]

sendmail 电子邮件服务器_第71张图片

配置[email protected]

sendmail 电子邮件服务器_第72张图片

9. [email protected][email protected]发送邮件

sendmail 电子邮件服务器_第73张图片

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

[email protected] 连接上邮件服务器接收邮件

sendmail 电子邮件服务器_第74张图片

sendmail 电子邮件服务器_第75张图片

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

sendmail 电子邮件服务器_第76张图片

身份验证设置:

在outlook上新建账户[email protected] ,而user5在Linux 邮件服务器上并不存在。

sendmail 电子邮件服务器_第77张图片

sendmail 电子邮件服务器_第78张图片

sendmail 电子邮件服务器_第79张图片

sendmail 电子邮件服务器_第80张图片

sendmail 电子邮件服务器_第81张图片

sendmail 电子邮件服务器_第82张图片

sendmail 电子邮件服务器_第83张图片

[email protected][email protected]发送邮件

sendmail 电子邮件服务器_第84张图片

[email protected] 能够收到邮件

sendmail 电子邮件服务器_第85张图片

由于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

sendmail 电子邮件服务器_第86张图片

编辑 /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

sendmail 电子邮件服务器_第87张图片

将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: [确定]

再次使用 [email protected] 发送邮件

sendmail 电子邮件服务器_第88张图片

发送失败

sendmail 电子邮件服务器_第89张图片

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