开源网站云查杀方案,搭建自己的云杀毒 -搭建ClamAV服务器
开源网站云查杀方案,搭建自己的云杀毒
搭建ClamAV服务器
1 前言:
在上一篇我们已经演示了整个方案,传送门《开源网站云查杀方案,搭建自己的云杀毒》:https://www.cnblogs.com/dengjiahai/p/12437360.html#4514940。接着我就写一个文章来演示如何搭建ClamAV服务器,开始之前,我先说说关于陆陆续续收到一些同行的交流对话和疑问的这个问题,发表一些我个人的见解和看法:
- 在服务器安装杀软它不香嘛?为甚搞那么复杂?
答:的确,在服务器直接安装杀软也是一种防护方案。我们之所以弄了这个东西,肯定是因为杀软有一些地方满足不了我们的要求。我简单的说说我们能想到的应用情形。如果你看完了,觉得该方案对你有帮助,那么你可以继续往下探讨,如果你觉得毫无意义。那么说明这个东西满足不了你们,可以不用往下看了。
首先,来个简单的例子说明我们应用的情形。我们要做的其实就是类似VirSCAN这个网站的一些功能:传送门:https://www.virscan.org/antivirusvendor/clamav
我们要主要是考虑到一下几个方面,所以做出了这个选择。
• 我们主要是扫描,而不是为了杀毒,简单的说,我们是想从源头上面去防护。而不是等病毒入侵了,我们才去杀毒。你要知道,我们这个方案是不杀毒的,只是扫描病毒。根据clamav的解释,杀毒对于上传附件来说是毫无意义的,因为它既然检查出来病毒,把一些关键的文件杀掉了,剩下的文件应该也不能用了,即使能用,你信得过嘛?
• 我们在实验中发现,部分压缩包病毒下载到服务器,杀软居然不去扫描,手动一扫,病毒就出来了,具体什么原因我也不了解,当然不排除我设置的不对,但是我都安装的时候都是直接默认的。还有就是杀软往往清楚病毒还要重启才能清楚干净,很多时候,你体检电脑完了,杀软是不是提醒你重启电脑?
•有密码的压缩包应该是没有办法扫描的,但是我们上传附件的时候,我们是在流文件里面用密码打开压缩包,然后去扫描,是不是安全很多。而不是等用户直接在服务器解压到本地才触发杀软。
• 还有就是,杀软无法即使把杀毒情况反馈给用户,我们考虑这个方案的时候,主要是考虑附件上传的情况,如果说我是用户,并且我是无意去攻击的,然后我却发现,我上传了附件之后,系统提示我成功了,好,然后我安心的去干其他事情了,然后服务器才会去杀毒。把文件干掉。这个时侯用户完全不知情啊。我的东西为什么没了呢,你看像很多邮箱上传附件,都会立即查杀,并告知你结果,如果查杀不通过,不会给你发送的。
• 杀软还有一个局限是必须安装在本地服务器,假如服务器压力很大,杀毒扫描据我所知也比较耗费性能,据我以前的旧电脑的体验,特别是内存不是很足的时候,在线看视频,电脑很卡,把杀软推出后,居然快了很多。所以我们就用这个分布式部署的方案,单独一个服务器扫描。
• ClamAV的®是邮件网关扫描软件的开源标准。
• 高性能,ClamAV包括一个多线程扫描程序守护程序,用于按需文件扫描和自动签名更新的命令行实用程序。
• ClamAV支持多种文件格式,文件和存档解压缩以及多种签名语言。
• 开源
我们主要是考虑以上情形。工作原理我们主要是
如果看完了上边的,你觉得该方案对你有用,那么你可以继续关注,倘若该方案对你而言毫无意义。那么你可以无需看后面的了。
2 准备工作
ClamAV官网:https://www.clamav.net/
ClamAV文档:https://www.clamav.net/documents/clam-antivirus-user-manual
ClamAV 源码:https://github.com/Cisco-Talos/clamav-devel
目前最新版是0.102.2.我关注过官方,最近一直有更新维护的,而且挺频繁的。
2.1 ClamAV服务器要求
操作系统:我演示使用的是windows 10.(官方支持很多系统Unix / Linux / macOS/ Debian/ Ubuntu/Redhat/CentOS)等,源码是开源的,如果不支持,自行编译。
硬件配置:要求很低,感觉绝大部分电脑都能支持,至于在生产环境,则要根据自己的使用情况具体分配资源。
3 安装服务
官方文档应该自己看一遍,有个整体了解。
第一步,我们先去官网下载安装包或者压缩包。如果是下载安装包,则界面安装的方式安装。如果是压缩包,则解压到响应的目录即可。我演示的是使用ClamAV Windows Installer进行安装。首先下载安装包,下载地址: http : //www.clamav.net/downloads/production/ClamAV-0.102.1.exe。可能网络比较慢,如果网络太慢可能需要跳板下载。我公司的测试网络还是可以的。
右键单击ClamAV-0.102.1.exe并选择以管理员身份运行,切记要用管理员身份,否则可能安装失败,或者运行不正常。您可能会收到“ Windows保护您的PC”的警告消息。选择更多信息,然后选择总是允许。
选择I accept the agreement并单击Next。
Next再点击一次。如果您删除了以前安装的ClamAV,则可能会收到提示“文件夹...已存在...”。如果这样做,请选择Yes。点击Install。就开始安装。
到此,ClamAV服务器就安装完成了。
4 配置
首先我们要把conf_examples文件夹里面的clamd.conf.sample和freshclam.conf.sample两个文件复制到根目录外面,并用记事本或者文本编辑工具打开配置文件。
首先看clamd.conf文件
找到Example 这一行。把它注释掉。否则运行会报错。
接着找到以下几行,把前面的注释(#)去掉
#LogFile "C:\Program Files\ClamAV\clamd.log"
#PidFile "C:\Program Files\ClamAV\clamd.pid"
配置数据库,我这里是默认路径,如果你需要更高数据库路径自行设置对应的盘符目录。后面需要把病毒库放在这里。
#DatabaseDirectory "C:\Program Files\ClamAV\database"
设置服务器端口,默认3310端口
#TCPSocket 3310
设置监听地址,可以设置多个地址。支持IPv6
#TCPAddr 127.0.0.1
这些是必须的配置,更多其他配置请自己根据配置文件的说明,按需开启。
接着配置freshclam.conf,这个主要是对病毒库的更新。
#注销Example 一行
#DatabaseDirectory "C:\Program Files\ClamAV\database"
#UpdateLogFile "C:\Program Files\ClamAV\freshclam.log"
#DatabaseMirror database.clamav.net
#PidFile "C:\Program Files\ClamAV\freshclam.pid"
病毒库地址,如果自己搭建镜像,则可以使用自己的镜像。
#DatabaseCustomURL http://myserver.example.com/mysigs.ndb
其他配置请自己按需开启。注意最好能及时的更新病毒库,否则新型病毒无法扫描出来。
5 使用
5.1 安装病毒库
在服务安装目录下面按ctrl +鼠标右键,在此处打开命令窗口,主要要用管理员打开,如果你打开的不是管理员身份,可以通过windows键,查找cmd,然后右键->管理员身份运行。进入到服务安装目录,执行 freshclam.exe.等待安装完成。
安装完成打开database文件夹。会看到三个病毒库。
如果你的服务器网络不通,可以自己搭建镜像,亦或自己手动下载病毒库。地址:https://www.clamav.net/downloads#collapseCVD
下载完成放到database里面去。
病毒库默认12小时更新一次,如果需要更改,自行更改配置文件。
5.2 使用服务
Clamscan
扫描指定位置的文件。如下是扫描了一个a.zip 文件。发现了一个病毒
有太多选项无法在此处列出所有选项。因此,我们将仅介绍一些常见且更有趣的内容:
--log=FILE -将扫描报告保存到FILE
--database=FILE/DIR -从FILE加载病毒数据库或从DIR加载所有受支持的db文件
--official-db-only[=yes/no(*)] -仅加载官方签名
--max-filesize=#n -大于此大小的文件将被跳过并认为是干净的
--max-scansize=#n -每个容器文件要扫描的最大数据量
--leave-temps[=yes/no(*)]-不要删除临时文件
--file-list=FILE -从FILE扫描文件
--quiet -仅输出错误消息
--bell -检测病毒的声音
--cross-fs[=yes(*)/no] -扫描其他文件系统上的文件和目录
--move=DIRECTORY -将受感染的文件移至目录
--copy=DIRECTORY -将受感染的文件复制到目录中
--bytecode-timeout=N -设置字节码超时(以毫秒为单位)
--heuristic-alerts[=yes(*)/no] -切换启发式警报
--alert-encrypted[=yes/no(*)] -提醒加密的档案和文件
--nocerts -在PE文件中禁用Authenticode证书链验证
--disable-cache -禁用对扫描文件的哈希和进行缓存和缓存检查
Clamdscan
需要启动clamd服务,扫描速度快;
若不使用-r 参数指定路径,默认递归扫描子目录;
定时杀毒
#定制任务计划,凌晨3:00开始更新病毒库,3:30开始杀毒,扫描/home目录以及子目录文件,将扫描出来的病毒文件直接删除,并保存杀毒日志
签名测试与管理
许多工具可用于测试和管理签名。值得注意的是以下内容:
clambc -专门用于测试字节码
sigtool -用于一般签名测试和分析
freshclam -用于将签名数据库集更新为最新版本
还有更多的更能就不一一列举,如果我都全部列举了,那么跟翻译官方文档有什么区别。而且不是我们本文的关键。
如果上面的用法你都不会,那么没关系,我们都可以不用,但是,下面的用法一定要会,因为直接决定我们的方案成功与否
clamd是一个多线程守护程序,它使用libclamav扫描文件中的病毒。可以通过修改将扫描行为完全配置为适合大多数需求clamd.conf。
由于clamd需要一个病毒库运行,我们建议运行之前设置的ClamAV的官方签名clamd使用freshclam。
该守护程序通过侦听在中指定的套接字上的命令来工作clamd.conf。Unix本地套接字和TCP套接字都支持侦听。
重要说明: clamd当前不保护或认证通过TCP套接字的通信,这意味着它将接受来自任何来源的任何以下所有命令。因此,我们强烈建议您在设置clamd实例时遵循最佳联网实践。即不要将您的TCP套接字暴露给Internet。
这是clamd套接字接受的命令的快速列表。
PING
VERSION
RELOAD
SHUTDOWN
SCAN 文件/目录
RAWSCAN 文件/目录
CONTSCAN 文件/目录
MULTISCAN 文件/目录
ALLMATCHSCAN 文件/目录
INSTREAM
FILDES
STATS
IDSESSION, END
与大多数ClamAV工具一样,您可以通过调用以下命令来查找有关这些工具的更多信息:
上面一段是直接翻译官方的,是不是看的蒙?看不懂也没关系。你只要会一句命令就行了。
Clamd
在服务根目录用管理员打开cmd,输入Clamd.exe或者Clamd
如图所示就是已经成功启动服务了,然后就可以去我们的代码调试了。通过WebAPI,我们可以看到ClamAV 的版本。这就说明方案也使用成功了。然后你就可以愉快的实现自己的云杀毒业务了。
6 常见问题排查
- 启动服务失败?防火墙是不是禁止端口?
- 启动服务失败?是否用管理员安装?
- 扫描病毒文件总是提示没有病毒?可能改病毒没有录入,也有可能你没有拉病毒库?
- 启动服务失败?配置文件是否配置好?
- 程序连接不上杀毒服务器?IP和端口是否一致?
代码已经开源,代码托管到Gitee。传送门:https://gitee.com/Jesai/JESAI.ClamAV.NetScanner.git