如何通过iptables+p3scan+ClamAV实现病毒?

如何通过iptables+p3scan+ClamAV实现病毒?

资源:Linux下的杀毒软件:
Kaspersky Anti-Virus for Linux (AVPD) http://www.kaspersky.com/
Trophie Anti-Virus Daemon http://www.vanja.com/tools/trophie/
FRISK F-Prot Antivirus http://www.f-prot.com/
Clam Anti-Virus http://www.clamav.net

个人觉得,Linux下面的杀毒软件没有什么用处,除非是给服务器用,例如for mailserver等等。当然了,现在最头疼的还是通过邮件传播的病毒,如果这种邮件到了最终用户那里,就比较讨厌了,因为不是每个用户都会装个人杀毒软件,更少的人知道要去定期更新病毒库,以为有了杀毒软件就万事大吉了(看来用上电脑跟IT普及一点关系也没有~)。经常看见有些公司开始推出网关杀毒的产品,比较著名的有TrendMacro的VirusWall,要卖好多银子,买不起。但是最近有看到国内的厂商开始做,就估计有些基于Linux的开源软件可以利用了,于是Google。

主要是想通过网关的病毒邮件可以被截获。肯定有POP3的代理,或者还有SMTP代理,然后配合杀毒软件——思路肯定是这样的,没跑。

ClamAV 的站点上有3rd party software,有个 Pop3 Scan Daemon 引起了我的注意,一看,呵,that's what I want... 看了一下文档,基本明白,先利用iptables(注意,不能用ipchains,否则会出错,在ip_conntrack模块)重定向内网的Pop3请求到p3scan的端口,然后p3scan把收到的email存到临时文件夹,调用杀毒软件查一下,过滤结果的输出,没病毒放行,有病毒,就采取行动并发个警告邮件给你。


【需要】
1。iptables 这个肯定要的啦,什么?你的没有?绣逗吧,找你的光盘装上呗,什么?没有光盘?那去 rpmfind.net 或者 www.netfilter.org 吧
2。libpcre 这个是个用perl写的正则表达式解析器,应该用来分析病毒特征码的,反正我的linux没有,去 www.pcre.org 下,自己make
3。杀毒软件 上面那几个都支持,我这里用clamav

【安装】
略。不用说了吧,./configure make make install 罗嗦

【配置】
这里牵涉到几个方面的配置:
1。iptables 利用DNAT进行端口重定向,把110转向 /etc/p3scan/p3scan.conf 定义的端口,缺省是8110
iptables -t nat -A PREROUTING -p tcp --dport 110 -j REDIRECT --to-port 8110
2。杀毒软件的配置,这里我用的是ClamAV,在 /usr/loca/etc/clamav.conf 中比较重要的配置有:
User mail -- 这里要使用跟p3scan一样的用户,我用的是mail.mail
Scanmail -- 这个选项要打开,缺省是注释掉的,允许扫描email文件
ScanRAR -- 这个也打开吧,有些病毒附件是rar的
p3scan是连接clamd来杀毒的,因此在启动p3scan之前,请先启动clamd
3。p3scan的配置 p3scan.conf:
port 8110 -- 用缺省的好了,这个改了,记得iptables的重定向也要改
user -- 这个要跟 clamav一样
scanner -- 里面已经定义好了常用的几种杀毒软件,注意修改路径
virusregexp -- 这个选择与scanner对应的病毒正则式
template -- 这个是指定发给用户的病毒邮件通知
对应的一些目录:
# mkdir /etc/p3scan
# mkdir /var/run/p3scan
# mkdir -p /var/spool/p3scan/children
# mkdir -p /var/spool/p3scan/notify
要属于对应的mail用户
# chown mail.mail /etc/p3scan
# chown mail.mail /var/run/p3scan
# chown mail.mail /var/spool/p3scan
# chown mail.mail /var/spool/p3scan/children
# chown mail.mail /var/spool/p3scan/notify

【启动】
先启动 clamd,后启动p3scan,因为p3scan是调用clamdscan来查杀邮件的,可以放到rc.local里面去,clamd有自己的log,在/var/log/clamd/下,p3scan没有独立的log,写到syslog里面去的。

【病毒库更新】
/usr/local/bin/freshclam

【工作流程】
再重复一遍:
局域网客户收email-->
网络请求到达网关,被iptables重定向110-->8110到p3scan-->
p3scan取得服务器信息,收取邮件,然后将邮件保存在临时目录,调用clamdscan查毒-->
无毒,向局域网客户端发送电子邮件;有毒,构造病毒警告信发送给客户端

这个流程,你可以用p3scan -d 参数来看输出的debug信息


试用了一段时间,还不错,基本上我收到的病毒都滤掉了