作者amaki.bbs@luna.twbbs.org (羊愛吃松茸) 看板: plan
標題Re: [功能]擋信白名單
時間月下夜想 (Sat, 05 Jul 2003 00:24:35 +0800 (CST)) Updated: 2004/07/23
某些人的信件流量很大,很喜歡把站外的文章、小說、日記通通寄回自己信任的
站台,針對這類流量大,且站長認可(通常是私交甚好的)的id,可以採用類似
mail.acl方式設計擋信白名單的功能。
另外有人被擋信後,常常會詢問是不是POP3或是SMTP掛點,也索性讓mail.acl在
Announce裡同步。
在收信無限名單上的,來信一律不檢查是否超過篇數
: global.h
#define MAIL_ACLFILE "etc/mail.acl" /* 收信白名單 */
#define UNMAIL_ACLFILE "etc/unmail.acl" /* 收信黑名單 */
+ #define UNLIMIT_ACLFILE "etc/unlimit.acl" /* 收信無限名單 */
: bmtad.c:struct Agent
typedef struct Agent
{
struct Agent *anext;
int sock;
int sno;
int state;
int mode;
int letter;
+ int unlimit;
unsigned int ip_addr;
: bmtad.c
static ACL_t *mail_root = NULL; /* MAIL_ACLFILE 的 acl_root */
static ACL_t *unmail_root = NULL; /* UNMAIL_ACLFILE 的 acl_root */
+ static ACL_t *unlimit_root = NULL; /* UNLIMIT_ACLFILE 的 acl_root */
: bmtad.c:main()
mail_root = acl_load(MAIL_ACLFILE, mail_root);
unmail_root = acl_load(UNMAIL_ACLFILE, unmail_root);
+ unlimit_root = acl_load(UNLIMIT_ACLFILE, unlimit_root);
...
...
if (state & SS_CONFIG)
{
state ^= SS_CONFIG;
mail_root = acl_load(MAIL_ACLFILE, mail_root);
unmail_root = acl_load(UNMAIL_ACLFILE, unmail_root);
+ unlimit_root = acl_load(UNLIMIT_ACLFILE, unlimit_root);
}
: bmtad.c:mta_from()
if (!(ap->mode & (AM_VALID | AM_BBSADM)) && acl_spam(head, tail))
{
tail[-1] = '@';
agent_log(ap, "SPAM-M", head);
return NULL;
}
+ ap->unlimit = acl_match(unlimit_root, head, tail);
tail[-1] = '@';
: bmtad.c:cmd_mail()
if (acl_spam(user, domain))
{
ap->xspam++;
ap->mode |= AM_SPAM;
agent_log(ap, "SPAM-M", ptr);
agent_reply(ap, "550 spam mail");
return;
}
+ ap->unlimit = acl_match(unlimit_root, user, domain);
: bmtad.c:mta_mailer()
/* --------------------------------------------------- */
/* check E-mail address for anti-spam first */
/* --------------------------------------------------- */
addr = ap->addr;
- if ((str = strchr(addr, '@')) && str_ncmp(addr, "mailer-daemon@", 14))
+ if (!ap->unlimit && (str = strchr(addr, '@')) &&
+ str_ncmp(addr, "mailer-daemon@", 14))
{
: admutil.c:a_xfile()
"收信白名單",
"收信黑名單",
+ "收信無限名單",
...
...
MAIL_ACLFILE,
UNMAIL_ACLFILE,
+ UNLIMIT_ACLFILE,
: etc/unlimit.acl
新增一個 unlimit.acl 檔案 (或從 BBS 上的 (0)Admin→(X)file 改也可以)
格式和 (un)mail.acl 完全相同
在名單上的地址可無限來信
註: 在無限名單上的地址還是要先通過黑白名單的檢查,
所以還是得在白名單上,但不在黑名單上
--
Origin: luna.twbbs.org