Работая над побочным проектом, кто -то спросил меня, как сканировать вирусы в облачном родном и без серверного ландшафта. Это заставило меня задуматься о проекте, который я сделал пару лет назад. Во время этого проекта мы использовали Clamav Это было установлено на виртуальной машине. Мы отсканировали файлы, которые конечные пользователи загружены в приложении ASP.NET, и все было размещено на виртуальных машинах Datacenter где-то в Нидерландах.
CLAMAV® является антивирусным двигателем с открытым исходным кодом для обнаружения троян, вирусов, вредоносных программ и других злонамеренных угроз.
В этом блоге я покажу доказательство концепции, используя функции изображения Docker и Azure, чтобы создать простой автоматизированный Virusscanner для хранения Blob Blob.
Настройка изображения Docker
Прежде всего, некоторые предпосылки. В этой демонстрации я использую Docker для Windows на своем рабочем столе и кодируюсь в Visual Studio 2019 с локальными функциями Azure. Я уже настроил учетную запись Azure Storage, которую я могу использовать в качестве триггера в своих функциях.
Во -первых, давайте найдем изображение Docker с Clamav установлены.
На Dockerhub есть несколько, я вытащил Mkodockx/Docker-Clamav И это работает плавно в моей демонстрации. Чтобы запустить это, просто выполните следующую команду:
docker run -d -p 127.0.0.1:3310:3310 mk0x/docker-clamav:alpine
Он должен работать и прослушивание порта по умолчанию на Localhost.
Создание функции Azure
Второй шаг — создать проект для нашей функции Azure:
Мы используем функцию, запускаемую Blob, потому что мы хотим сканировать все новые капли в месте «загрузка».
Теперь для сканирования следующее Пакет Nuget для NCLAM должно быть установлено:
Install-Package nClam -Version 4.0.1
Фактический код для сканирования довольно прост. Ниже показан код, который захватывает файл, загружает его в контейнер Docker и получает статус сканирования:
using System.IO; using System.Linq; using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; using nClam; namespace VirusScanFunction { public static class ScanBlobs { static readonly string serverName = "localhost"; static readonly int serverPort = 3310; [FunctionName("ScanBlobs")] public static void Run([BlobTrigger("upload/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log) { // Create client var clam = new ClamClient(serverName, serverPort); // Scanning for viruses... var scanResult = clam.SendAndScanFileAsync(myBlob).Result; switch (scanResult.Result) { case ClamScanResults.Clean: log.LogInformation("The file is clean!"); break; case ClamScanResults.VirusDetected: log.LogInformation("Virus Found!"); log.LogInformation("Virus name: {0}", scanResult.InfectedFiles.First().VirusName); break; case ClamScanResults.Error: log.LogInformation("Error scanning file: {0}", scanResult.RawResult); break; } } } }
Это в основном! Вы только что создали свой собственный местный Virusscanner для вашего хранилища Blob!
Резюме и соображения
Очевидно, это POC и хорошо работает на моем Машина контейнер’. Для корпоративных среду вы должны заботиться о том, какое изображение контейнера использовать, как обрабатывать найденные вирусы и что делать, чтобы смягчить проблемы. Вы, очевидно, хотите предупредить и блокировать человека, который в первую очередь загрузил вирус.
Вывод
Без сервера и контейнеры позволяют настроить действительно классные концепции и заставлять вас думать вне коробки. Несколько лет назад нам пришлось установить Clamav на виртуальную машину, где теперь мы можем использовать контейнеры, раскрутить их, масштабировать и утилизировать, когда мы закончим. Подумайте о возможностях!
Оригинал: «https://dev.to/sogeti/scanning-blob-storage-for-viruses-with-azure-functions-and-docker-1ph9»