====== Virenscan-script ======
Mit diesem Script kann man Daten mit mehrere Scanengines prüfen.
Es sollte ein separater Benutzer zur Ausführung des Programms verwendet werden.
Dieser hat dann auch Berechtigungen auf die jew. Datenverzeichnisse und Unterverzeichnisse.
Es wird davon ausgegangen das die Dateien über eine Webseite in das Verzeichnigs ''/virusscan/upload'' hochgeladen werden.
Hier ein Beispiel:
User1 = ghostbuster Mitglied der Gruppe "quarentine" (Benutzer der die Daten bearbeiten kann und das Virenscan-Script startet)
User2 = quarentine (Benutzer dem das Quarantäneverzeichnis gehört)
Ordnerstruktur:
^ ^ Ort ^ Berechtigungen ^
^ Programmverzeichnis | ''/usr/local/bin'' | chown ghostbuster. /usr/local/bin/virusscan.sh
chown ghostbuster. /usr/local/bin/scanner.sh
chmod 700 /usr/local/bin/virusscan.sh
chmod 700 /usr/local/bin/scanner.sh
|
^ Konfigurationsverzeichnis | ''/etc/virusengines'' | |
^ Dateiverzeichnis | ''/virusscan'' | chgrp ghostbuster /virusscan
chmod g+x /virusscan
|
^ Quarantäneverzeichnis | ''/virusscan/quarentine'' | chgrp quarentine. /virusscan/quarentine
chmod g+x /virusscan/quarentine
|
^ Tempverzeichnis | ''/virusscan/tmp'' | chgrp ghostbuster. /virusscan
chmod 760 /virusscan/tmp
|
^ Scanverzeichnis | ''/virusscan/toScan'' | chgrp ghostbuster /virusscan/toScan
|
^ Quellverzeichnis | ''/virusscan/upload'' | chown www-data. /virusscan/upload
chmod g+x /virusscan/upload
|
^ Logverzeichnis | ''/var/log/virusengines/'' | chgrp ghostbuster /var/log/virusengines
chmod g+x /var/log/virusengines
Hier eine Erläuterung zum Programmablauf.
===== virusscan.sh =====
Das Programm hat folgende Funktionen:
- prüfen ob das Programm bereits läuft
- verschiebt Dateien, samt der vorhandenen Ordnerstrucktur, aus dem Ordner ''/virusscan/upload'' in den Ordner ''/virusscan/toScan''
- Dateiliste der zu überprüfenden Dateien erstellen
- Inhalte der Dateiliste mit mehreren Virus-Scanengines prüfen (Aufruf der Funktionen aus dem Programm ''scanner.sh'')
- saubere Daten verbleiben im Ordner ''/virusscan/toScan''
- infizierte Daten werden in den Ordner ''/virusscan/quarentine'' verschoben
- eine Freigabe in den lokalen Ordner '''' mounten
- geprüfte und saubere Dateien werden, samt der vorhandenen Ordnerstrucktur, in den Ordner '''' verschoben
- Mountpoint '''' unmounten
Script:
#!/bin/bash
#
#
#
# Dieses Script scannt Dateien mit verschiedenen Virenscannern
# und verschiebt diese wenn sie sauber sind.
# Bei Viren-Fund werden die Dateien in ein Quarantäne-Verzeichnis
# verschoben und eine Mail versand.
#
############
## Hier den/die Virenscanengines (leerzeichen getrennt) angeben
SCANNER="clamscan"
############
############
## Konfiguration zum Mail Versandt
MAIL_SERVER=":25"
EMAIL_SUB="Viren bei HTTP-Upload gefunden."
EMAIL_FROM=""
EMAIL_TO=""
EMAIL_OPT="-o message-charset=utf-8"
############
############
## Mountverzeichnis
MOUNT_DIR=
############
############
## Ab Hier nichts mehr verändern
############
PROG_DIR=/usr/local/bin
CONF_DIR=/etc/virusengines
FILES_DIR=/virusscan
LOG_DIR=/var/log/virusengines
SCANFILE_DIR=${FILES_DIR}/toScan
INFECTED_DIR=${FILES_DIR}/quarentine
TEMP_DIR=${FILES_DIR}/tmp
UPLOAD_DIR=${FILES_DIR}/upload
SCANFILELIST=files-to-scan.txt
MOVEFILELIST=files-to-move.txt
RSYNC=/usr/bin/rsync
RSYNC_OPT="--remove-source-files"
PROC_CHECK=`pgrep -c virusscan.sh`
## Check: Läuft das Programm noch?
if [ ${PROC_CHECK} -gt 1 ]; then
exit 5
else
source ${PROG_DIR}/scanner.sh
## Alle Dateien von "Upload" nach "toScan" verschieben
${RSYNC} -a ${RSYNC_OPT} ${UPLOAD_DIR}/* ${SCANFILE_DIR}
## Liste mit zu scannenden Dateien erstellen
find ${SCANFILE_DIR} -type f > ${FILES_DIR}/${SCANFILELIST}
## Scan
for x in ${SCANNER}; do
${x}
done
## Aufräumen
rm ${FILES_DIR}/${SCANFILELIST}
## DFS mounten und saubere Dateien dahin verschieben
sudo mount ${MOUNT_DIR}
${RSYNC} -r ${RSYNC_OPTS} ${SCANFILE_DIR}/* ${MOUNT_DIR}
sudo umount ${MOUNT_DIR}
fi
===== scanner.sh =====
Diese Programm steuert u. a. die einzelnen Antiviren-Scanengines.
Grundsätzlich wird folgendes getan:
- Funktion, für die jew. Scanengine, für das Programm ''virusscan.sh'' bereitstellen
- Konfiguration für die jew. Scanengine aus der ".conf" Datei aus dem Ordner ''/virusscan/scanner-files'' auslesen
- Scanengine mit den jew. Einstellungen starten
- Im Log nach Virenfund suchen
- bei einem Virenfund eine Mail mit der Log-Datei der Scanengine versenden
Script (hier z.B. für die Scanengine "clamscan"):
#!/bin/bash
function clamscan () {
source ${CONF_DIR}/${FUNCNAME[0]}.conf
${BIN} ${OPTS} > ${LOG}
MALWARE=$(tail "${LOG}"|grep Infected|cut -d" " -f3);
if [ "$MALWARE" -ne "0" ];then
sendEmail -o ${EMAIL_OPT} -u ${EMAIL_SUB} -a "$LOG" -s ${MAIL_SERVER} -f "$EMAIL_FROM" -t "$EMAIL_TO" -m "Die Scanengine '${FUNCNAME[0]}' hat eine verdächtige Datei gefunden. \n Weitere Infos finden Sie in der Log-Datei.";
fi
}
Konfigurationsdatei ''clamscan.conf'' (hier z.B. für die Scanengine "clamscan"):
BIN=/usr/bin/${x}
LOG=${LOG_DIR}/${x}.log
OPTS="--infected --suppress-ok-results --tempdir=${TEMP_DIR} --recursive --allmatch --file-list=${FILES_DIR}/${SCANFILELIST} --move=${INFECTED_DIR} --detect-pua --detect-structured --scan-mail --scan-pe --scan-elf --scan-ole2 --scan-pdf --scan-swf --scan-html --scan-archive --detect-broken --block-encrypted"
==== Neue Engine hinzufügen ====
- Scanengine installieren
- Konfigurationsdatei erstellen und wie folgt benennen .conf (Datei ''/etc/virusengines/scan-leer.conf'' kopieren und verwenden)
- Funktion im Programm ''scanner.sh'' definieren (**WICHTIG**: ggf. die Suchbegriffe für die Variable "MALWARE" anpassen)
- neue Funktion im Programm ''virusscan.sh'' in der Variable ''SCANNER'' hinzufügen (durch Leerzeichen getrennt)
- neue Scanengine testen