天天看點

sendmail伺服器加密與身份認證

  上一篇博文我們讨論了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檔案的相關路徑;

<a target="_blank" href="http://blog.51cto.com/attachment/201211/223005409.jpg"></a>

87 [ policy_match ]

 88 countryName            = optional

 89 stateOrProvinceName     = optional

 90 organizationName        = optional

 91 organizationalUnitName   = optional

2.産生私鑰,并修改私鑰的權限,

<a target="_blank" href="http://blog.51cto.com/attachment/201211/223022234.jpg"></a>

3.以私鑰産生證書鍊,

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

<a target="_blank" href="http://blog.51cto.com/attachment/201211/223150337.jpg"></a>

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  &gt; 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

<a target="_blank" href="http://blog.51cto.com/attachment/201211/223303111.jpg"></a>

2.由自己的證書鍊向ca請求,導出自己的證書openssl  ca -in dovecot.csr -out dovecot.cert

<a target="_blank" href="http://blog.51cto.com/attachment/201211/223325723.jpg"></a>

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)[email protected]來進行測試,用outlook來接收一封郵件,注意接收時,要對

user1的帳号屬性做如下設定,勾選下圖中的選項:

<a href="http://blog.51cto.com/attachment/201211/235629914.jpg" target="_blank"></a>

在郵件伺服器端安裝wireshark

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

<a target="_blank" href="http://blog.51cto.com/attachment/201211/223435791.jpg"></a>

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  &gt; sendmail.key

.....++++++

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

[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

<a target="_blank" href="http://blog.51cto.com/attachment/201211/223638648.jpg"></a>

修改配置檔案

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

<a target="_blank" href="http://blog.51cto.com/attachment/201211/223755679.jpg"></a>

用telnet來測試,發現已經支援searttls,

<a target="_blank" href="http://blog.51cto.com/attachment/201211/224112251.jpg"></a>

就用客戶機192.168.142.5測試一下,帳号設定時,進階選項中要勾選下圖中的選項:

<a target="_blank" href="http://blog.51cto.com/attachment/201211/224130343.jpg"></a>

同樣也可以

二、身份驗證

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指令測試,發現已經支援身份驗證了,

<a target="_blank" href="http://blog.51cto.com/attachment/201211/224710148.jpg"></a>

5.既然支援了,就telnet來發一封郵件來測試下;注意使用者名和密碼要經過base64編碼;

<a target="_blank" href="http://blog.51cto.com/attachment/201211/224920254.jpg"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201211/225028856.jpg"></a>

發現可以正常發送,接收當然也是可以的,就不再附圖,

6.我們在客戶機上再來測試一下,發現正常存在的使用者也無法正常發送;

<a target="_blank" href="http://blog.51cto.com/attachment/201211/225121957.jpg"></a>

7.修改一下user1屬性,勾上我的伺服器要求身份驗證

<a target="_blank" href="http://blog.51cto.com/attachment/201211/225219224.jpg"></a>

就可以正常發送了,

實驗到此結束,自己動手操作下吧,^_^

本文轉自 劉園  51CTO部落格,原文連結:http://blog.51cto.com/colynn/1059373

繼續閱讀