目的: 搭建单独的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,至少我是这样的。
阅读(2871) | 评论(2) | 转发(0) |