基本原理

电子邮件是Internet应用服务之一,通过网络,可以以非常低廉的价格、非常快速的方式,与世界上任何一个网络用户联络,这些电子邮件可以包含文字、图像、声音或其他多媒体信息。和普通的邮件一样,电子邮件也需要“邮局”——邮件服务器。邮件服务器提供了邮件系统的基本结构,包括邮件传输、邮件分发、邮件存储等功能,以确保邮件能够发送到Internet网络中的任意地方。目前邮件服务器有两种不同的应用群体:ISP提供商和企事业单位。

Linux邮件服务器。Linux操作系统作为目前应用最为广泛的开源操作系统,具有性能稳定、可靠性高和价格低廉的特点。使用Linux作为邮件服务器,主要是可以与Sendmail、MySQL等开源软件共同使用,在满足用户需求的基础上降低了系统价格。安全防护,现在的邮件服务器在安全防护技术上有了较大的提高,包括数据身份认证、传输加密、垃圾邮件过滤、邮件病毒过滤、安全审计等的多项安全技术在邮件服务器中都得到了很好的应用。身份认证主要指SMTP发信认证,此项功能对于邮件服务器是一个可选功能,主要目的是防止***利用自己的服务器***其他邮件服务器。完善SMTP身份认证不仅可以制止***的恶劣行为,同时可以保证自己的邮件服务器的各种资源可以充分地应用到日常的邮件处理过程中,不会造成服务器的系统崩溃和资源浪费。无论是POP3协议还是SMTP协议,由于其在设计之初的缺陷,全部使用明码进行消息的传递,因此很容易造成信息的泄漏。我们可以通过两种方式提高系统的安全性:链路加密和端对端加密。链路加密是使用加密工具(软硬件工具)对传输的线路进行数据加密,需要网络设施的支持。端对端加密是邮件客户端到邮件客户端的加密,是邮件服务器应当提供的功能,目前较为流行的方式是使用SSL/TLS进行传输加密。垃圾邮件大多是一些带有商业性质的广告等宣传品。据估计,仅仅商业性垃圾邮件一项,每封垃圾邮件所抵消的生产力成本就在1美元左右。单是下载垃圾邮件所花费的上网费与电话费,每年就要花掉全球网民94亿美元。此外,许多病毒以及×××和信用卡盗用案例也与垃圾邮件有关。因此,我们需要邮件服务器具有垃圾邮件处理的功能,抵御大部分垃圾邮件的***。******和病毒本来是两个相对独立的技术体系,但是随着网络的不断发展,网络工具与病毒越来越趋于融合,比如尼姆达病毒既是病毒,也是网络***的一种方式,而应用广泛的电子邮件,也成了病毒传播的主要方式之一。目前,大多数邮件服务器都具有了基本的病毒防护的能力。

电子邮件特点:
1 、快速;
2 、安全;
3 、多样性;

mail相关的协议:
Smpt 简单邮件传输协议 应用层 底层走tcp 25 明文
Pop pop/pop3 tcp 109/110 明文 脱机浏览邮件
Imap4 tcp 143 联机浏览邮件
Mime 多用户邮件扩展 【http 邮件】 可以通过将二进制文件转换成acsii码进行传输;

mail系统
MUA:邮件用户代理,泛指邮件客户端;
比如:window:outlook,foxmail;Linux:mail,mutt,thunderbird;evolution

MTA:邮件传输代理,泛指邮件服务器(发送服务器);
Window:电子邮件服务,exchange 2003 2007,mdaemon;
Linux:sendmail,postfix,qmail;

MDA:邮件分发代理,访问代理 sendmail:使用procmail postfix:使用dropmail

MAA:邮件访问代理,泛指接受服务器;
Linux:dovecot【pop2/3 imap pop3s imaps】

邮件的安全问题:
Ssl/tls
http---https
Pop3---pop3s
Lmap---imaps

邮件的机密性:
Smtp--smtps 465端口
Pop3---pop3s 995端口
Lmap---imaps 993端口

sendmail主要配置文件
(1)/etc/mail/sendmail.cf:sendmail的主要配置文件,管理所有参数。由于sendmail.cf中的语法很复杂,所以不要建议手工修改。由于我们可以以sendmail.mc文档配合sendmail-cf目录下的宏通过m4预处理器自动生成。
(2)/etc/mail/access.db:sendmail服务器的数据库,要转成这个数据库需要makemap命令和/etc/mail/access的配合
(3)/etc/mail/access:设置哪些地址的主机能够经过本地sendmail服务器进行收发邮件。

Sendmial缺陷:
1 、无身份验证;
2 、无防垃圾;
3 、无防病毒;

本次实验主要是实现的简单的邮件服务,加密以及身份验证。分为两个区域

运行平台:2台linux,一台xp,一台windows server 2003 的pc

其中一台linux做mail.163.com服务器,ip为192.168.101.1

另外一台linux做mail.sina.com服务器,ip为192.168.101.4

一台xp做mail.163.com的客户,ip为192.168.101.10,DNS为192.168.101.1

一台windows server 2003做mail.sina.com的客户,ip为192.168.101.6,DNS为192.168.101.4

拓扑图

p_w_picpath

一、163邮件服务器配置

1、安装DNS服务器

(1)安装bind

[root@localhost Server]# rpm -ivh bind-9.3.6-4.P1.el5.i386.rpm

[root@localhost Server]# rpm -ivh bind-chroot-9.3.6-4.P1.el5.i386.rpm

[root@localhost Server]# rpm -ivh caching-nameserver-9.3.6-4.P1.el5.i386.rpm

(2)修改配置文件

[root@localhost Server]# cd /var/named/chroot/etc/

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

[root@localhost etc]# vim named.conf

15 listen-on port 53 { any; };

27 allow-query { any; };

28 allow-query-cache { any; };

29 forwarders { 192.168.101.4 ; };##转发给sina服务器

38 match-clients { any; };

39 match-destinations { any; }; ##只修改以上内容

[root@localhost etc]# vim named.rfc1912.zones (添加以下内容)

27 zone "163.com" IN {

28 type master;

29 file "163.com.zone";

30 allow-update { none; };

31 };

38 zone "101.168.192.in-addr.arpa" IN {
39         type master;
40         file "192.168.101.zone";
41         allow-update { none; };
42 };

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

[root@localhost named]# ll

[root@localhost named]# cp -p localhost.zone 163.com.zone
p_w_picpath

[root@localhost named]# cp -p named.local 192.168.101.zone
[root@localhost named]# vim 192.168.101.zone
p_w_picpath

重新启动dns服务器

[root@localhost ~]# service named restart

[root@localhost ~]# chkconfig named on

2.搭建电子邮件服务器

[root@localhost Server]# rpm -ivh sendmail-8.13.8-2.el5.i386.rpm

##邮件发送服务器

[root@localhost Server]# rpm -ivh sendmail-cf-8.13.8-2.el5.i386.rpm

##配置文件

[root@localhost Server]# rpm -ivh sendmail-devel-8.13.8-2.el5.i386.rpm

##开发包

[root@localhost Server]# rpm -ivh sendmail-doc-8.13.8-2.el5.i386.rpm

##文档包

[root@localhost ~]# yum install dovecot -y

##邮件接收服务器 yum安装自动解决依赖关系

[root@localhost Server]# rpm -ivh m4-1.4.5-3.el5.1.i386.rpm

##处理配置文件的包

[root@localhost ~]# service sendmail start

[root@localhost ~]#chkconfig sendmail on

[root@localhost ~]# service dovecot start

[root@localhost ~]# chkconfig dovecot on

修改配置文件

配置文件:
/etc/mail/sendmail.cf --sendmail邮件服务启动时读取的主配置文件
/etc/mail/sendmail.mc --管理员修改sendmail服务器功能时的配置文件
/etc/mail/local-host-names --配置支持发送邮件时使用短域名形式
/etc/mail/virtusertable --虚拟用户列表
/etc/aliases --用户别名
/etc/mail/access --邮件中继

 

[root@localhost ~]# cd /etc/mail

[root@localhost mail]# vim sendmail.mc

clip_p_w_picpath002[8]

##127.0.0.1代表邮件服务器只能内部使用

 

[root@localhost mail]# vim access
clip_p_w_picpath002
//ok:本地无条件处理
//RELAY:外地区转发

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

 

 

clip_p_w_picpath002[6]
 

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

##修改主机名 必须是本地dns域中能解析的主机名

3 HOSTNAME=mail.163.com

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

##修改本机的dns指向

3 nameserver 192.168.101.1

##添加用户user1和user2并创建密码

[root@mail ~]# useradd user1

[root@mail ~]#passwd user1

[root@mail ~]# useradd user2

[root@mail ~]# passwd use2

关闭并克隆该状态的163邮箱服务器并重启

二、sina邮件服务器配置
1、DNS配置

(1)修改配置文件

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

[root@localhost etc]# cp -a named.caching-nameserver.conf named.conf

[root@localhost etc]# vim named.conf

15 listen-on port 53 { any; };

27 allow-query { any; };

28 allow-query-cache { any; };

29 forwarders { 192.168.101.1; };##转发给163服务器

38 match-clients { any; };

39 match-destinations { any; }; ##只修改以上内容

[root@localhost etc]# vim named.rfc1912.zones (修改以下内容)

27 zone "sina.com" IN {
28         type master;
29         file "sina.com.zone";
30         allow-update { none; };
31 };

38 zone "101.168.192.in-addr.arpa" IN {
39         type master;
40         file "192.168.101.zone";
41         allow-update { none; };
42 };

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

[root@localhost named]# ll

[root@localhost named]# cp -p localhost.zone 163.com.zone

[root@localhost named]# vim sina.com.zone

p_w_picpath

[root@localhost named]# cp -p named.local 192.168.101.zone

[root@localhost named]# vim 192.168.101.zone

p_w_picpath

重新启动dns服务器

[root@localhost ~]# service named restart

[root@localhost ~]# chkconfig named on

2.搭建电子邮件服务器

[root@localhost mail]# vim access

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

p_w_picpath

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

##修改主机名 必须是本地dns域中能解析的主机名

p_w_picpath 

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

##修改本机的dns指向

 

 

 

 

 

 

 

 

p_w_picpath

##创建user3,user4用户及密码

[root@mail ~]# useradd user3

[root@mail ~]#passwd user3

[root@mail ~]# useradd user4

[root@mail ~]# passwd use4

三、测试

clip_p_w_picpath002[10]

 

四、实现使用SSL/TLS进行传输加密

1.配置颁发证书的根机构

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

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

45 dir = /etc/pki/CA ##证书路径

88 countryName = optional

89 stateOrProvinceName = optional

90 organizationName = optional ##optional表示这些项可选择

136 countryName_default = CN ##修改一下证书机构的默认值,可以不修改

141 stateOrProvinceName_default = BeiJing

144 localityName_default = BeiJing

:88,90 s/match/optional (vim编辑可以选用命令)

产生证书

[root@mail pki]# cd CA

[root@mail CA]# mkdir crl certs newcerts

[root@mail CA]# touch index.txt serial ##新建相应的文件和目录

[root@mail CA]# echo "01">serial ##证书的序列号从1开始

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

Generating RSA private key, 1024 bit long modulus

[root@mail CA]# chmod 600 private/* ##更改权限

[root@mail CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem -days 3650 ##产生证书

2.邮件服务器的配置

为mail.sina.com申请证书

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

##创建存放私有钥匙,证书等信息的目录

产生钥匙

[root@mail ~]# cd /etc/mail/certs/

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

Generating RSA private key, 1024 bit long modulus

向根机构请求证书

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

Country Name (2 letter code) [CN]:

State or Province Name (full name) [BeiJing]:

Locality Name (eg, city) [BeiJing]:

Organization Name (eg, company) [My Company Ltd]:sina

Organizational Unit Name (eg, section) []:mail

Common Name (eg, your name or your server's hostname) []:mail.sina.com

申请证书

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

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 1 (0x1)

Validity

Not Before: Sep 10 02:07:00 2012 GMT

Not After : Sep 10 02:07:00 2013 GMT

Subject:

countryName = CN

stateOrProvinceName = BeiJing

organizationName = sina

organizationalUnitName = mail

commonName = mail.sina.com

X509v3 extensions:

X509v3 Basic Constraints:

CA:FALSE

Netscape Comment:

OpenSSL Generated Certificate

X509v3 Subject Key Identifier:

E5:41:0A:5E:4D:68:FF:1D:5B:3A:E5:4F:4C:CC:A1:1E:19:E9:0B:3E

X509v3 Authority Key Identifier:

keyid:45:06:6E:8B:A7:CA:44:2E:E0:47:71:10:10:C3:56:9C:3F:42:3D:52

 

Certificate is to be certified until Sep 10 02:07:00 2013 GMT (365 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

 

[root@mail certs]# chmod 600 ../certs/* ##更改证书和私钥的权限

 

3.证书和服务器的捆绑

[root@mail ~]# vim /etc/mail/sendmail.mc

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

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

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

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

##CA证书及服务器证书,钥匙路径及名字

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

##启用发送加密机制

 

4.接收邮件服务器配置

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

[root@mail ~]# cd /etc/dovecot/certs/

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

Generating RSA private key, 1024 bit long modulus

##产生私钥

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

##请求证书

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

##申请证书

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 2 (0x2)

Validity

Not Before: Sep 10 03:29:50 2012 GMT

Not After : Sep 10 03:29:50 2013 GMT

Subject:

countryName = CN

stateOrProvinceName = BeiJing

organizationName = sina

organizationalUnitName = mail

commonName = pop3.sina.com

X509v3 extensions:

X509v3 Basic Constraints:

CA:FALSE

Netscape Comment:

OpenSSL Generated Certificate

X509v3 Subject Key Identifier:

AE:0A:45:49:FF:E5:D3:E8:F1:F3:A6:93:24:55:99:45:CF:46:35:F7

X509v3 Authority Key Identifier:

keyid:45:06:6E:8B:A7:CA:44:2E:E0:47:71:10:10:C3:56:9C:3F:42:3D:52

Certificate is to be certified until Sep 10 03:29:50 2013 GMT (365 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

 

[root@mail certs]# chmod 600 *

 

5.证书和接受邮件服务器捆绑

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

21 protocols = pop3s

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

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

 

[root@mail ~]# service dovecot restart

Stopping Dovecot Imap: [ OK ]

Starting Dovecot Imap: [ OK ]

[root@mail ~]# netstat -tupln |grep dov

tcp 0 0 :::995 :::* LISTEN 5648/dovecot

五、安装抓包工具

[root@mail ~]# yum install wireshark –y

六、测试

客户端配置

clip_p_w_picpath002[12]

clip_p_w_picpath002[14]

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

p_w_picpath

 

 

七、实现身份验证

查看是否安装了身份验证服务

[root@mail ~]# rpm -qa |grep sasl

cyrus-sasl-lib-2.1.22-5.el5

cyrus-sasl-2.1.22-5.el5

cyrus-sasl-devel-2.1.22-5.el5

cyrus-sasl-plain-2.1.22-5.el5

可以查看是否启动了身份验证

[root@mail ~]# telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.163.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 11 Aug 2012 00:26:27 +0800

EHLO 127.0.0.1

250-mail.163.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-DELIVERBY

250 HELP

编辑sendmail.mc,启动身份验证

[root@mail ~]# vim /etc/mail/sendmail.mc

39 define(`confAUTH_OPTIONS', `A y')dnl ##y代表启动身份验证

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

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

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

##添加的M=Ea表示强制身份验证

[root@mail ~]# service saslauthd start ##启动身份验证服务

Starting saslauthd: [ OK ]

[root@mail ~]# chkconfig saslauthd on

[root@mail ~]# service sendmail restart ##重新启动服务

[root@mail ~]# telnet 127.0.0.1 25 ##可以看到多了身份验证选项

EHLO 127.0.0.1

250-AUTH LOGIN PLAIN

测试

[root@mail ~]# telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.163.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 11 Aug 2012 00:41:41 +0800

mail from:abc@163.com

530 5.7.0 Authentication required ##需要身份验证

 

验证时必须把账户名和密码改为base64格式

[root@mail ~]# echo -n "user1@163.com" |openssl base64

dXNlcjNAMTYzLmNvbQ==

[root@mail ~]# echo -n "123" |openssl base64

MTIz

 

测试发送邮件

[root@mail ~]# telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.163.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 11 Aug 2012 00:58:40 +0800

AUTH LOGIN dXNlcjNAMTYzLmNvbQ==

334 UGFzc3dvcmQ6

MTIz

235 2.0.0 OK Authenticated ##身份验证通过

MAIL FROM:user3@163.com

250 2.1.0 user3@163.com... Sender ok

RCPT TO:user4@163.com

250 2.1.5 user4@163.com... Recipient ok

DATA

354 Enter mail, end with "." on a line by itself

SUBJECT:hello

111111111111111111111111

.

250 2.0.0 q7AGweiM003413 Message accepted for delivery

[root@mail ~]# tail -f /var/log/maillog

p_w_picpath

客户端测试

clip_p_w_picpath002[18]

 p_w_picpath