Общие

Установка ClamAV на CentOS 9 - обновлено 22 08 2025

Установка ClamAV на CentOS 9 - обновлено 22 08 2025

⚠️ КРИТИЧЕСКИ ВАЖНО: ДОБАВЛЯЕМ SWAP ПЕРЕД УСТАНОВКОЙ CLAMAV


🔴 ПРОБЛЕМА: Если у вас всего 1.9GB RAM и НЕТ SWAP! ClamAV требует минимум 1-2GB для загрузки баз.


📋 ШАГ 1: СОЗДАЕМ SWAP ФАЙЛ (ОБЯЗАТЕЛЬНО!)

# Создаем swap файл 2GB
echo "Создаем swap файл 2GB..."
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

# Устанавливаем права
chmod 600 /swapfile

# Форматируем как swap
mkswap /swapfile

# Активируем swap
swapon /swapfile

# Проверяем
free -h

# Добавляем в fstab для постоянного использования
echo "/swapfile none swap sw 0 0" >> /etc/fstab

# Настраиваем swappiness (как часто использовать swap)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

echo "✅ Swap успешно добавлен!"

📋 ШАГ 2: УСТАНАВЛИВАЕМ CLAMAV

# Обновляем систему
dnf update -y

# Устанавливаем EPEL репозиторий
dnf install -y epel-release

# Устанавливаем ClamAV
dnf install -y clamav clamav-update clamav-filesystem

# Проверяем установку
clamscan --version

📋 ШАГ 3: НАСТРАИВАЕМ FRESHCLAM С РОССИЙСКИМ ЗЕРКАЛОМ

# Создаем конфигурацию freshclam
cat > /etc/freshclam.conf << 'EOF'
# Основные настройки
DatabaseDirectory /var/lib/clamav
UpdateLogFile /var/log/freshclam.log
LogFileMaxSize 10M
LogRotate yes
LogVerbose no
LogSyslog yes

# Пользователь
DatabaseOwner clamupdate

# ТОЛЬКО российское зеркало (чтобы избежать rate limit)
DatabaseMirror clamav-mirror.ru

# Частота проверок (6 раз в день)
Checks 6

# Таймауты
ConnectTimeout 30
ReceiveTimeout 60
MaxAttempts 3

# Отключаем проверку DNS (чтобы не обращаться к официальным серверам)
DNSDatabaseInfo no
EOF

# Создаем директории и права
mkdir -p /var/lib/clamav
mkdir -p /var/log
touch /var/log/freshclam.log
chown clamupdate:clamupdate /var/log/freshclam.log
chown -R clamupdate:clamupdate /var/lib/clamav

📋 ШАГ 4: ЗАГРУЖАЕМ БАЗЫ ДАННЫХ

# Загружаем базы с российского зеркала напрямую
echo "Загружаем базы данных с российского зеркала..."
cd /var/lib/clamav

# Загружаем main.cvd
echo "Загружаем main.cvd (около 160MB)..."
wget --progress=bar:force -O main.cvd http://clamav-mirror.ru/main.cvd

# Загружаем daily.cvd
echo "Загружаем daily.cvd (около 60MB)..."
wget --progress=bar:force -O daily.cvd http://clamav-mirror.ru/daily.cvd

# Загружаем bytecode.cvd
echo "Загружаем bytecode.cvd (около 300KB)..."
wget --progress=bar:force -O bytecode.cvd http://clamav-mirror.ru/bytecode.cvd

# Устанавливаем права
chown clamupdate:clamupdate *.cvd
chmod 644 *.cvd

# Проверяем
ls -lh *.cvd

# Возвращаемся
cd -

📋 ШАГ 5: СОЗДАЕМ ОПТИМИЗИРОВАННЫЙ СКАНЕР ДЛЯ МАЛОЙ ПАМЯТИ

cat > /usr/local/bin/clamscan-low-mem << 'EOF'
#!/bin/bash

# ClamAV сканер для систем с малой памятью
SCAN_DIR="${1:-/home/bitrix/www}"
LOG_FILE="/var/log/clamav-scan-$(date +%Y%m%d-%H%M).log"

echo "========================================" | tee $LOG_FILE
echo "ClamAV Scan (Low Memory Mode)" | tee -a $LOG_FILE
echo "Started: $(date)" | tee -a $LOG_FILE
echo "Path: $SCAN_DIR" | tee -a $LOG_FILE
echo "========================================" | tee -a $LOG_FILE

# Проверяем swap
SWAP_TOTAL=$(free -m | awk '/^Swap:/{print $2}')
if [ "$SWAP_TOTAL" -lt 1024 ]; then
    echo "⚠️ Warning: Low swap space ($SWAP_TOTAL MB)" | tee -a $LOG_FILE
fi

# Сканируем с минимальными настройками
# Используем только daily базу для экономии памяти
nice -n 19 ionice -c 3 clamscan \
    --infected \
    --recursive \
    --suppress-ok-results \
    --max-filesize=5M \
    --max-scansize=20M \
    --max-recursion=5 \
    --max-files=5000 \
    --database=/var/lib/clamav/daily.cvd \
    --exclude-dir="\.git" \
    --exclude-dir="cache" \
    --exclude-dir="tmp" \
    --exclude="\.log$" \
    --exclude="\.sql$" \
    "$SCAN_DIR" 2>&1 | tee -a $LOG_FILE

# Результаты
echo "" | tee -a $LOG_FILE
echo "========================================" | tee -a $LOG_FILE
INFECTED=$(grep -c "FOUND" $LOG_FILE 2>/dev/null || echo "0")
if [ "$INFECTED" -gt 0 ]; then
    echo "⚠️ INFECTED FILES: $INFECTED" | tee -a $LOG_FILE
    grep "FOUND" $LOG_FILE
else
    echo "✅ No threats detected" | tee -a $LOG_FILE
fi
echo "Completed: $(date)" | tee -a $LOG_FILE
echo "Log: $LOG_FILE" | tee -a $LOG_FILE
echo "========================================" | tee -a $LOG_FILE
EOF

chmod +x /usr/local/bin/clamscan-low-mem

📋 ШАГ 6: СОЗДАЕМ УПРАВЛЯЮЩУЮ ПАНЕЛЬ

cat > /usr/local/bin/clamav-control << 'EOF'
#!/bin/bash

case "$1" in
    scan)
        echo "Starting scan (low memory mode)..."
        /usr/local/bin/clamscan-low-mem "${2:-/home/bitrix/www}"
        ;;

    test)
        echo "Testing ClamAV..."
        echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/test.txt
        clamscan --database=/var/lib/clamav/daily.cvd /tmp/test.txt
        rm -f /tmp/test.txt
        ;;

    update)
        echo "Updating databases from Russian mirror..."
        cd /var/lib/clamav
        for db in main.cvd daily.cvd bytecode.cvd; do
            echo "Updating $db..."
            wget -q -O ${db}.tmp http://clamav-mirror.ru/$db
            if [ -s ${db}.tmp ]; then
                mv ${db}.tmp $db
                chown clamupdate:clamupdate $db
                echo "✓ $db updated"
            else
                rm -f ${db}.tmp
                echo "✗ Failed to update $db"
            fi
        done
        cd -
        ;;

    status)
        echo "=== ClamAV Status ==="
        echo "Version: $(clamscan --version)"
        echo
        echo "Databases:"
        ls -lh /var/lib/clamav/*.cvd 2>/dev/null | awk '{print "  "$9": "$5}'
        echo
        echo "Memory:"
        free -h | grep -E "^Mem|^Swap"
        echo
        echo "Last logs:"
        ls -lt /var/log/clamav-scan-*.log 2>/dev/null | head -3
        ;;

    *)
        echo "Usage: $0 {scan|test|update|status} [path]"
        echo
        echo "  scan [path]  - Scan directory (default: /home/bitrix/www)"
        echo "  test         - Test with EICAR signature"
        echo "  update       - Update virus databases"
        echo "  status       - Show status"
        exit 1
        ;;
esac
EOF

chmod +x /usr/local/bin/clamav-control

# Создаем короткий алиас
ln -sf /usr/local/bin/clamav-control /usr/bin/clamctl

📋 ШАГ 7: НАСТРОЙКА АВТОМАТИЗАЦИИ

# Создаем cron задания
cat > /etc/cron.d/clamav-scanner << 'EOF'
# ClamAV автоматизация для систем с малой памятью

# Обновление баз раз в день в 2:00 (с российского зеркала)
0 2 * * * root /usr/local/bin/clamav-control update >/dev/null 2>&1

# Сканирование раз в день в 3:00 (low memory mode)
0 3 * * * root /usr/local/bin/clamscan-low-mem /home/bitrix/www >/dev/null 2>&1

# Быстрая проверка новых PHP файлов каждые 6 часов
0 */6 * * * root find /home/bitrix/www -name "*.php" -mmin -360 -type f -exec clamscan --quiet --infected --database=/var/lib/clamav/daily.cvd {} \; 2>&1 | grep FOUND >> /var/log/clamav-quick.log
EOF

📋 ШАГ 8: ФИНАЛЬНОЕ ТЕСТИРОВАНИЕ

# Тестовый скрипт
cat > /tmp/test-final.sh << 'EOF'
#!/bin/bash

echo "=== ФИНАЛЬНОЕ ТЕСТИРОВАНИЕ CLAMAV ==="
echo

echo "1. Проверка swap:"
free -h | grep -E "^Mem|^Swap"

echo
echo "2. Версия ClamAV:"
clamscan --version

echo
echo "3. Базы данных:"
ls -lh /var/lib/clamav/*.cvd

echo
echo "4. Тест детекции:"
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.txt
clamscan --database=/var/lib/clamav/daily.cvd --no-summary /tmp/eicar.txt | grep -E "FOUND|OK"
rm -f /tmp/eicar.txt

echo
echo "5. Доступные команды:"
echo "  clamctl scan   - сканировать"
echo "  clamctl test   - тестировать"
echo "  clamctl update - обновить базы"
echo "  clamctl status - статус"

echo
echo "=== УСТАНОВКА ЗАВЕРШЕНА ==="
EOF

chmod +x /tmp/test-final.sh
/tmp/test-final.sh

ВАЖНЫЕ ЗАМЕЧАНИЯ:

echo "================================================"
echo "⚠️ ВАЖНО ДЛЯ ВАШЕЙ СИСТЕМЫ:"
echo "================================================"
echo
echo "1. У вас мало RAM (1.9GB), поэтому:"
echo "   • Обязательно используйте swap (мы добавили 2GB)"
echo "   • Используйте clamscan-low-mem для сканирования"
echo "   • НЕ запускайте clamd демон (потребляет много памяти)"
echo
echo "2. Используется российское зеркало clamav-mirror.ru"
echo "   чтобы избежать rate limit от официальных серверов"
echo
echo "3. Команды для работы:"
echo "   clamctl scan   - сканировать сайт"
echo "   clamctl update - обновить базы"
echo "   clamctl status - проверить статус"
echo
echo "4. Автоматическое сканирование настроено на 3:00"
echo
echo "================================================"

СНАЧАЛА выполните ШАГ 1 (создание swap) - это КРИТИЧЕСКИ ВАЖНО! Затем продолжайте установку.

⚠️ ПРОБЛЕМА: EICAR НЕ ОПРЕДЕЛЯЕТСЯ КАК ВИРУС!


🔴 Тест показал /tmp/eicar.txt: OK вместо FOUND - это означает что вирус не обнаружен!


📋 ШАГ 1: ДИАГНОСТИКА ПРОБЛЕМЫ

# Проверяем полное сканирование со всеми базами
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.txt

# Тест с разными базами
echo "=== Тест с daily.cvd ==="
clamscan --database=/var/lib/clamav/daily.cvd /tmp/eicar.txt

echo
echo "=== Тест с main.cvd ==="
clamscan --database=/var/lib/clamav/main.cvd /tmp/eicar.txt

echo
echo "=== Тест со всеми базами ==="
clamscan /tmp/eicar.txt

rm -f /tmp/eicar.txt

📋 ШАГ 2: ОБНОВЛЯЕМ БАЗЫ ДАННЫХ

main.cvd от 2021 года - ОЧЕНЬ УСТАРЕЛ!

# Обновляем main.cvd с российского зеркала
cd /var/lib/clamav

# Удаляем старую версию
rm -f main.cvd

# Загружаем актуальную версию
echo "Загружаем актуальную main.cvd..."
wget --progress=bar:force -O main.cvd http://clamav-mirror.ru/main.cvd

# Проверяем размер (должен быть около 160-170MB)
ls -lh main.cvd

# Проверяем версию
sigtool --info main.cvd | grep -E "Version:|Build time:"

# Устанавливаем права
chown clamupdate:clamupdate main.cvd

cd -

📋 ШАГ 3: ОБНОВЛЯЕМ daily.cvd

# Обновляем daily базу
cd /var/lib/clamav

echo "Обновляем daily.cvd..."
wget --progress=bar:force -O daily.cvd.new http://clamav-mirror.ru/daily.cvd

# Проверяем что скачалось
if [ -s daily.cvd.new ]; then
    mv daily.cvd.new daily.cvd
    chown clamupdate:clamupdate daily.cvd
    echo "✓ daily.cvd обновлен"
else
    rm -f daily.cvd.new
    echo "✗ Ошибка обновления daily.cvd"
fi

cd -

📋 ШАГ 4: ПРОВЕРЯЕМ ЦЕЛОСТНОСТЬ БАЗ

# Проверяем целостность всех баз
echo "=== Проверка целостности баз данных ==="
for db in /var/lib/clamav/*.cvd; do
    echo "Проверяем $(basename $db)..."
    sigtool --info $db | head -5
    echo
done

📋 ШАГ 5: ПОВТОРНЫЙ ТЕСТ ДЕТЕКЦИИ

cat > /tmp/test-detection.sh << 'EOF'
#!/bin/bash

echo "=== ТЕСТ ДЕТЕКЦИИ ВИРУСОВ ==="
echo

# Создаем тестовые файлы
mkdir -p /tmp/clamtest
cd /tmp/clamtest

# EICAR тест
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.com

# Альтернативный EICAR
printf 'X5O!P%%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar2.txt

# Еще один вариант без экранирования
cat << 'EICAR' > eicar3.txt
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
EICAR

echo "Созданные файлы:"
ls -la

echo
echo "=== Сканирование ==="
clamscan --infected .

echo
echo "=== Результаты ==="
clamscan --no-summary * | grep -E "FOUND|OK"

# Очистка
cd /
rm -rf /tmp/clamtest

echo
echo "=== ТЕСТ ЗАВЕРШЕН ==="
EOF

chmod +x /tmp/test-detection.sh
/tmp/test-detection.sh

📋 ШАГ 6: АЛЬТЕРНАТИВНЫЙ МЕТОД ОБНОВЛЕНИЯ

Если базы все еще не работают, используем freshclam:

# Пробуем обновить через freshclam
freshclam --verbose --stdout

# Если rate limited, обходим через конфиг
cat > /tmp/freshclam-fix.conf << 'EOF'
DatabaseDirectory /var/lib/clamav
DatabaseOwner clamupdate
DatabaseMirror clamav-mirror.ru
DNSDatabaseInfo no
Checks 1
EOF

# Обновляем с временным конфигом
freshclam --config-file=/tmp/freshclam-fix.conf --verbose

📋 ШАГ 7: СОЗДАЕМ РАБОЧИЙ ТЕСТЕР

cat > /usr/local/bin/clamav-test << 'EOF'
#!/bin/bash

echo "=== ClamAV Detection Test ==="
echo

# Версия и базы
echo "Version: $(clamscan --version)"
echo
echo "Databases:"
for db in /var/lib/clamav/*.{cvd,cld} 2>/dev/null; do
    if [ -f "$db" ]; then
        version=$(sigtool --info "$db" 2>/dev/null | grep "Version:" | awk '{print $2}')
        sigs=$(sigtool --info "$db" 2>/dev/null | grep "Signatures:" | awk '{print $2}')
        size=$(ls -lh "$db" | awk '{print $5}')
        printf "  %-15s v%-7s %7s  %10s signatures\n" "$(basename $db):" "$version" "($size)" "$sigs"
    fi
done

echo
echo "Memory status:"
free -h | grep -E "^Mem|^Swap"

echo
echo "Testing EICAR detection:"

# Создаем правильный EICAR
EICAR='X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
echo "$EICAR" > /tmp/test-virus.txt

# Сканируем
echo -n "Result: "
if clamscan --no-summary /tmp/test-virus.txt 2>/dev/null | grep -q "FOUND"; then
    echo "✅ EICAR detected! ClamAV works correctly."
else
    echo "❌ EICAR not detected! Check your virus databases."
    echo
    echo "Trying to scan with verbose output:"
    clamscan -v /tmp/test-virus.txt 2>&1 | grep -E "FOUND|OK|Loading"
fi

rm -f /tmp/test-virus.txt

echo
echo "=== Test completed ==="
EOF

chmod +x /usr/local/bin/clamav-test

# Запускаем тест
/usr/local/bin/clamav-test

📋 ШАГ 8: ЕСЛИ ВСЕ ЕЩЕ НЕ РАБОТАЕТ

# Полная переустановка баз
echo "=== ПОЛНАЯ ПЕРЕУСТАНОВКА БАЗ ДАННЫХ ==="

# Останавливаем все процессы
pkill -f clam

# Очищаем старые базы
rm -rf /var/lib/clamav/*

# Скачиваем заново ВСЕ базы
cd /var/lib/clamav

for database in main.cvd daily.cvd bytecode.cvd; do
    echo "Downloading $database..."
    curl -L -o $database http://database.clamav.net/$database || \
    wget -O $database http://clamav-mirror.ru/$database || \
    wget -O $database http://db.local.clamav.net/$database

    if [ -f $database ]; then
        chown clamupdate:clamupdate $database
        echo "✓ $database downloaded"
    fi
done

# Проверяем
ls -lh *.cvd

cd -

# Финальный тест
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/final-test.txt
clamscan -v /tmp/final-test.txt
rm -f /tmp/final-test.txt

Выполните шаги 1-2 для обновления баз и покажите результат теста детекции!

🎉 ОТЛИЧНО! CLAMAV РАБОТАЕТ ПРАВИЛЬНО!


УСПЕШНАЯ ДЕТЕКЦИЯ:

  • ✓ Все 3 тестовых файла обнаружены как вирусы

  • ✓ База содержит 8,708,210 сигнатур

  • ✓ EICAR-Signature FOUND - правильная детекция


📋 ТЕПЕРЬ ПРОТЕСТИРУЕМ РЕАЛЬНОЕ СКАНИРОВАНИЕ

1. Быстрый тест производительности:

# Тестируем скорость и потребление памяти
echo "=== ТЕСТ ПРОИЗВОДИТЕЛЬНОСТИ ==="
echo "Память ДО сканирования:"
free -h | grep -E "^Mem|^Swap"

echo
echo "Сканируем небольшую директорию..."
time clamscan --infected --recursive --suppress-ok-results /etc 2>/dev/null

echo
echo "Память ПОСЛЕ сканирования:"
free -h | grep -E "^Mem|^Swap"

2. Проверяем работу наших скриптов:

# Тестируем clamctl
echo "=== ТЕСТ УПРАВЛЯЮЩЕГО СКРИПТА ==="
clamctl status

echo
echo "=== ТЕСТ СКАНИРОВАНИЯ ==="
# Создаем тестовую директорию
mkdir -p /tmp/scan-test
echo "clean file" > /tmp/scan-test/clean.txt
echo '<?php echo "test"; ?>' > /tmp/scan-test/test.php
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/scan-test/virus.txt

# Сканируем
clamctl scan /tmp/scan-test

# Очищаем
rm -rf /tmp/scan-test

📋 НАСТРОЙКА МОНИТОРИНГА ДЛЯ БИТРИКС

1. Создаем специальный сканер для Битрикс:

cat > /usr/local/bin/bitrix-scan << 'EOF'
#!/bin/bash

# ClamAV сканер для Битрикс
BITRIX_ROOT="/home/bitrix/www"
LOG_DIR="/var/log/clamav"
LOG_FILE="$LOG_DIR/bitrix-scan-$(date +%Y%m%d-%H%M).log"
QUARANTINE="/var/quarantine/clamav"

# Создаем необходимые директории
mkdir -p "$LOG_DIR" "$QUARANTINE"

echo "========================================" | tee $LOG_FILE
echo "   Bitrix Security Scan" | tee -a $LOG_FILE
echo "   Started: $(date)" | tee -a $LOG_FILE
echo "========================================" | tee -a $LOG_FILE

# Проверяем критические директории Битрикса
CRITICAL_DIRS=(
    "$BITRIX_ROOT/bitrix/admin"
    "$BITRIX_ROOT/bitrix/modules"
    "$BITRIX_ROOT/bitrix/php_interface"
    "$BITRIX_ROOT/local"
)

echo | tee -a $LOG_FILE
echo "Scanning critical Bitrix directories..." | tee -a $LOG_FILE

for dir in "${CRITICAL_DIRS[@]}"; do
    if [ -d "$dir" ]; then
        echo "Scanning: $dir" | tee -a $LOG_FILE
        clamscan \
            --infected \
            --recursive \
            --suppress-ok-results \
            --max-filesize=10M \
            --max-scansize=50M \
            --exclude-dir="cache" \
            --exclude-dir="managed_cache" \
            --exclude-dir="stack_cache" \
            --exclude="\.log$" \
            --move="$QUARANTINE" \
            "$dir" 2>&1 | tee -a $LOG_FILE
    fi
done

# Проверяем новые и измененные PHP файлы
echo | tee -a $LOG_FILE
echo "Checking recently modified PHP files..." | tee -a $LOG_FILE
find "$BITRIX_ROOT" -name "*.php" -mtime -7 -type f 2>/dev/null | head -100 | while read file; do
    clamscan --infected --suppress-ok-results "$file" 2>/dev/null | grep FOUND | tee -a $LOG_FILE
done

# Проверяем подозрительные паттерны в PHP файлах
echo | tee -a $LOG_FILE
echo "Checking for suspicious PHP patterns..." | tee -a $LOG_FILE
SUSP_COUNT=$(grep -r --include="*.php" -E "eval\(.*base64_decode|system\(.*\$_REQUEST|shell_exec\(.*\$_POST" "$BITRIX_ROOT" 2>/dev/null | grep -v "/bitrix/modules/" | wc -l)
if [ "$SUSP_COUNT" -gt 0 ]; then
    echo "⚠️ Found $SUSP_COUNT files with suspicious PHP code" | tee -a $LOG_FILE
    grep -r --include="*.php" -l -E "eval\(.*base64_decode|system\(.*\$_REQUEST|shell_exec\(.*\$_POST" "$BITRIX_ROOT" 2>/dev/null | grep -v "/bitrix/modules/" | head -10 | tee -a $LOG_FILE
fi

# Результаты
echo | tee -a $LOG_FILE
echo "========================================" | tee -a $LOG_FILE
INFECTED=$(grep -c "FOUND" $LOG_FILE 2>/dev/null || echo "0")
QUARANTINED=$(ls -1 $QUARANTINE 2>/dev/null | wc -l)

if [ "$INFECTED" -gt 0 ]; then
    echo "⚠️ THREATS DETECTED: $INFECTED" | tee -a $LOG_FILE
    echo "Files moved to quarantine: $QUARANTINED" | tee -a $LOG_FILE
    echo "Quarantine location: $QUARANTINE" | tee -a $LOG_FILE

    # Отправка в Telegram если настроено
    if [ -f /etc/telegram-bot.conf ]; then
        source /etc/telegram-bot.conf
        MESSAGE="🚨 Bitrix Security Alert on $(hostname)%0A%0AInfected files: $INFECTED%0AQuarantined: $QUARANTINED%0ACheck: $LOG_FILE"
        curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
            -d "chat_id=${CHAT_ID}" -d "text=$MESSAGE" > /dev/null 2>&1
    fi
else
    echo "✅ No threats detected" | tee -a $LOG_FILE
fi

echo "Scan completed: $(date)" | tee -a $LOG_FILE
echo "Log saved to: $LOG_FILE" | tee -a $LOG_FILE
echo "========================================" | tee -a $LOG_FILE
EOF

chmod +x /usr/local/bin/bitrix-scan

2. Создаем скрипт восстановления из карантина:

cat > /usr/local/bin/clamav-quarantine << 'EOF'
#!/bin/bash

QUARANTINE="/var/quarantine/clamav"

case "$1" in
    list)
        echo "=== Files in quarantine ==="
        if [ -d "$QUARANTINE" ]; then
            ls -la "$QUARANTINE" 2>/dev/null || echo "Quarantine is empty"
        else
            echo "Quarantine directory not found"
        fi
        ;;

    restore)
        if [ -z "$2" ]; then
            echo "Usage: $0 restore <filename>"
            exit 1
        fi
        FILE="$2"
        if [ -f "$QUARANTINE/$FILE" ]; then
            echo "Restoring $FILE..."
            ORIG_PATH=$(grep -l "$FILE" /var/log/clamav/*.log | tail -1 | xargs grep "$FILE" | grep "FOUND" | cut -d: -f1)
            if [ ! -z "$ORIG_PATH" ]; then
                mv "$QUARANTINE/$FILE" "$ORIG_PATH"
                echo "✓ Restored to: $ORIG_PATH"
            else
                echo "Original path not found. File remains in: $QUARANTINE/$FILE"
            fi
        else
            echo "File not found in quarantine: $FILE"
        fi
        ;;

    clean)
        echo "Cleaning quarantine older than 30 days..."
        find "$QUARANTINE" -type f -mtime +30 -delete
        echo "✓ Done"
        ;;

    *)
        echo "Usage: $0 {list|restore <file>|clean}"
        echo
        echo "  list           - Show quarantined files"
        echo "  restore <file> - Restore file from quarantine"
        echo "  clean          - Remove files older than 30 days"
        ;;
esac
EOF

chmod +x /usr/local/bin/clamav-quarantine

📋 НАСТРОЙКА РЕГУЛЯРНОГО СКАНИРОВАНИЯ

# Обновляем cron задания для Битрикс
cat > /etc/cron.d/bitrix-security << 'EOF'
# Битрикс безопасность с ClamAV

# Ежедневное сканирование Битрикс в 3:00
0 3 * * * root /usr/local/bin/bitrix-scan >/dev/null 2>&1

# Быстрая проверка новых файлов каждые 4 часа
0 */4 * * * root find /home/bitrix/www -name "*.php" -mmin -240 -type f -exec clamscan --quiet --infected {} \; 2>&1 | grep FOUND >> /var/log/clamav/quick-scan.log

# Еженедельная полная проверка в воскресенье в 2:00
0 2 * * 0 root clamscan -r --infected --log=/var/log/clamav/weekly-full.log /home/bitrix/www >/dev/null 2>&1

# Обновление баз ClamAV раз в день в 1:00
0 1 * * * root freshclam --quiet || wget -q -O /var/lib/clamav/daily.cvd http://clamav-mirror.ru/daily.cvd
EOF

📋 СОЗДАНИЕ ИТОГОВОЙ ПАНЕЛИ УПРАВЛЕНИЯ

cat > /usr/local/bin/security-panel << 'EOF'
#!/bin/bash

clear
echo "╔══════════════════════════════════════════╗"
echo "║       BITRIX SECURITY PANEL v1.0        ║"
echo "╠══════════════════════════════════════════╣"
echo "║                                          ║"
echo "║  1. Quick security scan (PHP files)     ║"
echo "║  2. Full Bitrix scan                    ║"
echo "║  3. Check ClamAV status                 ║"
echo "║  4. Update virus databases              ║"
echo "║  5. View infected files                 ║"
echo "║  6. Quarantine management               ║"
echo "║  7. View recent logs                    ║"
echo "║  8. Test virus detection                ║"
echo "║  9. System info                         ║"
echo "║  0. Exit                                 ║"
echo "║                                          ║"
echo "╚══════════════════════════════════════════╝"
echo
read -p "Select option: " choice

case $choice in
    1)
        echo "Starting quick scan..."
        clamctl scan /home/bitrix/www
        ;;
    2)
        echo "Starting full Bitrix scan..."
        /usr/local/bin/bitrix-scan
        ;;
    3)
        clamctl status
        ;;
    4)
        clamctl update
        ;;
    5)
        echo "=== Recently detected threats ==="
        grep "FOUND" /var/log/clamav/*.log 2>/dev/null | tail -20
        ;;
    6)
        /usr/local/bin/clamav-quarantine list
        ;;
    7)
        ls -lt /var/log/clamav/*.log | head -10
        read -p "Enter log file to view: " logfile
        [ -f "$logfile" ] && less "$logfile"
        ;;
    8)
        clamctl test
        ;;
    9)
        echo "=== System Information ==="
        free -h
        df -h /
        uptime
        ;;
    0)
        exit 0
        ;;
    *)
        echo "Invalid option"
        ;;
esac

echo
read -p "Press Enter to continue..."
exec $0
EOF

chmod +x /usr/local/bin/security-panel

ФИНАЛЬНАЯ ПРОВЕРКА УСТАНОВКИ

echo "================================================"
echo "    ✅ CLAMAV УСПЕШНО УСТАНОВЛЕН И РАБОТАЕТ!"
echo "================================================"
echo
echo "📊 СТАТУС:"
echo "  • Версия: ClamAV 1.4.3"
echo "  • Сигнатур: 8,708,210"
echo "  • EICAR тест: ✅ PASSED"
echo "  • Swap: 2GB добавлен"
echo
echo "🛠 ДОСТУПНЫЕ КОМАНДЫ:"
echo "  security-panel    - Панель управления"
echo "  bitrix-scan       - Сканировать Битрикс"
echo "  clamctl status    - Статус ClamAV"
echo "  clamctl scan      - Быстрое сканирование"
echo "  clamctl update    - Обновить базы"
echo
echo "📅 РАСПИСАНИЕ:"
echo "  • Обновление баз: ежедневно в 01:00"
echo "  • Сканирование Битрикс: ежедневно в 03:00"
echo "  • Быстрая проверка: каждые 4 часа"
echo "  • Полная проверка: воскресенье в 02:00"
echo
echo "📁 ВАЖНЫЕ ПУТИ:"
echo "  • Логи: /var/log/clamav/"
echo "  • Карантин: /var/quarantine/clamav/"
echo "  • Базы: /var/lib/clamav/"
echo
echo "🚀 Запустите: security-panel"
echo "================================================"

Отлично! ClamAV полностью работает. Теперь можете запустить security-panel или bitrix-scan для проверки вашего сайта!