Как стать автором
Обновить

Антивирус для Linux – ClamAV

Время на прочтение7 мин
Количество просмотров42K

Какая ОС лучше? Windows? Linux? Может MacOS? Холивары на эту тему наверно не кончатся никогда и будут бесконечным оазисом контента для различных статей. Множество копий противоборствующих сторон имеют явно эмоциональный окрас, но для технаря важны только факты и рабочие практики применения.

По работе мне время от времени приходится иметь дело с установкой нового ПО на Ubuntu Server. Например бесплатный сервис хранения ссылок linkin.link о котором я писал тут является удачной кооперацией двух миров, (.net) Windows и Linux. Но вот путь к финальному шагу весьма тернист. И периодически это превращается в настоящий квест.

Данная статья это туториал (последний раздел) - как установить текущую на данный момент версию антивируса ClamAV 0.104.2 на Ubuntu Server. И "весёлые" приключения по миру nix* (первые три раздела).


Вступление

Отходя от темы и если говорить в целом о экосистеме nix*, то за годы практики у меня сложилась мнение. Если ты настроил машину, при этом пропотев n-ное количество часов, то такая машина будет работать безотказно, годами. До следующего обновления…

Мне кажется, nix* системы вряд ли станут популярными в обывательском секторе, потому что имеют одну убийственную “архитектурную” особенность.

Бесконечное постоянное обновление софта без обратной совместимости.

Казалось бы, постоянно новое – это хорошо. Но это монета с двумя сторонами. И тёмная сторона, к сожалению, как раз обращена к новичкам, да и midl пользователям - ничего толком не “работает из коробки”.

У меня много подобных историй, жалко, что я их не документировал в туториалы. Помню, как вроде на 18 Ubuntu Server надо было сделать софтовый RAID. И как я вступал в ступор на окнах настройки который вели в никуда. Сам дистрибутив был скачан с официального сайта как самый "надёжный" и "правильный". Действовал по всем правилам, из инструкций из интернета, которые были все одинаковые на всех сайтах. Везде было сказано – делай так и всё будет работать. А у меня все настроечные окна были – но сам RAID не создавался.

И только после нескольких дней страданий выяснилось – что в казалось бы “официальной версии” просто вырезали часть, которая отвечала за окончание настройки RAID – при этом оставили начальные окна настройки. Неофициальная версия – помогла.

Задача

Немного лирики окончил, приступаю к теме статьи.

Мне поступила достаточно типичная задача – надо проверять антивирусом файлы, которые закачиваются на сервер пользователями.

Конечно – сейчас вирусы такие, что без “нейросетей” и не поймёшь, что этот вирус. Или на диске он зашифрованный и только загрузившись в память может, расшифровав себя, показать гнилое нутро.

Но хоть какую-то защиту антивирус дать может.

Нужен был бесплатный антивирус. Поискав в интернете нашёлся подходящий кандидат ClamAV

Этот антивирус имеет богатую историю. Используется на множестве mail серверов. И поддерживается до сих пор. А также имеет API для индивидуальной проверки файлов. То, что надо.

ПО, которое должно будет взаимодействовать с антивирусом, написано на .net core. Как я писал выше это удачная кооперация миров Windows и Linux.

Для старта был решено запустить систему на Windows.

Как ни странно – почти всё прошло удачно. ClamAV был скачан с официального сайта. Установлен как служба без проблем. Базы данных антивируса загрузились с первого раза.

Небольшие проблемы были в подключении к API.

В NuGet было несколько библиотек для работы с API. В в топе висела nClam. C почти полтора миллионом скачиваний и уже 7-ой версией. В общем внушает доверие.

Библиотека установлена. Код написан. И тут получаем баг. На любой файл, переданный на проверку, возвращался код ответа – файл не найден. Немного поэкспериментировав, было решено взять следующую по популярности библиотеку - ClamAV.Net

Скачиваний, правда по сравнению с nClam только 25 тысяч. Но с этой библиотекой всё заработало корректно.

Для теста был скачан файл с сигнатурой вируса от сюда.

ClamAV определял вирус.

Эксперимент завершился полностью успехом – и было решено перенести всё на Ubuntu Server. Ожидалось что это займёт максимум 30 минут. Ага… 

Пришлось потратить день. И чтобы другие не тратили столько времени - написан этот туториал.

Попытка установки ClamAV на Ubuntu Server

Поискав в интернете я нашёл около 2 десятков (было ещё больше) сайтов с информацией как поставить ClamAV на Ubuntu. Инструкция была практически идентичная на всех серверах.

Сперва выполняем стандартную команду обновления:

apt-get update

А потом собственно команду установки антивируса и одновременно установки демона для API:

apt-get install clamav clamav-daemon

Это практически всё. Проще инструкции придумать сложно.

Это команда устанавливает файлы самого антивируса ClamAV. А также 2 демона. Первый clamav-freshclam – для автоматической закачки баз данных. Второй clamav-daemon - API.

Проверяем как установились демоны:

systemctl statusclamav-freshclam

Вроде работает.

Второй демон clamav-daemon – который предоставляет нам API для проверки файлов:

systemctl status clamav-daemon

Почему-то не запущен.

Запускаем:

service clamav-daemon start

Не запустился. Ругается что нету баз данных. Но тут всё по плану. Все туториалы говорят, что надо закачать базы данных вручную.

Для этого останавливаем автоматический загрузчик:

service clamav-freshclam stop

Далее одной командой загружаем вручную

freshclam

Собственно, на этом этапе закончился процесс простой установки ClamAV через туториал.

Как я понял версия в официальном дистрибутиве устарела настолько, что даже не может скачать базы данных. Выше я писал про проблему обновлений в nix мире. Вот как раз прилетело и мне.

Не буду описывать мои поиски как же закачать последнюю версию антивируса, приведу результат.

Есть 2 способа. Первый - настроить Backports. Это путь рекомендуется на официальном сайте ClamAV:

Я не захотел выбирать этот путь что бы не угробить всё окончательно.

Ну и второй вариант – скачать пакет и установить вручную. На официальном сайте есть пакеты для различных систем:

Пошаговая установка ClamAV на Ubuntu Server

Важно: все команды я вводил под root. Вы можете через sudo – но тогда я не гарантирую что всё будет так же.

Не буду описывать все эксперименты которые я провёл за день, а напишу пошаговую инструкцию – которая на моей системе позволила запустить нормально ClamAV . Плюс некоторые комментарии.

Удаляем все упоминания о старых установках:

apt-get purge clamav clamav-base clamav-daemon clamav-freshclam clamav-milter clamdscan clamassassin

Скачиваем установочный пакет и кидаем в корень диска сервера. Для меня это: clamav-0.104.2.linux.x86_64.deb

Далее устанавливаем программа для установки deb пакетов в Ubuntu – gdebi:

apt-get install gdebi

Устанавливаем ClamAV версии 0.104.2:

gdebi /clamav-0.104.2.linux.x86_64.deb

Проверяем как установилось:

clamscan -V

Версия последняя. Та, что надо.

Далее наc подстерегает очередная проблема. Как я понял (но может я и не прав) эта версия почему-то не включает в себя установку демонов. Вот папка с установленным антивирусом:

Демона тут нету. Можно запустить антивирус из консоли – но как установить демон, я так и не понял.

Вот запросы на проверку служб:

Далее запускаем стандартный установщик:

apt-get install clamav clamav-daemon

Как я понял – установщик установит демонов, а сам ClamAV не установит т.к. есть уже более новая установленная версия.

Проверяем какая версия:

Видим что версия последняя и не затёрлась нашей предыдущей установкой. Изначально эта команда выдавала версию 0.102.1

Проверяем демоны:

systemctl status clamav-daemon

systemctl status clamav-freshclam

Clamav-freshclam – есть и запущен. Clamav-daemon – есть и остановлен. Пока по плану.

Пытаемся скачать базы данных:

freshclam

Видим что ругается на файл конфигов. Идём в папку и смотрим:

Переименовываем файлы в:

clamd.conf

freshclam.conf

Далее открываем их и удаляем слово "Example". Так:

Почему это было не сделать изначально? Остальные настройки я не трогал – все по умолчанию. Всё работает и так. (хотя вру – одну настройку всё же я менял, но о ней позже).

Но вы можете установить настройки согласно вашим системным требованиям.

Новая попытка закачки баз данных:

Забыл отключить демона clamav-freshclam. Тут видно, что идёт конфликт доступа к файлу логов. Можно было бы и более грамотно работать с файлом, без локов.

Отключаем демона.

service clamav-freshclam stop

Третья попытка.

Аллилуйя! В этот раз всё OK. Базы скачиваются.

Ну теперь clamav-daemon должен запустится (нет)

service clamav-daemon start

systemctl status clamav-daemon

Не запустился. Вроде как не может найти базы данных по пути: /var/lib/clamav

А их там и нету. Поиск показал, что базы находятся тут:

Вот мы и возвращаемся к настроечным файлам. Изначально я открыл файл clamd.conf

И вставил строку:

DatabaseDirectory /usr/local/share/clamav

Но демон clamav-daemon всё рано не искал базы по этому пути.

Затем я в двух файлах:

clamd.conf

freshclam.conf

вставил строки:

DatabaseDirectory /var/lib/clamav

И уже демон clamav-freshclam – закачал базы по нужному пути /var/lib/clamav

Запускаем и проверяем демон clamav-daemon:

service clamav-daemon stop

service clamav-daemon start

systemctl status clamav-daemon

Ура всё работает! Наконец то финиш (нет)

Я попытался присоединится к демону через дефолтный адрес:

127.0.0.1:3310

Но ничего не получилось (((

Смотрим что у нас там по портам:

netstat -ntlp | grep LISTEN

Листинг не привожу (конфиденциальность) – но демона нашего там нет. И порт 3310 никто не слушает.

В интернете я нашёл информацию, что эту проблему можно решить с помощью настройки файла конфигурации.

Вводим команду:

dpkg-reconfigure clamav-daemon

Запускается настройка – суть которой ввести последовательно все значения в файле конфигурации. Всё было нормально пока я не дошёл до параметра:

Тут и далее следующие 3 параметра входили в вечный цикл. Всё перепробовал – вечный цикл и всё тут.

Потом нашёл тут, что да – есть такой баг и его вроде как поправили. Видимо до моей системы эта правка так и не добралась. Решил бросить этот вариант.

Далее я провозился оставшеюся часть дня. Сразу привожу рабочий вариант.

Открываем файл /etc/clamav/clamd.conf

И вставляем в самый верх строки:

TCPSocket 3310

TCPAddr localhost

Так:

Далее открываем файл:

/etc/systemd/system/clamav-daemon.socket.d/extend.conf

И делаем такое содержимое:

[Service]

ExecStartPre=-/bin/mkdir /run/clamav

ExecStartPre=/bin/chown clamav /run/clamav

[Socket]

SocketUser=clamav

ListenStream=3310

Сохраняем всё. Далее команда перезагрузки конфигов:

systemctl daemon-reload

Запускаем демон. Проверяем порт:

Есть контакт! Неужели на этом всё? В этот раз ДА. Всё заработало. Ну и видео демонстрации работы.

Offtop

Когда набирал статью, заливка очередной картинки зависла. Перезагрузил страницу – всё что набирал пропало. Но спасло всплывающее сообщение "восстановить данные". И тут надо было мне насторожится. Поленился. Продолжил дальше набирать статью. Опять загрузка картинки зависла. И на второй раз при нажатии восстановления – ничего! Пусто! Поэтому для сберегания нервных клеток почаще переносите в черновик. Я, к сожалению, не сберёг.

Ну как так хабр? 

Теги:
Хабы:
Всего голосов 4: ↑2 и ↓20
Комментарии24

Публикации

Истории

Работа

.NET разработчик
49 вакансий

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань