上一篇博文我们讨论了sendmail的安装及案例配置,我们都知道sendmail服务器邮件传输是明文的,这样对于邮件的信息就无法起到安全保障,故本篇博文来讨论下借助CA实现pop3,smtp3,从而实现邮件的密文传送,还是就是sendmail本身是身份验证的,也就是任何人都可以给sendmail服务器发送邮件,前提是允许中继的ip段或域,这样无疑就增加了服务器的负担,我们可以借助sasl来实现身份验证。

一、Sendmail加密,

首先查看编辑环境

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

Version 8.13.8
Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS
TCPWRAPPERS USERDB USE_LDAP_INIT

sendmail 8.13.8版本可以看出是支持STARTTLS的,可以实现加密

CA根证书请求与颁发

1.修改CA文件的相关路径;

87 [ policy_match ]

 88 countryName            = optional

 89 stateOrProvinceName     = optional

 90 organizationName        = optional

 91 organizationalUnitName   = optional

2.产生私钥,并修改私钥的权限,

3.以私钥产生证书链,

openssl req -new -key private/cakey.pem -x509 -out cacert.pem

CA根证书配置好后,为POP3请求证书

1.pop3证书存放在/etc/dovecot/certs

[root@163 CA]# mkdir   -pv  /etc/dovecot/certs

mkdir: created directory `/etc/dovecot'

mkdir: created directory `/etc/dovecot/certs'

[root@163 CA]# cd /etc/dovecot/certs/

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

Generating RSA private key, 1024 bit long modulus

..............................++++++

........++++++

e is 65537 (0x10001)

[root@163 certs]#chmod 600 dovecot.key

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

2.由自己的证书链向ca请求,导出自己的证书openssl  ca -in dovecot.csr -out dovecot.cert

3.证书请求之后,

修改dovecot的配置文件/etc/dovecot.conf

21 protocols = imaps pop3s

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

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

[root@163 certs]# netstat -tulpn |grep dovecot

tcp        0      0 :::993                      :::*                        LISTEN      4462/dovecot        

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

4.修改配置文件后,重启dovecot文件,并查看日志文件,tail /var/log/maillog,发现可以正常启动

[root@163 certs]# service dovecot restart

Stopping Dovecot Imap:                                     [  OK  ]

Starting Dovecot Imap:                                      [  OK  ]

5.就有客户机(192.168.142.5)user1@163.com来进行测试,用outlook来接收一封邮件,注意接收时,要对

user1的帐号属性做如下设置,勾选下图中的选项:

在邮件服务器端安装wireshark

[root@163 ~]#tshark   -ni   eth0 -R "tcp.port eq 995"

SMTP证书请求与颁发

[root@163 certs]# mkdir  -pv  /etc/sendmail/certs

mkdir: created directory `/etc/sendmail'

mkdir: created directory `/etc/sendmail/certs'

[root@163 certs]# cd /etc/sendmail/certs/

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

Generating RSA private key, 1024 bit long modulus

.....++++++

.....................................++++++

e is 65537 (0x10001)

[root@163 certs]# chmod  600 sendmail.key

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

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

修改配置文件

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/sendmail/certs/sendmail.cert')dnl

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

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

telnet来测试,发现已经支持searttls

就用客户机192.168.142.5测试一下,帐号设置时,高级选项中要勾选下图中的选项:

同样也可以

tshark   -ni   eth0 -R "tcp.port eq 25"来看一下传输的数据是经过加密的,仅可以最初的三次握手,数据部分是加密的,Rdady to start TLS

二、身份验证

sendmail自身是无法实现身份验证的,要借助sasl(简单认证安全层),

sasl依赖于软件包:cyrus-sasl,

1.可以检测相关包是否安装rpm -qa |grep sasl,并安装

[root@mailserver sbin]# rpm -qa|grep sasl

cyrus-sasl-2.1.22-5.el5

cyrus-sasl-lib-2.1.22-5.el5

cyrus-sasl-devel-2.1.22-5.el5

cyrus-sasl-plain-2.1.22-5.el5

2.启动saslauthd服务,

[root@mailserver sbin]# service saslauthd start

启动 saslauthd:                                           [确定]

3.编辑sendmail的配置文件,vim /etc/mail/sendmail.mc

修改39,

39 define(`confAUTH_OPTIONS', `A y')dnl

并启用52,53行,

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行

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

4.重启sendmail服务,用telnet命令测试,发现已经支持身份验证了,

5.既然支持了,就telnet来发一封邮件来测试下;注意用户名和密码要经过base64编码;

发现可以正常发送,接收当然也是可以的,就不再附图,

6.我们在客户机上再来测试一下,发现正常存在的用户也无法正常发送

7.修改一下user1属性,勾上我的服务器要求身份验证

就可以正常发送了,

实验到此结束,自己动手操作下吧,^_^