| 導購 | 订阅 | 在线投稿
分享
 
 
 

在postfix中實現基于cyrus-sasl的SMTP認證

來源:互聯網  2008-05-31 00:04:51  評論

概述:

全世界範圍內的SMTP服務器與日俱增,但是這些SMTP服務器都有一個與生俱來的缺點,那就是沒有任何的認證機制。因爲在設計這些SMTP服務器時,全世界範圍的Internet主機還不是很多,彼此間都有很高的可信任級別,所以沒有全面考慮安全性問題。這種現象也可以在別的Internet協議中看到。

正是因爲SMTP通訊過程缺乏認證機制,以及ip欺騙的容易實現,導致了以下兩個方面的問題:SMTP服務器無法確認SMTP客戶機的合法性;SMTP客戶機也無法確認SMTP服務器的合法性。從而也就導致了用戶可以不經過認證就發送郵件,用戶可以冒名發送郵件,以及垃圾郵件的泛濫。

Postfix設置了好多選項讓網絡管理員來限制服務器資源的使用,以及確定用戶的合法性。但遺憾的是,這些認證機制都是基于ip地址或者客戶DNS信息。在客戶ip地址固定的情況下,這些方法或許有一定的作用(雖然還是無法解決冒名發送郵件),但是在客戶ip地址不固定的情況下,就很難通過這種機制來進行限制了。當然,現在也有一些其他的技術,比如POP-before-SMTP(在發信前收信)來解決這個問題,但是這需要運行額外的服務程序。並且用戶在發行之前一定要先收信,這或多或少都會帶來一些不方便。

好在有簡單認證安全層(SASL),它提供了模塊化的SMTP認證擴展,因此SMTP就可以在SASL之上構建自己的SMTP認證,因爲可以通過開放式的機制和協議來建立認證會話。另外,SASL在實現了對PLAIN以及CRAM-MD5加密等協議的基礎上,還提供了多種認證方法,比如通過Kerberos、用戶數據庫、passwd文件、PAM等。這樣,SMTP程序不需要支持這些認證方法就可以實現多種認證方式。並且,SMTP在用戶經過成功認證以後同樣可以定義自己的訪問策略來對用戶訪問進行控制。

當然,首先我們必須保證該SMTP服務器能夠提供對SASL的支持:P)

需求:

首先要保證您的postfix版本是snapshot-20000507及其以上的版本,從而保證postfix對SASL的支持。強烈建議您升級至postfix-20010228及其以上版本。可以從www.postfix.org下載postfix的源代碼包,在測試過程中我們使用的是postfix-20010228-pl04.tar.gz。

然後,要保證您的SASL的版本是1.5.5及其以上版本,因爲已經有報告稱這些版本的SASL可以和postfix工作得很好。可以從ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/下載SASL,在測試過程中我們使用的是cyrus-sasl-1.5.24-17.rpm和cyrus-sasl-devel-1.5.24-17.rpm,即RedHat7.1自帶的SASL的rpm包。

另外說明一點,整個測試過程都是在RedHat7.1中進行的。

步驟:

1.檢查系統中是否安裝了cyrus-sasl-1.5.24

執行以下命令查看系統中是否安裝了cyrus-sasl:

rpm –qa |grep cyurs

如果您看到以下提示,則說明已經安裝了cyrus-sasl-1.5.24-17和cyrus-sasl-devel-1.5.24-17:

[root@test bye2000]# rpm -qa |grep sasl

cyrus-sasl-devel-1.5.24-17

cyrus-sasl-1.5.24-17

否則,請用rpm –ivh 命令先安裝所需sasl-cyrus包。

2.編譯postfix

首先,下載postfix-20010228-pl04.tar.gz,然後解開源代碼包:

[root@test /tmp]# tar xvzf postfix-20010228-pl04.tar.gz

命令執行完後,會生成postfix-20010228-pl04目錄,然後進入該目錄:

[root@test /tmp]# cd postfix-20010228-pl04

接下來,依次執行以下命令編譯postfix:

[root@test postfix-20010228-pl04]# make tidy

[root@test postfix-20010228-pl04]#make makefiles CCARGS='-DUSE_SASL_AUTH -I/usr/include' AUXLIBS='-L/usr/lib -lsasl'

[root@test postfix-20010228-pl04]# make

建立一個新用戶「postfix」,該用戶必須具有唯一的用戶id和組id號,同時應該讓該用戶不能登錄到系統,也即不爲該用戶指定可執行的登錄外殼程序和可用的用戶宿主目錄。我們可以先用adduser postfix 添加用戶再編輯/etc/passwd文件中的相關條目如下所示:

postfix:*:12345:12345:postfix:/no/where:/no/shell

最後執行安裝腳本安裝postfix

[root@test postfix-20010228-pl04]# ./INSTALL.sh

對于安裝腳本的問題,可以統統回車確定。

3.配置postfix

安裝完postfix後,就可以編輯/etc/postfix/main.cf文件來配置postfix了,關于如何配置

postfix,可以參考本站解決方案中的相關文章來獲取更多的信息。

唯一需要補充的是,爲了告訴postfix采用sasl來進行SMTP的用戶認證,我們必須在/etc/postfix/main.cf文件的最後添加以下幾行:

smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination reject

broken_sasl_auth_clients = yes

smtpd_sasl_security_options = noanonymous

說明如下:

smtpd_sasl_auth_enable:告訴SMTP客戶,該SMTP服務器需要進行用戶認證。

smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination

reject:僅僅中繼通過SMTP認證的客戶端郵件,以及接收本postfix爲最後一站的郵件。

broken_sasl_auth_clients = yes:有一些Microsoft 的SMTP客戶端,比如Outlook Express 4.X采用的是非標准的SMTP認證協議,將該選項設置爲yes可以解決這類不兼容問題。

smtpd_sasl_security_options = noanonymous:控制本地SMTP認證所采用的機制,這裏是允許任何非匿名認證方法。

4.配置SASL

進入/usr/lib/sasl/目錄,用touch新建這樣一個文件:

[root@test sasl]# touch smtpd.conf

在該文件中加入以下內容:

[root@test sasl]# more smtpd.conf

pwcheck_method:pam

也就是指定通過PAM來進行用戶認證。

5.配置PAM

進入/etc/pam.d/目錄,用touch新建這樣一個文件:

[root@test pam.d]# touch smtp

在該文件中加入如下內容:

[root@test pam.d]# more smtp

#%PAM-1.0

auth required /lib/security/pam_stack.so service=system-auth

account required /lib/security/pam_stack.so service=system-auth

也即和/etc/pam.d/pop文件的內容是一致的。

6.修改/etc/shadow文件權限

因爲PAM最終要去讀取/etc/shadow文件的內容來進行用戶認證,但是/etc/shadow文件

權限是設置爲只有root用戶可以讀寫,而我們的postfix是運行在postfix用戶權限之下,所以我們要合理的設置/etc/shadow文件權限,以便讓pam可以讀取其內容。

執行以下命令,讓root組也可以讀取shadow:

[root@test /etc]# chmod 640 /etc/shadow

然後再將postfix用戶加入root組,采用以下命令:

[root@test /etc]# usermod -G root postfix

7.啓動postfix

執行

[root@test /etc]# postfix start

這樣,一個支持SMTP認證的postfix就開始工作了

概述:   全世界範圍內的SMTP服務器與日俱增,但是這些SMTP服務器都有一個與生俱來的缺點,那就是沒有任何的認證機制。因爲在設計這些SMTP服務器時,全世界範圍的Internet主機還不是很多,彼此間都有很高的可信任級別,所以沒有全面考慮安全性問題。這種現象也可以在別的Internet協議中看到。   正是因爲SMTP通訊過程缺乏認證機制,以及ip欺騙的容易實現,導致了以下兩個方面的問題:SMTP服務器無法確認SMTP客戶機的合法性;SMTP客戶機也無法確認SMTP服務器的合法性。從而也就導致了用戶可以不經過認證就發送郵件,用戶可以冒名發送郵件,以及垃圾郵件的泛濫。   Postfix設置了好多選項讓網絡管理員來限制服務器資源的使用,以及確定用戶的合法性。但遺憾的是,這些認證機制都是基于ip地址或者客戶DNS信息。在客戶ip地址固定的情況下,這些方法或許有一定的作用(雖然還是無法解決冒名發送郵件),但是在客戶ip地址不固定的情況下,就很難通過這種機制來進行限制了。當然,現在也有一些其他的技術,比如POP-before-SMTP(在發信前收信)來解決這個問題,但是這需要運行額外的服務程序。並且用戶在發行之前一定要先收信,這或多或少都會帶來一些不方便。   好在有簡單認證安全層(SASL),它提供了模塊化的SMTP認證擴展,因此SMTP就可以在SASL之上構建自己的SMTP認證,因爲可以通過開放式的機制和協議來建立認證會話。另外,SASL在實現了對PLAIN以及CRAM-MD5加密等協議的基礎上,還提供了多種認證方法,比如通過Kerberos、用戶數據庫、passwd文件、PAM等。這樣,SMTP程序不需要支持這些認證方法就可以實現多種認證方式。並且,SMTP在用戶經過成功認證以後同樣可以定義自己的訪問策略來對用戶訪問進行控制。   當然,首先我們必須保證該SMTP服務器能夠提供對SASL的支持:P)   需求:   首先要保證您的postfix版本是snapshot-20000507及其以上的版本,從而保證postfix對SASL的支持。強烈建議您升級至postfix-20010228及其以上版本。可以從www.postfix.org下載postfix的源代碼包,在測試過程中我們使用的是postfix-20010228-pl04.tar.gz。   然後,要保證您的SASL的版本是1.5.5及其以上版本,因爲已經有報告稱這些版本的SASL可以和postfix工作得很好。可以從ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/下載SASL,在測試過程中我們使用的是cyrus-sasl-1.5.24-17.rpm和cyrus-sasl-devel-1.5.24-17.rpm,即RedHat7.1自帶的SASL的rpm包。   另外說明一點,整個測試過程都是在RedHat7.1中進行的。   步驟:   1.檢查系統中是否安裝了cyrus-sasl-1.5.24   執行以下命令查看系統中是否安裝了cyrus-sasl:   rpm –qa |grep cyurs   如果您看到以下提示,則說明已經安裝了cyrus-sasl-1.5.24-17和cyrus-sasl-devel-1.5.24-17:   [root@test bye2000]# rpm -qa |grep sasl   cyrus-sasl-devel-1.5.24-17   cyrus-sasl-1.5.24-17   否則,請用rpm –ivh 命令先安裝所需sasl-cyrus包。   2.編譯postfix   首先,下載postfix-20010228-pl04.tar.gz,然後解開源代碼包:   [root@test /tmp]# tar xvzf postfix-20010228-pl04.tar.gz   命令執行完後,會生成postfix-20010228-pl04目錄,然後進入該目錄:   [root@test /tmp]# cd postfix-20010228-pl04   接下來,依次執行以下命令編譯postfix:   [root@test postfix-20010228-pl04]# make tidy   [root@test postfix-20010228-pl04]#make makefiles CCARGS='-DUSE_SASL_AUTH -I/usr/include' AUXLIBS='-L/usr/lib -lsasl'   [root@test postfix-20010228-pl04]# make   建立一個新用戶「postfix」,該用戶必須具有唯一的用戶id和組id號,同時應該讓該用戶不能登錄到系統,也即不爲該用戶指定可執行的登錄外殼程序和可用的用戶宿主目錄。我們可以先用adduser postfix 添加用戶再編輯/etc/passwd文件中的相關條目如下所示:   postfix:*:12345:12345:postfix:/no/where:/no/shell   最後執行安裝腳本安裝postfix   [root@test postfix-20010228-pl04]# ./INSTALL.sh   對于安裝腳本的問題,可以統統回車確定。   3.配置postfix   安裝完postfix後,就可以編輯/etc/postfix/main.cf文件來配置postfix了,關于如何配置   postfix,可以參考本站解決方案中的相關文章來獲取更多的信息。   唯一需要補充的是,爲了告訴postfix采用sasl來進行SMTP的用戶認證,我們必須在/etc/postfix/main.cf文件的最後添加以下幾行:   smtpd_sasl_auth_enable = yes   smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination reject   broken_sasl_auth_clients = yes   smtpd_sasl_security_options = noanonymous    說明如下:   smtpd_sasl_auth_enable:告訴SMTP客戶,該SMTP服務器需要進行用戶認證。   smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination   reject:僅僅中繼通過SMTP認證的客戶端郵件,以及接收本postfix爲最後一站的郵件。   broken_sasl_auth_clients = yes:有一些Microsoft 的SMTP客戶端,比如Outlook Express 4.X采用的是非標准的SMTP認證協議,將該選項設置爲yes可以解決這類不兼容問題。   smtpd_sasl_security_options = noanonymous:控制本地SMTP認證所采用的機制,這裏是允許任何非匿名認證方法。   4.配置SASL   進入/usr/lib/sasl/目錄,用touch新建這樣一個文件:   [root@test sasl]# touch smtpd.conf   在該文件中加入以下內容:   [root@test sasl]# more smtpd.conf   pwcheck_method:pam   也就是指定通過PAM來進行用戶認證。   5.配置PAM   進入/etc/pam.d/目錄,用touch新建這樣一個文件:   [root@test pam.d]# touch smtp   在該文件中加入如下內容:   [root@test pam.d]# more smtp   #%PAM-1.0   auth required /lib/security/pam_stack.so service=system-auth   account required /lib/security/pam_stack.so service=system-auth   也即和/etc/pam.d/pop文件的內容是一致的。   6.修改/etc/shadow文件權限   因爲PAM最終要去讀取/etc/shadow文件的內容來進行用戶認證,但是/etc/shadow文件   權限是設置爲只有root用戶可以讀寫,而我們的postfix是運行在postfix用戶權限之下,所以我們要合理的設置/etc/shadow文件權限,以便讓pam可以讀取其內容。   執行以下命令,讓root組也可以讀取shadow:   [root@test /etc]# chmod 640 /etc/shadow   然後再將postfix用戶加入root組,采用以下命令:   [root@test /etc]# usermod -G root postfix   7.啓動postfix   執行   [root@test /etc]# postfix start   這樣,一個支持SMTP認證的postfix就開始工作了
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有