开源网站云查杀方案,搭建本身的云杀毒。git
最近公司的一个客户被勒索病毒攻击了,可悲的是,客户的文件附件太多并且大,没有作双机热备的功能。当客户发现病毒后,还第一时间格式化了服务器。那叫一个惨!!!!!初步分析致使中毒的缘由可能有:安全
1.内网传播,同一个局域网存在病毒?可是其余的电脑服务器没据说有中毒的状况,估计可能性少点。服务器
2.可能客户本身在服务器打开了某些文件致使中毒。这个就不清楚了,客户不想承担责任,就算有也不会认可的。async
3.多是网站的用户上传了病毒,或者病毒的压缩包。测试
不论如何,咱们的系统给客户的印象仍是不太好啊。网站
而后最近又开始作一个互联网的项目,其中有涉及到面向广大群众上传附件的功能。为了安全咱们就开始想安全方案。备份固然最好有。杀毒服务成熟的也不少。好比某60啦,某毒霸啦······spa
然而,问题来了,客户不想出钱。.net
公司也不想出钱。那怎么办?3d
本身研发一个?我以为可能性不大咯,这个东西,没有高端人才和雄厚的财力支撑,估计比较难研发。blog
聪明的你应该想到了。找开源方案。最开始我想的是,某60等本地的杀毒软件有没有接口能够调用呢,找了很久,发现用命令却是可行的。命令确实在本地的文件才好查杀。很差控制啊。
而我想要的倒是用户上传的时候就扫描了,实时反馈文件的查杀结果。
接着继续找方案······
好不容易终于发现思科的一个开源的东西。ClamAV,传送门:https://www.clamav.net/
第一眼看到这个网站,就以为逼格。而后在仔细研究了半天。就上路了。开始搭建本身的云查杀服务器。
文档什么的都有,就是英文的。并且更新也挺快的。最关键是开源的。
今天刚打完代码,代码开源在最后。具体使用文档和搭建服务器过程等我后续有空再写教程。
就看一波效果吧。有兴趣本身下代码研究。
服务器效果图:
代码项目结构:
运行效果:
没用病毒的文件:
[Fact] public async Task ScanBytes_InfectedData_ReturnsExpectedResult() { var ctx = IntegrationTestContext.CreateDefaultUnitTestContext(); const string sampleVirusSignature = @"1111111111111"; IClamAVScannerClient ClamAVScannerClient=ctx.Resolve<IClamAVScannerClient>(); var bytes = Encoding.UTF8.GetBytes(sampleVirusSignature); var result=await ClamAVScannerClient.SendAndScanFileAsync(bytes); Assert.Equal(ScanResponseStatus.VirusDetected, result.Status); Assert.NotEmpty(result.InfectedFiles); }
找了几个病毒测试包测试:
[Fact] public async Task ScanFileStream_InfectedData_ReturnsVirusDetectedResult() { var ctx = IntegrationTestContext.CreateDefaultUnitTestContext(); string filePath = @"C:\Users\deng\Desktop\b.zip"; IClamAVScannerClient ClamAVScannerClient = ctx.Resolve<IClamAVScannerClient>(); var result = await ClamAVScannerClient.SendAndScanFileAsync(FileToStream(filePath)); Assert.Equal(ScanResponseStatus.VirusDetected, result.Status); //Assert.NotEmpty(result.InfectedFiles); }
提供了WebApi,暂时还没完善,后续继续完善WebApi接口。
最终效果:
代码已经托管到gitee上面了:https://gitee.com/Jesai/JESAI.ClamAV.NetScanner.git
初步已经可使用,我已经使用在项目。
目前只有netcore 3.1版本。
类库已经打包上传到Nuget。能够经过nuget管理器搜索 JESAI.ClamAV.NetScannerCore安装使用
或者直接命令 Install-Package JESAI.ClamAV.NetScannerCore
但愿你们帮忙点下星星,写代码不容易。鼓励下写代码的动力。
后续等我有空,继续写一些怎么使用的教程和完善下文档。或者找我私下讨论一下。如今还没吃饭···········