Chinaunix首页 | 论坛 | 博客
  • 博客访问: 186053
  • 博文数量: 9
  • 博客积分: 1722
  • 博客等级: 上尉
  • 技术积分: 225
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-09 11:13
文章分类
文章存档

2012年(1)

2011年(5)

2010年(3)

分类: LINUX

2011-06-16 14:42:14

以前自已搭了一套postfix+dovecot邮件系统,加了一个域名,自已的配置不是很多,然后弄完,试了试可以正常发信,然后就扔一边了,半个月后,上去一看,哎呀,几十万封的信在队列里,postqueue -p一看,全是垃圾邮件,原来垃圾邮件扫到了端口,把我当成垃圾信的转发服务器了!
 
NND,这肯定不行啊,这样我的域名和IP没法要了,赶紧处理吧,于是在网上查了一下资料,然后自已整理了一下,测试,半天时间过去了,终天在解决了表数据查询的语句后,成功完成限制规则:
1、本地用户发信,必须经过验证才能发信
2、外域发往本地的信,不需验证,成功发信
3、外域发往外域的信,阻止
 
在这先说明一下,在postfix里的mysql:后边的文件sql语名中,要用到用户名,域名或邮件地址的判断(where)条件,对应关系是这样的 %s , %u username, %d domainame
 
相关的设置条件为
main.cf
  1. 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 选顶可以不要,因为此项可以排除部分网段,类似于白名单,不需验证等

 

  1. ####################################### SENDER MISMATCH #########################
  2. smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_user_maps.cf
  3. smtpd_reject_unlisted_sender = yes
  4. smtpd_sender_restrictions = reject_sender_login_mismatch, reject_authenticated_sender_login_mismatch, reject_unauthenticated_sender_login_mismatch

此部分主要是设置对发件人的验证,完成上述三点功能

 

然后就是这个maps表的编写了,这块费了我不少时间,其实它的作用就是在你的数据中查找是不是存在此用户,如果有,就会匹配相关的功能,可以验证发信,可以做为收件人把信顺利收下来

下边是我的配置内容,供参考格式

 

  1. user = xxxx
  2. password = xxxx
  3. hosts = xxx.xxx.xxx.xxx
  4. dbname = xxxx

  5. 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) |
给主人留下些什么吧!~~