119 lines
3.3 KiB
Bash
119 lines
3.3 KiB
Bash
#!/bin/bash
|
|
# =============================================================================
|
|
# Antivirus configuration module
|
|
# =============================================================================
|
|
|
|
# Set script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# Source common functions and variables
|
|
source "./common.sh"
|
|
|
|
# Function to install and configure ClamAV
|
|
configure_clamav() {
|
|
log_message "INFO" "Installing and configuring ClamAV antivirus"
|
|
|
|
# Install ClamAV if not already installed
|
|
if ! is_package_installed "clamav" || ! is_package_installed "clamav-daemon"; then
|
|
log_message "INFO" "Installing ClamAV and related packages"
|
|
apt-get install -y clamav clamav-daemon clamav-freshclam
|
|
|
|
if [ $? -ne 0 ]; then
|
|
log_message "ERROR" "Failed to install ClamAV"
|
|
return 1
|
|
fi
|
|
else
|
|
log_message "INFO" "ClamAV is already installed"
|
|
fi
|
|
|
|
# Configure ClamAV
|
|
local freshclam_conf="/etc/clamav/freshclam.conf"
|
|
|
|
log_message "INFO" "Configuring ClamAV"
|
|
backup_file "$freshclam_conf"
|
|
|
|
# Stop ClamAV services to update configuration
|
|
systemctl stop clamav-freshclam
|
|
systemctl stop clamav-daemon
|
|
|
|
# Configure freshclam (virus database updater)
|
|
sed -i 's/^Example/#Example/' "$freshclam_conf"
|
|
sed -i 's/^Checks.*/Checks 24/' "$freshclam_conf"
|
|
sed -i 's/^DatabaseMirror.*/DatabaseMirror db.local.clamav.net/' "$freshclam_conf"
|
|
|
|
log_message "SUCCESS" "ClamAV freshclam configuration updated"
|
|
|
|
# Create a daily scan script
|
|
local SCAN_SCRIPT="/etc/cron.daily/clamscan"
|
|
|
|
log_message "INFO" "Creating daily scan script"
|
|
|
|
cat > "$SCAN_SCRIPT" << 'EOF'
|
|
#!/bin/bash
|
|
|
|
# ClamAV daily scan script
|
|
# Generated by security hardening script
|
|
|
|
# Set log file
|
|
LOG_FILE="/var/log/clamav/daily_scan.log"
|
|
SCAN_DIR="/"
|
|
EXCLUDE_DIRS=("/sys" "/proc" "/dev" "/media" "/mnt" "/run" "/var/lib/clamav")
|
|
|
|
# Create log directory if it doesn't exist
|
|
mkdir -p /var/log/clamav
|
|
|
|
# Start log
|
|
echo "ClamAV daily scan started at $(date)" > "$LOG_FILE"
|
|
|
|
# Build exclude parameters
|
|
EXCLUDES=""
|
|
for dir in "${EXCLUDE_DIRS[@]}"; do
|
|
EXCLUDES="$EXCLUDES --exclude-dir=$dir"
|
|
done
|
|
|
|
# Run scan
|
|
clamscan -r $EXCLUDES --infected --detect-pua=yes --log="$LOG_FILE" --append "$SCAN_DIR"
|
|
|
|
# Email report if infected files found
|
|
INFECTED=$(grep -c "Infected files" "$LOG_FILE")
|
|
if [ "$INFECTED" -gt 0 ]; then
|
|
echo "Virus detected! See log at $LOG_FILE" | mail -s "ClamAV Virus Alert" root
|
|
fi
|
|
|
|
# End log
|
|
echo "ClamAV daily scan completed at $(date)" >> "$LOG_FILE"
|
|
EOF
|
|
|
|
chmod +x "$SCAN_SCRIPT"
|
|
log_message "SUCCESS" "ClamAV daily scan script created at $SCAN_SCRIPT"
|
|
|
|
# Restart ClamAV services
|
|
log_message "INFO" "Starting ClamAV services"
|
|
service start clamav-freshclam
|
|
service start clamav-daemon
|
|
|
|
if [ $? -eq 0 ]; then
|
|
log_message "SUCCESS" "ClamAV services started successfully"
|
|
else
|
|
log_message "ERROR" "Failed to start ClamAV services"
|
|
return 1
|
|
fi
|
|
|
|
# Update virus database
|
|
log_message "INFO" "Updating ClamAV virus database"
|
|
freshclam
|
|
|
|
if [ $? -eq 0 ]; then
|
|
log_message "SUCCESS" "ClamAV virus database updated successfully"
|
|
else
|
|
log_message "WARNING" "ClamAV virus database update encountered issues"
|
|
fi
|
|
}
|
|
|
|
#
|
|
log_message "SCRIPT" "antivirus.sh"
|
|
|
|
# Main execution for antivirus
|
|
configure_clamav
|
|
|
|
log_message "SUCCESS" "Antivirus configuration completed" |