Sendmail功能很强大,但是,它以明文传输、对用户的身份不进行认证。所以,我将创建数字证书给它加密,使用
sasl
对用户进行身份认证。
下面看看它们的搭建与客户端的设置:
一、数字证书
1、
创建CA
[root@mail Server]# cd /etc/pki/
[root@mail pki]# vim tls/openssl.cnf
dir = /etc/pki/CA
88 countryName = optional
89 stateOrProvinceName = optional
90 organizationName = optional
更该默认参数
产生它需要的文件
[root@mail pki]# cd /etc/pki/CA/
[root@mail CA]# mkdir crl certs newcerts
[root@mail CA]# touch serial index.txt
[root@mail CA]# echo 01 >serial #产生版本号
[root@mail CA]#
[root@mail CA]# openssl genrsa 1024 >private/cakey.pem #产生自己的私钥
[root@mail CA]# chmod 600 private/cakey.pem #更改权限
产生
CA的
证书
[root@mail CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem
2、
为我们的服务器产生私钥
[root@mail CA]# mkdir /etc/mail/certs #创建存放私钥、证书的文件夹
[root@mail CA]# cd /etc/mail/certs/
[root@mail certs]# openssl genrsa 1024 >sendmail.key
修改权限
[root@mail certs]# chmod 600 sendmail.key
[root@mail certs]# openssl req -new -key sendmail.key -out sendmail.csr #产生证书
CA签署证书
[root@mail certs]# openssl ca -in sendmail.csr -out sendmail.crt
将证书和sendmail捆绑
配置文件
[root@mail certs]# vim /etc/mail/sendmail.mc
define(`confCACERT_PATH', `/etc/pki/CA')dnl #指出CA主目录
define(`confCACERT', `/etc/pki/CA/cacert.pem')dnl#指出CA的证书
define(`confSERVER_CERT', `/etc/mail/certs/sendmail.crt')dnl#指出sendmail的证书
define(`confSERVER_KEY', `/etc/mail/certs/sendmail.key')dnl#指出sendmail的私钥
重启服务
[root@mail certs]# service sendmail restart
创建接收端证书
[root@mail certs]# mkdir -pv /etc/dovecot/certs
[root@mail certs]# cd /etc/dovecot/certs/
[root@mail certs]# openssl genrsa 1024 >dovecot.key
产生证书
[root@mail certs]# openssl req -new -key dovecot.key -out dovecot.csr
签署这个证书
[root@mail certs]# openssl ca -in dovecot.csr -out dovecot.crt
更改权限
[root@mail certs]# chmod 600 dovecot.key
3、
配置文件
[root@mail certs]# vim /etc/dovecot.conf
91 ssl_cert_file = /etc/dovecot/certs/dovecot.crt #指明我们的证书
92 ssl_key_file = /etc/dovecot/certs/dovecot.key#指明我们的私钥
103 ssl_ca_file = /etc/pki/CA/cacert.pem#指明我们的证书链
20 protocols = imaps pop3s#指明我们的加密协议
重启服务
[root@mail certs]# service dovecot restart
4、
在客户端配置
点击菜单栏中的工具中的账户
双击需要配置的账户名
点击高级
将下面两项选上
测试
User1给user3发一封信
会弹出一个警告
选择是,以后再发邮件就不再提示了
可以看到我们的信件已经加密
二、
下面我们来看看sendmail基于账户的的认证
1、
它需要cyrus-sasl这个软件包 (默认是安装了)
启动
[root@mail sasl2]# service saslauthd start
让sendmail支持sasl
配置
[root@mail sasl2]# vim /etc/mail/sendmail.mc
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl #打开
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 #强制身份认证
生成配置文件
[root@mail mail]# m4 sendmail.mc >sendmail.cf
重启服务
[root@mail sasl2]# service sendmail restart
2、
测试
不加密帐号,
服务器不允许发送
下面我们来产生加密的帐号
[root@mail sasl2]# echo "123" |base64#产生加密后的密钥
Mail from :发信人的用户名
Rcpt to:收信人的用户名
Data #是写信的开始
Subject:标题
写信以.结尾
以quit退出
[root@mail ~]# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to mail.163.com (127.0.0.1).
Escape character is '^]'.
220 mail.163.com ESMTP Sendmail 8.13.8/8.13.8; Sun, 26 May 2013 21:52:37 +0800
auth login dXNlcjFAMTYzLmNvbQ==
334 UGFzc3dvcmQ6
MTIz
235 2.0.0 OK Authenticated
date^H
500 5.5.1 Command unrecognized: "dat"
data
354 Enter mail, end with "." on a line by itself
eeeeeeeeeeeeeeeeeeeeeeeeeeeee
.
250 2.0.0 r4QDqbHh007377 Message accepted for delivery
在outlook上如果不配置
提示要求身份认证,配置
选择菜单栏中的工具中的帐号
双击帐号
选择服务器选项
发信