qmail防止垃圾邮件方案

2006年03月13日 07:30 查看6909次 作者:   【
文章分类:unix系统
1, 安装qmail的时候增加smtp auth,这是大家都清楚的。这样避免了一些恶意的人随意使用你的服务器。
2, 配合smtp auth需要进行对ip地址的控制。比如对本地地址就不再限制其权限了。
3, 修改ucspi-tcp-x.xx的代码,编辑文件rblsmtpd.c。
原文件中的"rbl.maps.vix.com",修改为"relays.ordb.org"。编译后使它支持对垃圾邮件服务器的查询。其工作原理是将一台服务器的IP地址反向书写,然后向提供服务的服务器查询,如果被登记为垃圾服务器,就返回127.0.0.2,这样本机服务器就无法和垃圾服务器通信了,举例说明,某服务器1.2.3.4来连接你的服务器,于是查询4.3.2.1.relays.ordb.org,如果返回127.0.0.2就表明是垃圾服务器,否则就是正常的服务器。如果你自己的IP也能够返回127.0.0.2的话,就要赶快和www.ordb.org联系了,这说明你的服务器由问题了。
4, 编译了代码之后,修改smtpd.sh启动脚本。1002,1001对应qmaild的uid与gid.
/usr/local/bin/tcpserver -q -p -R -c 100 -u 1002 -g 1001 -x /vmail/etc/tcp.smtp.cdb 0 smtp /usr/local/bin/rblsmtpd -b -r 'relays.ordb.org:Open relay problem - see <URL:http://ordb.org/lookup/?host=%IP%>' /var/qmail/bin/qmail-smtpd /vmail/bin/vchkpw /usr/bin/true /bin/md5checkpw  /usr/bin/true 2>&1  &
5, 对qmail中增加badrcptto控制。
Qmail中缺省有一个配置文件叫做badmailfrom,字面意思很简单,只要列进这个列表就是要干掉的邮件。Mailfrom自然是源地址,同样我们可以控制目标地址,也就是对rcpt to的控制,所以把空文文件命名为badrcptto。
先修改一个简单的文件qmail-showctl.c,查找badmailfrom,复制该行,将badmailfrom改为badrcptto,编译后,就可以显示badrcptto控制文件中的内容了,不过这个修改中看不中用。
接下来修改qmail-smtpd.c,这就动真格的了。还是跟着badmailfrom走,查找bmf相关的单词,对应复制,并将其修改为brt。
并在void smtp_mail(arg) char *arg;函数中增加对brtcheck的调用。
  if (flagbarf) { err_bmf(); return; }
  if (relayclient) {
    --addr.len;
    if (!stralloc_cats(&addr,relayclient)) die_nomem();
    if (!stralloc_0(&addr)) die_nomem();
  }
  else
    if (!addrallowed()) { err_nogateway(); return; }
  if (!env_get("RELAYCLIENT") && brtcheck()) { err_brt(); return; }
  if (!stralloc_cats(&rcptto,"T")) die_nomem();
  if (!stralloc_cats(&rcptto,addr.s)) die_nomem();
  if (!stralloc_0(&rcptto)) die_nomem();
  out("250 ok\r\n");
}
6, 针对垃圾邮件的特征定制代码。
前人的经验介绍了不少,自己也不能太懒惰,也整理了一些不顺眼的邮件。
正常来讲,邮件地址的开头应该是字母,不应该是数字,尽管现在很多服务器能够支持全数字的邮件地址,所以我的做法是只要是@前只有数字的就横刀砍死。
我们来看这样一个地址 a@b.cn,尽管我不知道是不是有这样的域名,但是这应该是最短的邮件地址了,所以一个邮件地址至少有6个字节,低于的杀,a@b.c显然不合法,自然不用理会他的内容。邮件地址超短有问题,超长也不多好,定义一个长度,太长的同样有问题。
其实我想说的就是对发信人的地址进行分析,合法通过,非法干掉。
对应以上分析修改了qmail-smtpd.c的addrparse函数。

都是前人的经验,整理了一下,千万不要追究我侵权。
责任编辑:easy

给文章打分...

平均分:0.7(29 次)

-5 -4 -3 -2 -1 0 1 2 3 4 5
0

顶一下

发表我的见解...

  • 您的大名: 留空为匿名
  • 您的主页:
  • 您的邮箱: