Какая ОС лучше? 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

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

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

Комментарии (14)


  1. Abyss777
    17.03.2022 12:36
    +3

    Не хватает раздела в статье как теперь его обновлять в связи с этим:

    https://habr.com/ru/news/t/655457/#comment_24162387


    1. developer7 Автор
      17.03.2022 12:42

      Жесть… Ещё вчера-позавчера www.clamav.net заходил без проблем…


  1. developer7 Автор
    17.03.2022 12:49

    Только что решил проверить качаются ли бызы.

    root@ubuntu:~# service clamav-freshclam stop
    root@ubuntu:~# freshclam
    ClamAV update process started at Thu Mar 17 09:45:09 2022
    daily database available for update (local version: 26472, remote version: 26484)
    Current database is 12 versions behind.
    Downloading database patch # 26473…
    Time: 0.2s, ETA: 0.0s [========================>] 16B/16B
    WARNING: downloadPatch: Can't download daily-26473.cdiff from database.clamav.net/daily-26473.cdiff
    WARNING: Incremental update failed, trying to download daily.cvd
    Time: 0.1s, ETA: 0.0s [========================>] 16B/16B
    ERROR: Can't create freshclam.dat in /var/lib/clamav
    Hint: The database directory must be writable for UID 111 or GID 117
    WARNING: Can't download daily.cvd from database.clamav.net/daily.cvd
    WARNING: FreshClam received error code 403 from the ClamAV Content Delivery Network (CDN).
    This could mean several things:
    1. You are running an out-of-date version of ClamAV / FreshClam.
    Ensure you are the most updated version by visiting www.clamav.net/downloads
    2. Your network is explicitly denied by the FreshClam CDN.
    In order to rectify this please check that you are:
    a. Running an up-to-date version of FreshClam
    b. Running FreshClam no more than once an hour
    c. If you have checked (a) and (b), please open a ticket at
    github.com/Cisco-Talos/clamav/issues
    and we will investigate why your network is blocked.
    WARNING: You are on cool-down until after: 2022-03-18 09:45:10
    ERROR: Database update process failed: Forbidden; Blocked by CDN
    ERROR: Update failed.


    Мда… Вовремя я статью написал…


    1. plm
      17.03.2022 15:21

      У меня любимый ClamWin, который базой clamav пользуется, тоже с неделю как так себя ведёт. Но у него бывают иногда такие проблемы. Вот и объяснение.


  1. 13werwolf13
    17.03.2022 14:10
    +1

    зачем было так усложнять себе жизнь?
    ведь можно поставить clamav из реп, с демонами и преднастроенными для хуть сколько-то возможной работы конфигами
    да, как написано в статье версия будет не самая свежая, но все нужные бекпорты мейнтейнеры уже заботливо бекпортировали (простите за каламбур) и не надо изобретать костыли

    а с учётом последних новостей и с обновлением будет проще ибо мейнтейнерам твоего дистра пофиг из какой ты страны и политоту они в пакеты не пропустят

    UPD: а freshclam лечится через прокси/vpn выходящие наружу где нибудь в ньюфигпоймигде которые есть у каждого админа в россии с момента появления роскомпозора


    1. developer7 Автор
      17.03.2022 14:26

      Ну я написал вроде в статье почему.
      С официальной репы качалась только версия 0.102.1. Меня в принципе она бы устроила. Но эта версия устарела настолько что не качала базы данных. При попытке скачать их так и писалось — мол ваша версия очень древняя и не может скачать базы данных.

      Я пытался сделать так что бы по команде apt-get качалась не офф-версия, а последняя — но для этого мне надо было бы перенастроить сервер с офф-репозитория на экспериментальный (с новым версиями). Собственно я не захотел идти на этот шаг — потому как велик риск угробить сервер.
      Я выбрал путь просто скачать и установить dep пакет с последней версией. Но она оказалась без демонов. Собственно про это всё я писал в статье. Плюс потом демон API упорно не слушал порт. Как это починить я как раз и написал.

      А что по поводу баз данных. Я уже думаю как решить этот вопрос. Ведь базы данных это просто 4 файла (я так думаю). И получается что просто надо найти где ещё эти файлы лежат в сети (а это open source, где то же ещё лежать должны), и скачать их напрямую. Даже демон clamav-freshclam не нужен будет. Для закачки этих файлов я могу и своего написать.


      1. developer7 Автор
        17.03.2022 14:35

        Ради интереса залез посмотреть в конфиг clamav-freshclam. И там есть 2 интересные строчки:

        DNSDatabaseInfo current.cvd.clamav.net
        DatabaseMirror database.clamav.net


        Т.е. достаточно найти зеркала баз данных.


  1. LevOrdabesov
    17.03.2022 15:55

    habr.com/ru/news/t/655781
    С прошлой пятницы как минимум недоступен, может, и раньше. Не будет нам больше СПО, злые мы.


  1. developer7 Автор
    17.03.2022 20:28

    Дополню решение «багов». У нас сервер поддерживает загрузку больших файлов. Но ClamAV вылетал с ошибкой без пояснения при попытке проверить такой файл.
    Оказалось есть такая настройка в clamd.conf:

    StreamMaxLength


    которая по дефолту ровнялась 25 мегабайтам.

    Собственно такой размер явно прослеживается от максимального размера прикреплённого файла для email (хотя этот параметр очень разный в зависимости от сервера). И т.к. ClamAV ориентирован на mail сервера.

    Установка параметра в 1024M — помогла проверять файлы до гигабайта. 800 метров на тестовой средней машине проверялось где то за полторы секунды. Хороший результат.


  1. resetsa
    17.03.2022 21:22

    просто оставлю здесь.
    docs.clamav.net/manual/Installing/Docker.html
    тем более у вас, как сервис, самое оно и никаких проблем с установкой.


  1. roundzero
    18.03.2022 06:53
    +1

    Ясно что автор пытается администрировать Линукс мышкой. Это не винда и жаловаться что какой-то гуй работает не так должно быть стыдно. Все настройки в linux делаются только в консоли. Ну или xterm можно запустить под гуем. Особенно впечатлило элементарное действие для raid с mdadm через некий гуй. Это не статья а детский плач. Извините.


    1. developer7 Автор
      18.03.2022 13:18

      Какая мышка? Вы статью вообще вообще хотя бы наискосок смотрели? Какой гуй? Я работаю с сервреом только по SSH — и считаю это очень удобным.

      По поводу RAID — ну ка расскажите какая там консоль когда ставишь систему с 0 на голые диски. С разбитием секторов и прочего.Конечно гуем это не назвать, но это и не так консоль про которую мы все знаем.

      Если вы такого не делали то расскажу — там идёт ряд настоечных консолеподобных окон где делаются все действия. Надо было создать несколько разделов а потом объединить их в RAID. И делалось это весьма нетривиальным способом. И как раз на последних этапах ничего не работало.

      И да RAID можно делать и на установленной системе. Например когда диски добавляешь к уже рабочей системе. Тогда да — мы пользуемся стандартными улитами для создания RAID из привычной консоли.


  1. garwall
    18.03.2022 12:55

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

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

    ЭЭ.. вы точно с никс-системами работали? А то вокруг меня stable releases и ключи запуска, которые не менялись десятилетиями


    1. developer7 Автор
      18.03.2022 13:25

      Не конечно не работал. Мне всё это приснилось. А в реальном мире у всех домохозяек стоит *nix. А красноглазики возятся со своим Windows и смотрят на всех с высока.

      И да у меня встречный вопрос — а вы статью тоже хотя бы по диагонали просматривали или сразу в обвинения пошли?

      Если нет — то там в статье написано. Если настроить и не трогать машину, то она работает годами. Собственно у нас есть сервера которые более 5 лет не выключались и не перезагружались. Ну и обновления под строгим учётом и перепроверкой работоспособности нужных модулей.