上一篇博文我们讨论了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属性,勾上我的服务器要求身份验证
就可以正常发送了,
实验到此结束,自己动手操作下吧,^_^