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

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

 
一、Sina.com服务器配置
1、安装DNS服务器
1)安装bind
[root@localhost ~]# cd /mnt/cdrom/Server/
[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 ~]# 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.2.101; };##转发给126服务器
38         match-clients      { any; };
39         match-destinations { any; }; ##只修改以上内容
[root@localhost etc]# vim named.rfc1912.zones (添加一下内容)
21 zone "sina.com" IN {
22         type master;
23         file "sina.com.zone";
24         allow-update { none; };
25 };
 
38 zone "2.168.192.in-addr.arpa" IN {
39         type master;
40         file "192.168.2.zone";
41         allow-update { none; };
42 };
 
[root@localhost etc]# cd ../var/named/
[root@localhost named]# ll
[root@localhost named]# cp -p localhost.zone sina.com.zone
[root@localhost named]# vim sina.com.zone
 

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

重新启动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安装自动解决依赖关系
Installed:
dovecot.i386 0:1.0.7-7.el5                                                           
Dependency Installed:
mysql.i386 0:5.0.77-3.el5                 
perl-DBI.i386 0:1.52-2.el5
[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
116 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
##127.0.0.1代表邮件服务器只能内部使用
 
[root@localhost mail]# vim access
7 Connect:localhost.localdomain           RELAY
8 Connect:localhost                       RELAY
9 Connect:127.0.0.1                       RELAY
10 sina.com                               OK    ##本地区无条件处理
11 163.com                               RELAY ##外地区转发
 
[root@localhost mail]# vim local-host-names
2 sina.com
3 mail.sina.com
 
[root@localhost ~]# vim /etc/sysconfig/network 
##修改主机名 必须是本地dns域中能解析的主机名
3 HOSTNAME=mail.sina.com
 
[root@mail ~]# vim /etc/resolv.conf
##修改本机的dns指向
3 nameserver 192.168.2.100
 
 
 
二、163.com服务器配置
1、安装DNS服务器
1)安装bind
[root@localhost ~]# cd /mnt/cdrom/Server/
[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 ~]# 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.2.100; };##转发给126服务器
38         match-clients      { any; };
39         match-destinations { any; }; ##只修改以上内容
[root@localhost etc]# vim named.rfc1912.zones (添加一下内容)
21 zone "163.com" IN {
22         type master;
23         file "163.com.zone";
24         allow-update { none; };
25 };
 
38 zone "2.168.192.in-addr.arpa" IN {
39         type master;
40         file "192.168.2.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 163.com.zone
 

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

重新启动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安装自动解决依赖关系
Installed:
dovecot.i386 0:1.0.7-7.el5                                                           
Dependency Installed:
mysql.i386 0:5.0.77-3.el5                 
perl-DBI.i386 0:1.52-2.el5
[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
修改配置文件
 
[root@localhost ~]# cd /etc/mail
[root@localhost mail]# vim sendmail.mc
116 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
##127.0.0.1代表邮件服务器只能内部使用
 
[root@localhost mail]# vim access
7 Connect:localhost.localdomain           RELAY
8 Connect:localhost                       RELAY
9 Connect:127.0.0.1                       RELAY
10 sina.com                               RELAY   ##本地区无条件处理
11 163.com                               OK     ##外地区转发
 
[root@localhost mail]# vim local-host-names
2 163.com
3 mail.163.com
 
[root@localhost ~]# vim /etc/sysconfig/network 
##修改主机名 必须是本地dns域中能解析的主机名
3 HOSTNAME=mail.163.com
 
[root@mail ~]# vim /etc/resolv.conf
##修改本机的dns指向
3 nameserver 192.168.2.101
 
 
三、测试
sina.com 地区pc1向163.com地区pc3发送邮件
 

 
四、实现使用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
Installed:
 wireshark.i386 0:1.0.8-1.el5_3.1                                                                   
Dependency Installed:
 libsmi.i386 0:0.4.5-2.el5                                                                         
Complete!
 
 
六、测试
客户端配置
 

[root@mail ~]# tshark -ni eth0 -R "tcp.dstport eq 995 or tcp.srcport eq 995"
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
 

可以看到传输层安全
 
 
 
七、实现身份验证
查看是否安装了身份验证服务
[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 "user3@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
 
用客户端测试
 

 

如果不选择我的服务器要求身份验证会出现下面错误

发送邮件

查看收件箱