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

使用Postfix系統做外發SMTP服務器的問題

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

目的: 搭建單獨的SMTP外發服務器,從正常的郵件服務器中獨立出來

要求:關閉Openrelay,沒有經過身份驗證不能使用smtp服務器發送郵件(本域也免談)

狀態: 以前工作進展程度,SMTP+身份驗證正常工作,沒有身份驗證不能發送郵件給域內或域外用戶。(通過把$mydestination $relay_domains設置成空實現的),存在問題,當用戶發送給本域用戶時,無法立即發現用戶是否實際存在。需要等待一段時間後才能收到smtp的退信。

改進要求: 如果用戶發郵件給本域不存在用戶,系統立即提示用戶不存在,且不通過驗證不能發送郵件給任何人,包括域內用戶。

改進方法:

增加relay_recipient_maps,但是這個工作需要依賴于relay_domains,對于郵件系統的默認配置,如果存在 relay_domains,那麽系統將會自動接受relay_domains的郵件,無論用戶是否提供身份驗證信息。

修改方法:

因爲我的系統使用了mysql,FC4默認的postfix還不支持postfix,所以要重新編譯,在互聯網上逛,發現這個編譯方法很方便,延續了我系統使用rpm包的習慣:

rpm -ivh postfix-2.1.6-1.src.rpm

cd /usr/src/redhat/SOURCES

bash

export POSTFIX_MYSQL_REDHAT=1

export POSTFIX_SASL=2

export POSTFIX_TLS=1

sh make-postfix.spec

exit

cd /usr/src/redhat/SPECS

rpmbuild -ba postfix.spec

cd /usr/src/redhat/RPMS/i386

這樣就搞定了,呵呵

在/etc/postfix/main.cf中增加:

==============

relay_domains = mysql:/etc/postfix/mysql-relay.cf

relay_recipient_maps = mysql:/etc/postfix/mysql-user.cf, mysql:/etc/postfix/mysql-virtual.cf

==============

上面兩行關于mysql的配置,根據系統的不同,略有不同, mysql-relay.cf主要是查找 那些域名是屬于 域內的(發往自己郵件服務器的)

mysql-user.cf mysql-virtual.cf 這兩個文件是user表,其實就是 自己郵件服務器上的所有郵件地址列表。

修改:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient, reject

最後增加一個 reject,我找了好久,最後發現增加一個 reject 就實現我的要求了,具體說明參見postfix的說明。

PS: 用過postfix後,就會不知不覺的放棄其他MTA,至少我是這樣的。

目的: 搭建單獨的SMTP外發服務器,從正常的郵件服務器中獨立出來   要求:關閉Openrelay,沒有經過身份驗證不能使用smtp服務器發送郵件(本域也免談)   狀態: 以前工作進展程度,SMTP+身份驗證正常工作,沒有身份驗證不能發送郵件給域內或域外用戶。(通過把$mydestination $relay_domains設置成空實現的),存在問題,當用戶發送給本域用戶時,無法立即發現用戶是否實際存在。需要等待一段時間後才能收到smtp的退信。      改進要求: 如果用戶發郵件給本域不存在用戶,系統立即提示用戶不存在,且不通過驗證不能發送郵件給任何人,包括域內用戶。   改進方法:      增加relay_recipient_maps,但是這個工作需要依賴于relay_domains,對于郵件系統的默認配置,如果存在 relay_domains,那麽系統將會自動接受relay_domains的郵件,無論用戶是否提供身份驗證信息。      修改方法:   因爲我的系統使用了mysql,FC4默認的postfix還不支持postfix,所以要重新編譯,在互聯網上逛,發現這個編譯方法很方便,延續了我系統使用rpm包的習慣:   rpm -ivh postfix-2.1.6-1.src.rpm      cd /usr/src/redhat/SOURCES      bash      export POSTFIX_MYSQL_REDHAT=1   export POSTFIX_SASL=2   export POSTFIX_TLS=1      sh make-postfix.spec      exit      cd /usr/src/redhat/SPECS      rpmbuild -ba postfix.spec      cd /usr/src/redhat/RPMS/i386   這樣就搞定了,呵呵      在/etc/postfix/main.cf中增加:    ============== relay_domains = mysql:/etc/postfix/mysql-relay.cf   relay_recipient_maps = mysql:/etc/postfix/mysql-user.cf, mysql:/etc/postfix/mysql-virtual.cf    ==============   上面兩行關于mysql的配置,根據系統的不同,略有不同, mysql-relay.cf主要是查找 那些域名是屬于 域內的(發往自己郵件服務器的)   mysql-user.cf mysql-virtual.cf 這兩個文件是user表,其實就是 自己郵件服務器上的所有郵件地址列表。   修改:   smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient, reject    最後增加一個 reject,我找了好久,最後發現增加一個 reject 就實現我的要求了,具體說明參見postfix的說明。      PS: 用過postfix後,就會不知不覺的放棄其他MTA,至少我是這樣的。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有