# Устанавливаем необходимые пакеты зависимостей. Все действия ниже будут выполняться от root.
apt-get install -y gcc g++ make pkg-config valgrind check libbz2-dev libcurl4-openssl-dev libjson-c-dev libmilter-dev libncurses5-dev libpcre2-dev libssl-dev libxml2-dev zlib1g-dev
# Создаем сервисный аккаунт от которого будут работать службы (freshclam, clamd).
groupadd clamav && useradd -g clamav -s /bin/false -c "Clam Antivirus" clamav
# Скачиваем исходник, раскаковываем его и переходим в распакованный каталог (на момент написания статьи LTS версия 0.103.7).
cd /opt wget https://www.clamav.net/downloads/production/clamav-0.103.7.tar.gz tar -zxvf clamav-[ver].tar.gz cd clamav-[ver]
# Создаем «build» подкаталог и переходим в него.
mkdir build && cd build
# Конфигурирование сборки.
../configure --prefix=/usr --sysconfdir=/etc/clamav --with-dbdir=/var/lib/clamav --with-libjson=/usr/lib/x86_64-linux-gnu/libjson-c.a --enable-milter
Статья как установить актуальную версию библиотеки json-c — https://sysos.ru/?p=735
# Собираем и устанавливаем пакет.
make make check VG=1 make install
# Конфигурация clamav (основные параметры, оригинальный файл конфигурации /etc/clamav/clamd.conf.sample).
cat << EOF > /etc/clamav/clamd.conf LocalSocket /var/run/clamav/clamd.socket FixStaleSocket true LocalSocketGroup clamav LocalSocketMode 666 User clamav TCPSocket 3310 ScanMail true ScanArchive true ArchiveBlockEncrypted false MaxDirectoryRecursion 15 FollowDirectorySymlinks false FollowFileSymlinks false ReadTimeout 180 MaxThreads 12 MaxConnectionQueueLength 15 LogSyslog false LogRotate true LogFacility LOG_LOCAL6 LogClean false LogVerbose false PreludeEnable no PreludeAnalyzerName ClamAV DatabaseDirectory /var/lib/clamav OfficialDatabaseOnly false SelfCheck 3600 Foreground false Debug false ScanPE true MaxEmbeddedPE 10M ScanOLE2 true ScanPDF true ScanHTML true MaxHTMLNormalize 10M MaxHTMLNoTags 2M MaxScriptNormalize 5M MaxZipTypeRcg 1M ScanSWF true ExitOnOOM false LeaveTemporaryFiles false AlgorithmicDetection true ScanELF true IdleTimeout 30 CrossFilesystems true PhishingSignatures true PhishingScanURLs true PhishingAlwaysBlockSSLMismatch false PhishingAlwaysBlockCloak false PartitionIntersection false DetectPUA false ScanPartialMessages false HeuristicScanPrecedence false StructuredDataDetection false CommandReadTimeout 30 SendBufTimeout 200 MaxQueue 100 ExtendedDetectionInfo true OLE2BlockMacros false AllowAllMatchScan true ForceToDisk false DisableCertCheck false DisableCache false MaxScanTime 120000 MaxScanSize 100M MaxFileSize 25M MaxRecursion 16 MaxFiles 10000 MaxPartitions 50 MaxIconsPE 100 PCREMatchLimit 10000 PCRERecMatchLimit 5000 PCREMaxFileSize 25M ScanXMLDOCS true ScanHWP3 true MaxRecHWP3 16 StreamMaxLength 25M LogFile /var/log/clamav/clamav.log LogTime true LogFileUnlock false LogFileMaxSize 0 Bytecode true BytecodeSecurity TrustSigned BytecodeTimeout 60000 OnAccessMaxFileSize 5M EOF
# Конфигурация freshclam (основные параметры, оригинальный файл конфигурации /etc/clamav/freshclam.conf.sample).
cat << EOF > /etc/clamav/freshclam.conf DatabaseOwner clamav UpdateLogFile /var/log/clamav/freshclam.log LogVerbose false LogSyslog false LogFacility LOG_LOCAL6 LogFileMaxSize 0 LogRotate true LogTime true Foreground false Debug false MaxAttempts 5 DatabaseDirectory /var/lib/clamav DNSDatabaseInfo current.cvd.clamav.net ConnectTimeout 30 ReceiveTimeout 0 TestDatabases yes ScriptedUpdates yes CompressLocalDatabase no Bytecode true NotifyClamd /etc/clamav/clamd.conf Checks 24 DatabaseMirror db.local.clamav.net DatabaseMirror database.clamav.net EOF
# Создаем необходимые каталоги и настраиваем права владельца.
mkdir /var/log/clamav/ /var/lib/clamav /var/run/clamav/ chown clamav:clamav /var/log/clamav/ /var/lib/clamav /var/run/clamav/ chmod 755 /var/lib/clamav
# Создаем сервис запуска для — freshclam
cat << EOF > /etc/systemd/system/clamav-freshclam.service [Unit] Description=ClamAV virus database updater Documentation=man:freshclam(1) man:freshclam.conf(5) https://www.clamav.net/documents # If user wants it run from cron, dont start the daemon. ConditionPathExists=!/etc/cron.d/clamav-freshclam Wants=network-online.target After=network-online.target [Service] User=clamav Group=clamav ExecStart=/usr/bin/freshclam -d --foreground=true StandardOutput=syslog [Install] WantedBy=multi-user.target EOF
# Создаем сервис запуска для — ClamAV
cat << EOF > /etc/systemd/system/clamav-daemon.service [Unit] Description=Clam AntiVirus userspace daemon Documentation=man:clamd(8) man:clamd.conf(5) https://www.clamav.net/documents/ # Check for database existence ConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc} ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc} [Service] User=clamav Group=clamav ExecStart=/usr/sbin/clamd --foreground=true # Reload the database ExecReload=/bin/kill -USR2 $MAINPID StandardOutput=syslog TimeoutStartSec=420 [Install] WantedBy=multi-user.target EOF
# Перезапускаем демон системного управления, включаем созданные сценарии запуска.
systemctl daemon-reload systemctl enable clamav-freshclam.service systemctl enable clamav-daemon.service
# Первое обновление антирирусных баз делаем в ручную.
freshclam --debug
# Запускаем службы
systemctl start clamav-freshclam.service systemctl start clamav-daemon.service
# Для проверки демона ClamAV прослушивает ли как локальный сокет unix, так и TCP-порт 3310, выполните следующую команду.
ss -lnp | grep -E "(clam|3310)" u_str LISTEN 0 15 /var/run/clamav/clamd.socket 3990524 * 0 tcp LISTEN 0 15 0.0.0.0:3310 0.0.0.0:*
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА