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 "user1@163.com" |base64 #产生加密的帐号 (以 base64加密
[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
mail from:user1@163.com
250 2.1.0 user1@163.com... Sender ok
rcpt to:user3@sina.com
250 2.1.5 user3@sina.com... Recipient ok
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上如果不配置
 

提示要求身份认证,配置
选择菜单栏中的工具中的帐号
 

双击帐号
 

选择服务器选项
 

发信
 

 

能够发送成功!