以前自已搭了一套postfix+dovecot邮件系统,加了一个域名,自已的配置不是很多,然后弄完,试了试可以正常发信,然后就扔一边了,半个月后,上去一看,哎呀,几十万封的信在队列里,postqueue -p一看,全是垃圾邮件,原来垃圾邮件扫到了端口,把我当成垃圾信的转发服务器了!
NND,这肯定不行啊,这样我的域名和IP没法要了,赶紧处理吧,于是在网上查了一下资料,然后自已整理了一下,测试,半天时间过去了,终天在解决了表数据查询的语句后,成功完成限制规则:
1、本地用户发信,必须经过验证才能发信
2、外域发往本地的信,不需验证,成功发信
3、外域发往外域的信,阻止
在这先说明一下,在postfix里的mysql:后边的文件sql语名中,要用到用户名,域名或邮件地址的判断(where)条件,对应关系是这样的 %s , %u username, %d domainame
相关的设置条件为
main.cf
- smtpd_recipient_restrictions = permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated, reject_unauth_destination, reject_unknown_sender_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_pipelining, permit
permit_mynetworks 选顶可以不要,因为此项可以排除部分网段,类似于白名单,不需验证等
- ####################################### SENDER MISMATCH #########################
- smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_user_maps.cf
- smtpd_reject_unlisted_sender = yes
- smtpd_sender_restrictions = reject_sender_login_mismatch, reject_authenticated_sender_login_mismatch, reject_unauthenticated_sender_login_mismatch
此部分主要是设置对发件人的验证,完成上述三点功能
然后就是这个maps表的编写了,这块费了我不少时间,其实它的作用就是在你的数据中查找是不是存在此用户,如果有,就会匹配相关的功能,可以验证发信,可以做为收件人把信顺利收下来
下边是我的配置内容,供参考格式
- user = xxxx
- password = xxxx
- hosts = xxx.xxx.xxx.xxx
- dbname = xxxx
- query = SELECT concat(b.aliasname , '@', a.aliasname) FROM aaa a, bbb b, cccc c, ddd d WHERE b.aliasname='%u' AND a.aliasname='%d' AND c.domainid=b.domainid AND c.userid=b.userid AND a.domainid=c.domainid AND b.domainid=d.domainid AND d.status=0 AND c.status=0
这里就看出 %u %d %s的作用了,明白它的意思,你就知道怎么写sql语句了
阅读(7600) | 评论(0) | 转发(0) |