Какая ОС лучше? 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
Когда набирал статью, заливка очередной картинки зависла. Перезагрузил страницу – всё что набирал пропало. Но спасло всплывающее сообщение "восстановить данные". И тут надо было мне насторожится. Поленился. Продолжил дальше набирать статью. Опять загрузка картинки зависла. И на второй раз при нажатии восстановления – ничего! Пусто! Поэтому для сберегания нервных клеток почаще переносите в черновик. Я, к сожалению, не сберёг.
Ну как так хабр?
Комментарии (14)
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.
Мда… Вовремя я статью написал…plm
17.03.2022 15:21У меня любимый ClamWin, который базой clamav пользуется, тоже с неделю как так себя ведёт. Но у него бывают иногда такие проблемы. Вот и объяснение.
13werwolf13
17.03.2022 14:10+1зачем было так усложнять себе жизнь?
ведь можно поставить clamav из реп, с демонами и преднастроенными для хуть сколько-то возможной работы конфигами
да, как написано в статье версия будет не самая свежая, но все нужные бекпорты мейнтейнеры уже заботливо бекпортировали (простите за каламбур) и не надо изобретать костылиа с учётом последних новостей и с обновлением будет проще ибо мейнтейнерам твоего дистра пофиг из какой ты страны и политоту они в пакеты не пропустят
UPD: а freshclam лечится через прокси/vpn выходящие наружу где нибудь в ньюфигпоймигде которые есть у каждого админа в россии с момента появления роскомпозора
developer7 Автор
17.03.2022 14:26Ну я написал вроде в статье почему.
С официальной репы качалась только версия 0.102.1. Меня в принципе она бы устроила. Но эта версия устарела настолько что не качала базы данных. При попытке скачать их так и писалось — мол ваша версия очень древняя и не может скачать базы данных.
Я пытался сделать так что бы по команде apt-get качалась не офф-версия, а последняя — но для этого мне надо было бы перенастроить сервер с офф-репозитория на экспериментальный (с новым версиями). Собственно я не захотел идти на этот шаг — потому как велик риск угробить сервер.
Я выбрал путь просто скачать и установить dep пакет с последней версией. Но она оказалась без демонов. Собственно про это всё я писал в статье. Плюс потом демон API упорно не слушал порт. Как это починить я как раз и написал.
А что по поводу баз данных. Я уже думаю как решить этот вопрос. Ведь базы данных это просто 4 файла (я так думаю). И получается что просто надо найти где ещё эти файлы лежат в сети (а это open source, где то же ещё лежать должны), и скачать их напрямую. Даже демон clamav-freshclam не нужен будет. Для закачки этих файлов я могу и своего написать.developer7 Автор
17.03.2022 14:35Ради интереса залез посмотреть в конфиг clamav-freshclam. И там есть 2 интересные строчки:
DNSDatabaseInfo current.cvd.clamav.net
DatabaseMirror database.clamav.net
Т.е. достаточно найти зеркала баз данных.
LevOrdabesov
17.03.2022 15:55habr.com/ru/news/t/655781
С прошлой пятницы как минимум недоступен, может, и раньше. Не будет нам больше СПО, злые мы.
developer7 Автор
17.03.2022 20:28Дополню решение «багов». У нас сервер поддерживает загрузку больших файлов. Но ClamAV вылетал с ошибкой без пояснения при попытке проверить такой файл.
Оказалось есть такая настройка в clamd.conf:StreamMaxLength
которая по дефолту ровнялась 25 мегабайтам.
Собственно такой размер явно прослеживается от максимального размера прикреплённого файла для email (хотя этот параметр очень разный в зависимости от сервера). И т.к. ClamAV ориентирован на mail сервера.
Установка параметра в 1024M — помогла проверять файлы до гигабайта. 800 метров на тестовой средней машине проверялось где то за полторы секунды. Хороший результат.
resetsa
17.03.2022 21:22просто оставлю здесь.
docs.clamav.net/manual/Installing/Docker.html
тем более у вас, как сервис, самое оно и никаких проблем с установкой.
roundzero
18.03.2022 06:53+1Ясно что автор пытается администрировать Линукс мышкой. Это не винда и жаловаться что какой-то гуй работает не так должно быть стыдно. Все настройки в linux делаются только в консоли. Ну или xterm можно запустить под гуем. Особенно впечатлило элементарное действие для raid с mdadm через некий гуй. Это не статья а детский плач. Извините.
developer7 Автор
18.03.2022 13:18Какая мышка? Вы статью вообще вообще хотя бы наискосок смотрели? Какой гуй? Я работаю с сервреом только по SSH — и считаю это очень удобным.
По поводу RAID — ну ка расскажите какая там консоль когда ставишь систему с 0 на голые диски. С разбитием секторов и прочего.Конечно гуем это не назвать, но это и не так консоль про которую мы все знаем.
Если вы такого не делали то расскажу — там идёт ряд настоечных консолеподобных окон где делаются все действия. Надо было создать несколько разделов а потом объединить их в RAID. И делалось это весьма нетривиальным способом. И как раз на последних этапах ничего не работало.
И да RAID можно делать и на установленной системе. Например когда диски добавляешь к уже рабочей системе. Тогда да — мы пользуемся стандартными улитами для создания RAID из привычной консоли.
garwall
18.03.2022 12:55Мне кажется, nix* системы вряд ли станут популярными в обывательском секторе, потому что имеют одну убийственную “архитектурную” особенность.
Бесконечное постоянное обновление софта без обратной совместимости.
ЭЭ.. вы точно с никс-системами работали? А то вокруг меня stable releases и ключи запуска, которые не менялись десятилетиями
developer7 Автор
18.03.2022 13:25Не конечно не работал. Мне всё это приснилось. А в реальном мире у всех домохозяек стоит *nix. А красноглазики возятся со своим Windows и смотрят на всех с высока.
И да у меня встречный вопрос — а вы статью тоже хотя бы по диагонали просматривали или сразу в обвинения пошли?
Если нет — то там в статье написано. Если настроить и не трогать машину, то она работает годами. Собственно у нас есть сервера которые более 5 лет не выключались и не перезагружались. Ну и обновления под строгим учётом и перепроверкой работоспособности нужных модулей.
Abyss777
Не хватает раздела в статье как теперь его обновлять в связи с этим:
https://habr.com/ru/news/t/655457/#comment_24162387
developer7 Автор
Жесть… Ещё вчера-позавчера www.clamav.net заходил без проблем…