Установка ClamAV 1.1.* из исходников на Debian 11 Bullseye

# Устанавливаем необходимые пакеты зависимостей. Все действия ниже будут выполняться от root.

apt-get install gcc cmake make pkg-config valgrind git python3 python3-pip python3-pytest check libbz2-dev libcurl4-openssl-dev libjson-c-dev libmilter-dev libncurses5-dev libpcre2-dev libssl-dev libxml2-dev libsystemd-dev zlib1g-dev -y

# Начиная с версии 0.105+, для компиляции частей libclamav требуется набор инструментов Rust. Как установить язык программирования Rust на Debian 11 Bullseye

 

Установка ClamAV

# Скачиваем исходник, распаковываем его и переходим в распакованный каталог (на момент написания статьи latest версия 1.1.0).

cd /opt

wget https://www.clamav.net/downloads/production/clamav-1.1.0.tar.gz
tar -zxvf clamav-1.1.0.tar.gz
cd clamav-1.1.0
ИНФОРМАЦИЯ: оф. страница https://www.clamav.net/downloads не доступна из РФ, поэтому скачиваем исходник через VPN.

 

# Создаем «build» подкаталог и переходим в него.

mkdir build && cd build
ИНФОРМАЦИЯ: Это позволит легко удалить файлы сборки, если что-то пойдет не так и потребуется перенастроить и повторить попытку.

 

# Конфигурирование сборки.

cmake .. \
    -D CMAKE_BUILD_TYPE=RelWithDebInfo \
    -D CMAKE_INSTALL_PREFIX=/usr \
    -D CMAKE_INSTALL_LIBDIR=/usr/lib \
    -D APP_CONFIG_DIRECTORY=/etc/clamav \
    -D DATABASE_DIRECTORY=/var/lib/clamav \
    -D ENABLE_MILTER=ON \
    -D ENABLE_JSON_SHARED=OFF
ИНФОРМАЦИЯ: Разработчики рекомендуют установку со статической библиотекой json-c  (ENABLE_JSON_SHARED=OFF)

# Собираем пакет, тестируем и устанавливаем

cmake --build .
ctest
cmake --build . --target install

 

# Создаем сервисный аккаунт от которого будут работать службы (freshclam, clamd).

groupadd clamav
useradd -g clamav -s /bin/false -c "Clam Antivirus" clamav

# Создаем необходимые каталоги и настраиваем права владельца.

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]
ExecStartPre = /usr/bin/mkdir -p /var/run/clamav
ExecStartPre = /usr/bin/chown -R clam.clam /var/run/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
cat << EOF > /etc/systemd/system/clamav-milter.service
[Unit]
Description='ClamAV Milter'
After=clamav-daemon.service

[Service]
Type=forking
ExecStart=/usr/sbin/clamav-milter --config-file /etc/clamav/clamav-milter.conf

[Install]
WantedBy=multi-user.target
EOF

# Перезапускаем демон системного управления, включаем созданные сценарии запуска.

systemctl daemon-reload

systemctl enable clamav-freshclam.service
systemctl enable clamav-daemon.service
systemctl enable clamav-milter.service

 

# Конфигурация 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

 

cat << EOF > /etc/clamav/clamav-milter.conf
MilterSocket /var/run/clamav/clamav-milter.socket
MilterSocketMode 660
FixStaleSocket yes
User clamav
MilterSocketGroup clamav
PidFile /run/clamav/clamav-milter.pid
TemporaryDirectory /tmp
ClamdSocket unix:/run/clamav/clamd.ctl
LogFile /var/log/clamav/clamav-milter.log
LogRotate yes
LogInfected Basic
EOF

 

# Первое обновление антирирусных баз делаем в ручную.

freshclam --debug
ИНФОРМАЦИЯ. Так как с территории РФ доступа к серверам ClamAV не доступа, то базы нужно качать через VPN и в ручном режиме их размещать в каталоге — /var/lib/clamav

# Запускаем службы

systemctl start clamav-freshclam.service
systemctl start clamav-daemon.service
systemctl start clamav-milter.service

 

Удаление ClamAV

CMake формирует install_manifest.txt файл при установке и с его помощью удалим все установленные файлы.

Переходим в каталог из которого выполняли компиляцию ClamAV ( в моем случае это — /opt/clamav-1.1.0/build) и выполняем команды.

mkdir deleted-by-uninstall
sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt
rm -rf deleted-by-uninstall

Подчищаем хвосты, удаляем созданные службы и оставшиеся файлы конфигураций.

systemctl stop clamav-freshclam.service
systemctl stop clamav-daemon.service
systemctl stop clamav-milter.service

systemctl disable clamav-freshclam.service
systemctl disable clamav-daemon.service
systemctl disable clamav-milter.service

systemctl daemon-reload

rm /etc/systemd/system/clamav-*
rm -rf /etc/clamav
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА

Оставьте комментарий

10 + 2 =