| 订阅 | 在线投稿
分享
 
 
 

使用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- 王朝网络 版权所有