概述:
全世界範圍內的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就開始工作了