【 以下文字转载自 twInstallBBS 讨论区 】
【 原文由 Jerr.bbs@bbs.ournet.idv.tw 所发表 】
※ 本文转录自 [Plan] 看板
作者: Jerr (Whisky on Rocks) 看板: Plan
标题: bbsmailq, 一个简单的挡广告信方法
时间: 23:04:40 民国九十年十二月十六日 星期日
-- bbsmailq 广告信自动筛检程式 (2001/12/16) --
*/ 前言 /*
这个方法姑且称作 bbsmailq 好了 :)
此方法仅配合 sendmail + bbsmail 使用,尚未在 postfix 与其他 smtp
daemon 上测试。如果是使用 Maple 3 的 bmtad 来负责 BBS user 的收
信,很抱歉此方法是不适用的。
*/ 原理 /*
因为当下寄发给 BBS user 的广告信已经具备了短时间内大量寄信给许多
user的特徵,因此依据这个特徵我们可以先将送进来的信 queue 住,等
待一段时间後去检查这段时间送进来的信与该使用者收到信的比例,超过
一个可忍受的范围则可视为广告信。
*/ 程式列表 */
以下的程式是以 bash(*) 为环境写成,由於我的 shell script 新学乍用
或许有不好的地方,欢迎来信讨论指正。
(*)注:由於我所使用的 RedHat Linux 是将 sh 硬连结至 bash 的,所以
程式开头都是写成 #!/bin/sh。以下是我的 bash 版本资讯:
GNU bash, version 2.05.9(1)-release (i386-redhat-linux-gnu)
Copyright 2000 Free Software Foundation, Inc.
程式部份:
dmailq.sh -- 负责判断信件寄送比例并寄发信件给 BBS user。
func.sh -- mailq.sh & dmailq.sh 共用的函式定义於此。
mailq.sh -- 是一只 mailer,负责 queue 住外来信件并分类。
sendlog.sh -- 将纪录档寄给指定的 e-mail 後删除旧的 log。
设定档:
smtp.acl -- 设定来信的 SMTP Server 黑/白名单。
纪录档:
dmailq.log -- 执行 dmailq.sh 之後产生的纪录档。
说明文件:
README -- 你正在阅读的这份文件。
以後或许还会根据网友的建议及指正修改这些程式,届时请莅网址:
http://www.csie.nctu.edu.tw/~gjchen/bbsmailq.html 下载更新。
*/ 步骤 /*
1) 在 BBS home 目录下建立一个暂存目录,在以下的程式里我预设的目录
是 /home/bbs/spool,可依据需要做更改。
2) 把取得的 bbsmailq.tgz 解开置於 spool 下,与上节程式列表比对,并
且 将 *.sh chmod 成可执行。
3) 修改 sendmail.cf,找到 Ruleset 0 原本可能如下的设定:
R$+.bbs < @ $=w . > $#bbsmail $: $1 bbs mail gateway
改成
R$+.bbs < @ $=w . > $#bbsmailq $: $1 bbs mail gateway
然後新增一个 Mbbsmailq 的设定。找到 Mbbsmail 的设定可能如下:
Mbbsmail, P=/home/bbs/bin/bbsmail, F=lsSDFMhPu, U=bbs, S=10, R=20/40,
A=bbsmail $u
增加一个 Mbbsmailq:
Mbbsmailq, P=/home/bbs/spool/mailq.sh, F=lsSDFMhPu, U=bbs, S=10, R=20/40,
A=mailq.sh $u ${client_addr}
重跑 sendmail。
4) 在 bbs 的 crontable 里增加一行定时执行 dmailq.sh 的设定:
0-59/3 * * * * spool/dmailq.sh # 3 分钟执行一次 dmailq.sh
如果你觉得效果不好可以试著放大执行的间隔时间。
如果你要定时检查清理 dmailq.log 可以在 crontable 中加入定
时执行 sendlog.sh 的设定:
0 0 * * * spool/sendlog.sh sysadm@localhost gjchen@csie.nctu.edu.tw
sendlog.sh 会将 dmailq.log 寄给 sysadm 和 gjchen@csie.nctu.edu.tw
之後将 dmailq.sh 删除。
5) dmailq.sh 的执行会简单的 log 在 dmailq.log 里,其中 UAVG 的比例
若大於等於 dmailq.sh 的 MAXUAVG,则不会呼叫 bbsmail 将信件送给
bbs user。如果你将 dmailq.sh 中的 AUTO_ADD_BLACK 设为 1 (预设)
则程式会自动将 UAVG >= MAXUAVG 的 SMTP Server 丢入黑名单。
6) smtp.acl 目前简单的提供了黑/白名单的机制,写法在 smtp.acl 中有
说明及范例。当 mailq.sh 判读SMTP Server在黑名单则不收此信件,当
SMTP Server 在白名单之列则直接呼叫 bbsmail 寄送邮件给 BBS user。
7) 程式臭虫回报及建议,请来信作者信箱 gjchen@csie.nctu.edu.tw。
*/ 後记 /*
由於我手边尚无使用 postfix 与 FireBird BBS 的机器可供测试,若有热心
的网友将此法用在 postfix 与 FB BBS 上请将不同的设定方法寄给我,谢谢。
*/ 其他 /*
附上开发环境的资料:
Linux 2.4.12 ( Redhat Linux 7.0 )
Sendmail 8.11.6
GNU bash, version 2.05.9(1)
Maple BBS 3.02
Joe's Own Editor v2.9.6
--