★原文转载自openbsd版zenz.hu的《qmail+vpopmail邮件过滤(练习篇)》★ <br>
最近正在研究qmail+vpopmail的邮件过滤,找了很多相关的软件,都觉得不好,主要是讨厌他们的依附关系太复杂,有的甚至还要对qmail进行改动,嫌太麻烦。 <br>
然后在inter7.com发现了eps,目前是0.5。研究了一下,搞了一个相当暴力的过滤方法出来,有兴趣的就看看吧。 <br>
<br>
练习的前提是qmail+vpopmail已经装好,而且正常运作。 <br>
<br>
首先当然是下载eps了,在Inter7.com下载。展开源代码包后 <br>
make <br>
make install <br>
就可以了。 <br>
<br>
然后写了这个小程序mime.c <br>
<br>
#include <stdio.h> <br>
#include <eps.h> <br>
<br>
char *exts[]={ <br>".vbs", <br>".scr", <br>".exe", <br>".com", <br>NULL <br>
}; <br>
<br>
int efilter_check_mime(struct mime_t *m) <br>
{ <br>int i = 0; <br>int p = 0; <br>
<br>if (!(m->filename)) <br>return 0; <br>
<br>for (i = 0; exts[i]; i++) { <br>if (m->filename) { <br>p = strstr(m->filename, exts[i]); <br>if (p) { <br>return 1; <br>} <br>} <br>} <br>
<br>return 0; <br>
} <br>
<br>
<br>
<br>
int main(int argc, char *argv[]) <br>
{ <br>int ret = 0; <br>char *l = NULL; <br>struct mime_t *m = NULL; <br>struct header_t *h = NULL; <br>struct eps_t *eps = NULL; <br>
<br>if (argc < 2) <br>
eps = eps_begin(INTERFACE_STDIN, NULL); <br>
else <br>
eps = eps_begin(INTERFACE_FILENAME, argv[1]); <br>
<br>
if (!eps) <br>
return 1; <br>
<br>
/* <br>
Examine headers for Content/MIME information <br>
Pass information off to EPS' internals <br>
*/ <br>
for (h = eps_next_header(eps); h; h = eps_next_header(eps)) { <br>
if ((h->name) && (h->data)) <br>eps_header_internal(eps, h); <br>} <br>
<br>/* <br>..skip the message body since we're not interested in <br>it. <br>*/ <br>for (l = eps_next_line(eps, BREAK_STOP); l; l = eps_next_line(eps, BREAK_STOP)); <br>
<br>eps_init_mime(eps); <br>
<br>for (m = eps_next_mime(eps); m; m = eps_next_mime(eps)) { <br>if (efilter_check_mime(m)) <br>printf("rejected"); <br>} <br>
<br>eps_end(eps); <br><br>return 0; <br>
} <br>
<br>
功能挺简单的,就是检查电子邮件的附件,但凡发现.vbs .scr .exe .com的附件,都提示rejected。编译,安装。 <br>
gcc -g -I/usr/include/eps -L/usr/lib -DVERSION="1.2" -o mime mime.c -leps <br>
复制到~vpopmail/bin并chown vpopmail.vchkpw mime <br>
<br>
然后建立一个filter.sh文件,也是在~vpopmail/bin目录,属主和mime一样了。 <br>
#!/bin/sh <br>
ISVIRUS=`/var/vpopmail/bin/mime` <br>
if [ X"${ISVIRUS}" != X"rejected" ]; then <br>/var/vpopmail/bin/vdelivermail '' bounce-no-mailbox <br>
fi <br>
<br>
最后修该~vpopmail/domains/yourdomain/里面的.qmail-default文件 <br>
把原本为 <br>
| /var/vpopmail/bin/vdelivermail '' bounce-no-mailbox <br>
改成 <br>
| /var/vpopmail/bin/filter.sh <br>
就可以了。 <br>
<br>
实现的手段很暴力,凡是附件中含有.vbs .exe .com .scr的都整个邮件drop掉了。没有办法啦,我还没有全面的研究清楚eps的功能,而且它还没有发展完全。不过先玩玩啦。 <br>
|