Какая ОС лучше? 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 status
clamav-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
Когда набирал статью, заливка очередной картинки зависла. Перезагрузил страницу – всё что набирал пропало. Но спасло всплывающее сообщение "восстановить данные". И тут надо было мне насторожится. Поленился. Продолжил дальше набирать статью. Опять загрузка картинки зависла. И на второй раз при нажатии восстановления – ничего! Пусто! Поэтому для сберегания нервных клеток почаще переносите в черновик. Я, к сожалению, не сберёг.
Ну как так хабр?