上一篇博文我们讨论了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文件的相关路径;


223005409.jpg



87 [ policy_match ]


88 countryName            = optional


89 stateOrProvinceName    = optional


90 organizationName        = optional


91 organizationalUnitName  = optional


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


223022234.jpg



3.以私钥产生证书链,


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


223150337.jpg





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


223303111.jpg



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


223325723.jpg



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的帐号属性做如下设置,勾选下图中的选项:

235629914.jpg

在邮件服务器端安装wireshark


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


223435791.jpg



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


223638648.jpg



修改配置文件


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


223755679.jpg



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


224112251.jpg





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


224130343.jpg



同样也可以


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





二、身份验证


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命令测试,发现已经支持身份验证了,


224710148.jpg



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


224920254.jpg





225028856.jpg



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


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


225121957.jpg



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


225219224.jpg



就可以正常发送了,


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

本文出自 “刘园的博客” 博客,请务必保留此出处http://colynn.blog.51cto.com/5971950/1059373