ClamAV1) ist ein unter der GNU GPL2) stehender Virenscanner. ClamAV beinhaltet eine Bibliothek, zur Einbindung in eigene Programme und Abläufe, dem ClamAV-Daemon und sowie eine Kommandozeilenapplikation.
Hauptsächlich wird ClamAV im Zusammenhang mit Postfix und AMaViS genutzt - nachfolgend zeigt die Installation auf einen LINUX-Desktop - so könnte man dann erhaltene Dateien von einem Fremdsystem auf unerwünschte „Mitbringsel“ (Schadcode) hin überprüfen. Die installation von ClamAV im Mailserverumfeld ist hier beschrieben.
Als erstes installieren wir uns die benötigten Server-Komponenten via YUM. Da die benötigten Pakete aus dem rpmforge-Repository kommen, wird die korrekte Einbindung dieses 3rd-party Repositories vorausgesetzt. Wie das geht, steht hier.
# yum install clamd clamav clamav-db clamtk -y
Was uns die einzelnen Pakete mitliefern, offentbart uns jeweils ein rpm -iql.
# rpm -iql clamd Name : clamd Relocations: (not relocatable) Version : 0.99.1 Vendor: Dag Apt Repository, http://dag.wieers.com/apt/ ... ... Size : 514863 License: GPL Signature : DSA/SHA1, Mo 04 Mai 2009 22:13:20 CEST, Key ID a20e52146b8d79e6 Packager : Dag Wieers <dag@wieers.com> URL : http://www.clamav.net/ Summary : The Clam AntiVirus Daemon Description : The Clam AntiVirus Daemon /etc/clamd.conf /etc/logrotate.d/clamav /etc/rc.d/init.d/clamd /usr/bin/clamconf /usr/bin/clamdscan /usr/bin/clamdtop /usr/sbin/clamd /usr/share/doc/clamd-0.95.1 /usr/share/doc/clamd-0.95.1/clamd.conf /usr/share/doc/clamd-0.95.1/clamdwatch /usr/share/doc/clamd-0.95.1/clamdwatch/clamdwatch.tar.gz /usr/share/man/man1/clamconf.1.gz /usr/share/man/man1/clamdscan.1.gz /usr/share/man/man1/clamdtop.1.gz /usr/share/man/man5/clamd.conf.5.gz /usr/share/man/man8/clamd.8.gz /var/clamav /var/log/clamav /var/log/clamav/clamd.log /var/run/clamav
# rpm -iql clamav-db Name : clamav-db Relocations: (not relocatable) Version : 0.99.1 Vendor: Dag Apt Repository, http://dag.wieers.com/apt/ ... ... Size : 21126396 License: GPL Signature : DSA/SHA1, Mo 04 Mai 2009 22:13:19 CEST, Key ID a20e52146b8d79e6 Packager : Dag Wieers <dag@wieers.com> URL : http://www.clamav.net/ Summary : Virus database for clamav Description : The actual virus database for clamav /etc/cron.daily/freshclam /etc/logrotate.d/freshclam /var/clamav /var/clamav/daily.cvd /var/clamav/main.cvd /var/log/clamav /var/log/clamav/freshclam.log
# rpm -iql clamav Name : clamav Relocations: (not relocatable) Version : 0.99.1 Vendor: Dag Apt Repository, http://dag.wieers.com/apt/ ... ... Size : 5077647 License: GPL Signature : DSA/SHA1, Mo 04 Mai 2009 22:13:20 CEST, Key ID a20e52146b8d79e6 Packager : Dag Wieers <dag@wieers.com> URL : http://www.clamav.net/ Summary : Anti-virus software Description : Clam AntiVirus is a GPL anti-virus toolkit for UNIX. The main purpose of this software is the integration with mail servers (attachment scanning). The package provides a flexible and scalable multi-threaded daemon, a command line scanner, and a tool for automatic updating via Internet. The programs are based on a shared library distributed with the Clam AntiVirus package, which you can use with your own software. Most importantly, the virus database is kept up to date /etc/freshclam.conf /usr/bin/clamscan /usr/bin/freshclam /usr/bin/sigtool /usr/lib/libclamav.so /usr/lib/libclamav.so.6 /usr/lib/libclamav.so.6.0.3 /usr/lib/libclamunrar.so /usr/lib/libclamunrar.so.6 /usr/lib/libclamunrar.so.6.0.3 /usr/lib/libclamunrar_iface.so /usr/lib/libclamunrar_iface.so.6 /usr/lib/libclamunrar_iface.so.6.0.3 /usr/share/doc/clamav-0.95.1 /usr/share/doc/clamav-0.95.1/AUTHORS /usr/share/doc/clamav-0.95.1/BUGS /usr/share/doc/clamav-0.95.1/COPYING /usr/share/doc/clamav-0.95.1/ChangeLog /usr/share/doc/clamav-0.95.1/FAQ /usr/share/doc/clamav-0.95.1/INSTALL /usr/share/doc/clamav-0.95.1/NEWS /usr/share/doc/clamav-0.95.1/README /usr/share/doc/clamav-0.95.1/clamav-mirror-howto.pdf /usr/share/doc/clamav-0.95.1/clamdoc.pdf /usr/share/doc/clamav-0.95.1/freshclam.conf /usr/share/doc/clamav-0.95.1/phishsigs_howto.pdf /usr/share/doc/clamav-0.95.1/signatures.pdf /usr/share/doc/clamav-0.95.1/test /usr/share/doc/clamav-0.95.1/test/.split /usr/share/doc/clamav-0.95.1/test/.split/split.clam-aspack.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-aspack.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-fsg.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-fsg.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-mew.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-mew.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-nsis.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-nsis.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-pespin.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-pespin.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-petite.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-petite.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-upack.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-upack.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-upx.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-upx.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-v2.raraa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-v2.rarab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-v3.raraa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-v3.rarab /usr/share/doc/clamav-0.95.1/test/.split/split.clam-wwpack.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam-wwpack.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.arjaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.arjab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.bz2.zipaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.bz2.zipab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.cabaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.cabab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.chmaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.chmab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.d64.zipaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.d64.zipab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.ea05.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.ea05.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.ea06.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.ea06.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.binhexaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.binhexab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.bz2aa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.bz2ab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.htmlaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.htmlab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.mbox.base64aa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.mbox.base64ab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.mbox.uuaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.mbox.uuab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.rtfaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.rtfab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.szddaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exe.szddab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exeaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.exeab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.impl.zipaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.impl.zipab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.mailaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.mailab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.ole.docaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.ole.docab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.pdfaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.pdfab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.pptaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.pptab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.sisaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.sisab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.tar.gzaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.tar.gzab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.tnefaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.tnefab /usr/share/doc/clamav-0.95.1/test/.split/split.clam.zipaa /usr/share/doc/clamav-0.95.1/test/.split/split.clam.zipab /usr/share/doc/clamav-0.95.1/test/Makefile /usr/share/doc/clamav-0.95.1/test/Makefile.am /usr/share/doc/clamav-0.95.1/test/Makefile.in /usr/share/doc/clamav-0.95.1/test/README /usr/share/doc/clamav-0.95.1/test/clam-aspack.exe /usr/share/doc/clamav-0.95.1/test/clam-fsg.exe /usr/share/doc/clamav-0.95.1/test/clam-mew.exe /usr/share/doc/clamav-0.95.1/test/clam-nsis.exe /usr/share/doc/clamav-0.95.1/test/clam-pespin.exe /usr/share/doc/clamav-0.95.1/test/clam-petite.exe /usr/share/doc/clamav-0.95.1/test/clam-upack.exe /usr/share/doc/clamav-0.95.1/test/clam-upx.exe /usr/share/doc/clamav-0.95.1/test/clam-v2.rar /usr/share/doc/clamav-0.95.1/test/clam-v3.rar /usr/share/doc/clamav-0.95.1/test/clam-wwpack.exe /usr/share/doc/clamav-0.95.1/test/clam.arj /usr/share/doc/clamav-0.95.1/test/clam.bz2.zip /usr/share/doc/clamav-0.95.1/test/clam.cab /usr/share/doc/clamav-0.95.1/test/clam.chm /usr/share/doc/clamav-0.95.1/test/clam.d64.zip /usr/share/doc/clamav-0.95.1/test/clam.ea05.exe /usr/share/doc/clamav-0.95.1/test/clam.ea06.exe /usr/share/doc/clamav-0.95.1/test/clam.exe /usr/share/doc/clamav-0.95.1/test/clam.exe.binhex /usr/share/doc/clamav-0.95.1/test/clam.exe.bz2 /usr/share/doc/clamav-0.95.1/test/clam.exe.html /usr/share/doc/clamav-0.95.1/test/clam.exe.mbox.base64 /usr/share/doc/clamav-0.95.1/test/clam.exe.mbox.uu /usr/share/doc/clamav-0.95.1/test/clam.exe.rtf /usr/share/doc/clamav-0.95.1/test/clam.exe.szdd /usr/share/doc/clamav-0.95.1/test/clam.impl.zip /usr/share/doc/clamav-0.95.1/test/clam.mail /usr/share/doc/clamav-0.95.1/test/clam.ole.doc /usr/share/doc/clamav-0.95.1/test/clam.pdf /usr/share/doc/clamav-0.95.1/test/clam.ppt /usr/share/doc/clamav-0.95.1/test/clam.sis /usr/share/doc/clamav-0.95.1/test/clam.tar.gz /usr/share/doc/clamav-0.95.1/test/clam.tnef /usr/share/doc/clamav-0.95.1/test/clam.zip /usr/share/man/man1/clamscan.1.gz /usr/share/man/man1/freshclam.1.gz /usr/share/man/man1/sigtool.1.gz /usr/share/man/man5/freshclam.conf.5.gz
# rpm -iql clamtk Name : clamtk Relocations: (not relocatable) Version : 3.67 Vendor: Dag Apt Repository, http://dag.wieers.com/apt/ ... ... Size : 110094 License: Perl Signature : DSA/SHA1, Di 27 Mai 2008 02:00:39 CEST, Key ID a20e52146b8d79e6 Packager : Dag Wieers <dag@wieers.com> URL : http://clamtk.sourceforge.net/ Summary : Easy to use front-end for ClamAV Description : ClamTk is a front-end, point and click gui for ClamAV on Linux systems. It supports easy signature-updates. /usr/bin/clamtk /usr/share/applications/rpmforge-clamtk.desktop /usr/share/doc/clamtk-3.09 /usr/share/doc/clamtk-3.09/CHANGES /usr/share/doc/clamtk-3.09/DISCLAIMER /usr/share/doc/clamtk-3.09/LICENSE /usr/share/doc/clamtk-3.09/README /usr/share/man/man1/clamtk.1.gz /usr/share/pixmaps/clamtk.png /usr/share/pixmaps/clamtk.xpm
Nun ist es an der Zeit unseren ClamAV-Daemon das erste mal zu starten.
# service clamd start
Starting Clam AntiVirus Daemon: LibClamAV Warning: ************************************************** LibClamAV Warning: *** The virus database is older than 7 days! *** LibClamAV Warning: *** Please update it as soon as possible. *** LibClamAV Warning: ************************************************** [ OK ]
Wir müssen also unser Virendatenbank erst einmal updaten - Hierzu nutzen wir das Programm freshclam aus dem Paket clamav. Wir stoppen nun erst einmal unseren Daemon uns fahren mit der Installation und Konfiguration der weiteren Schritte fort.
# service clamd stop
Stopping Clam AntiVirus Daemon: [ OK ]
Damit nun unser ClamAV-Daemon beim Booten automatisch gestartet wird, nehmen wir noch folgende Konfigurationsschritte vor.
# chkconfig clamd on
Anschließend überprüfen wir noch unsere Änderung:
# chkconfig --list | grep clamd clamd 0:Aus 1:Aus 2:Ein 3:Ein 4:Ein 5:Ein 6:Aus
Damit ClamAV stets mit den aktuellen Vireninformationen versorgen wird, steht und das Programm freshclam aus dem Paket clamav zu Diensten.
In der Standardkonfiguration sorgt freshclam dafür, dass 1x am Tag ein Update der Virenpattern-Datenbank vorgenommen wird. Bei Bedarf können wir den Updatezyklus unseren Erfordernissen anpassen und so z.B. alle Stunde überprüfen lassen ob neue Patternfiles vorhanden sind und diese dann auf unseren Rechner herunterzuladen und in die lokale Datenbak einfließen zu lassen. Hierbei stehen uns prinzipiell zwei Mechanismen zur Verfügung, die crontab und der Daemon-Modus. Beide Varianten könnten im System parallel genutzt werden - nachfolgend werden bei Möglichkeiten kurz beschrieben.
Die erste und einfache Variante besteht darin das Update-Script, welches sich mit dem Namen freshclam aktuell und standardmäßig unter /etc/cron.daily befindet, nach /etc/cron.hourly/ zu verschieben. Das Updatescript beinhaltet folgende Parameter und Aufrufe:
#!/bin/sh ### A simple update script for the clamav virus database. ### This could as well be replaced by a SysV script. ### fix log file if needed LOG_FILE="/var/log/clamav/freshclam.log" if [ ! -f "$LOG_FILE" ]; then touch "$LOG_FILE" chmod 644 "$LOG_FILE" chown clamav.clamav "$LOG_FILE" fi /usr/bin/freshclam \ --quiet \ --datadir="/var/clamav" \ --log="$LOG_FILE" \ --daemon-notify="/etc/clamd.conf"
Wir verschieben also das Script bei Bedarf nach /etc/cron.hourly/.
# mv /etc/cron.daily/freshclam /etc/cron.hourly/
Die zuvor erwähnte zweite Möglichkeit zum Updaten der Virenpattern-Datenbank ist die Nutzung des freshclam-Daemons, der im Hintergrund läuft und regelmäßig zu den Pattenservern eine Abfrage startet.
Da bei unserer Installation kein passendes Init-V-Script mitgeliefert wurde legen wir uns ein eigenes Startscript an.
# vim /etc/init.d/freshclamd
#!/bin/sh # # freshclamd Init Script to start/stop the freshclamd. # # chkconfig: - 62 38 # description: freshclam is an update daemon for Clam AV database. # # processname: freshclamd # config: /etc/freshclam.conf # pidfile: /var/run/clamav/freshclam.pid # Source function library . /etc/init.d/functions # Get network config . /etc/sysconfig/network test -f /etc/freshclam.conf || exit 0 RETVAL=0 DATA_DIR="/var/clamav" CLAMD_CONF_FILE="/etc/clamd.conf" LOG_FILE="/var/log/clamav/freshclam.log" if [ ! -f "$LOG_FILE" ]; then touch "$LOG_FILE" chmod 644 "$LOG_FILE" chown clamav.clamav "$LOG_FILE" fi start() { echo -n $"Starting freshclam: " # Start me up! # --log="$LOG_FILE" \ # --log-verbose \ daemon /usr/bin/freshclam -d -p /var/run/clamav/freshclam.pid \ -c 48 \ --quiet \ --datadir="$DATA_DIR" \ --daemon-notify="$CLAMD_CONF_FILE" RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/freshclam return $RETVAL } stop() { echo -n $"Stopping freshclam: " killproc freshclam RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/run/clamav/freshclam.pid /var/lock/subsys/freshclam return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading DB: " killproc freshclam -ALRM RETVAL=$? echo return $RETVAL } case "$1" in start) start ;; stop) stop ;; status) status freshclam ;; restart) restart ;; condrestart) [ -f /var/lock/subsys/freshclam ] && restart || : ;; reload) reload ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}" exit 1 esac exit $?
Anschließend passen wir noch die Dateirechte an:
# chmod +x /etc/init.d/freshclamd
Wir passen nun in der Konfigurationsdatei /etc/freshclam.conf das Updateintervall unseren Vorstellungen entsprechend an.
# vim /etc/freshclam.conf ... # Number of database checks per day. # Default: 12 (every two hours) # Django 17.05.2009 für halbstündlichen Virenpatterndatenbankcheck Checks 48 ...
Unseren Updatemechanismus freshclam-daemon starten wir wie gewohnt mit:
# service freshclamd start Starting freshclam: [ OK ]
Im Logfile /var/log/clamav/freshclam.log wird der Programmaufruf entsprechend dokumentiert:
# tail -f /var/log/clamav/freshclam.log -------------------------------------- freshclam daemon 0.95.1 (OS: linux-gnu, ARCH: i386, CPU: i386) ClamAV update process started at Sun May 17 22:15:13 2009 Downloading main-51.cdiff [100%] main.cld updated (version: 51, sigs: 545035, f-level: 42, builder: sven) WARNING: getfile: daily-9214.cdiff not found on remote server (IP: 193.27.50.222) WARNING: getpatch: Can't download daily-9214.cdiff from db.de.clamav.net Trying host db.de.clamav.net (213.174.32.130)... WARNING: getfile: daily-9214.cdiff not found on remote server (IP: 213.174.32.130) WARNING: getpatch: Can't download daily-9214.cdiff from db.de.clamav.net Trying host db.de.clamav.net (212.1.60.18)... WARNING: getfile: daily-9214.cdiff not found on remote server (IP: 212.1.60.18) WARNING: getpatch: Can't download daily-9214.cdiff from db.de.clamav.net WARNING: Incremental update failed, trying to download daily.cvd Trying host db.de.clamav.net (130.133.110.67)... Downloading daily.cvd [100%] daily.cvd updated (version: 9365, sigs: 5249, f-level: 42, builder: mcichosz) Database updated (550284 signatures) from db.de.clamav.net (IP: 130.133.110.67) --------------------------------------
Damit nun unser freshcam-Daemon beim Booten automatisch gestartet wird, nehmen wir noch folgende Konfigurationsschritte vor.
# chkconfig freshclamd on
Anschließend überprüfen wir noch unsere Änderung:
# chkconfig --list | grep freshclamd freshclamd 0:Aus 1:Aus 2:Ein 3:Ein 4:Ein 5:Ein 6:Aus
Da unsere Virendatenbank nun uptodate ist können wir den clamav-Daemon nun ohne Fehlermeldung starten:
# service clamd start Starting Clam AntiVirus Daemon: [ OK ]
Im Logfile /var/log/clamav/clamd.log wir der Programmstart entsprechend dokumentiert:
Sun May 17 22:20:12 2009 -> +++ Started at Sun May 17 22:20:12 2009 Sun May 17 22:20:12 2009 -> clamd daemon 0.99.1 (OS: linux-gnu, ARCH: i386, CPU: i386) Sun May 17 22:20:12 2009 -> Running as user clamav (UID 101, GID 105) Sun May 17 22:20:12 2009 -> Log file size limit disabled. Sun May 17 22:20:12 2009 -> Reading databases from /var/clamav Sun May 17 22:20:12 2009 -> Not loading PUA signatures. Sun May 17 22:20:13 2009 -> Loaded 549731 signatures. Sun May 17 22:20:13 2009 -> TCP: Bound to address 127.0.0.1 on port 3310 Sun May 17 22:20:13 2009 -> TCP: Setting connection queue length to 30 Sun May 17 22:20:13 2009 -> LOCAL: Unix socket file /var/run/clamav/clamd.sock Sun May 17 22:20:13 2009 -> LOCAL: Setting connection queue length to 30 Sun May 17 22:20:13 2009 -> Limits: Global size limit set to 104857600 bytes. Sun May 17 22:20:13 2009 -> Limits: File size limit set to 26214400 bytes. Sun May 17 22:20:13 2009 -> Limits: Recursion level limit set to 16. Sun May 17 22:20:13 2009 -> Limits: Files limit set to 10000. Sun May 17 22:20:13 2009 -> Archive support enabled. Sun May 17 22:20:13 2009 -> Algorithmic detection enabled. Sun May 17 22:20:13 2009 -> Portable Executable support enabled. Sun May 17 22:20:13 2009 -> ELF support enabled. Sun May 17 22:20:13 2009 -> Detection of broken executables enabled. Sun May 17 22:20:13 2009 -> Mail files support enabled. Sun May 17 22:20:13 2009 -> OLE2 support enabled. Sun May 17 22:20:13 2009 -> PDF support enabled. Sun May 17 22:20:13 2009 -> HTML support enabled. Sun May 17 22:20:13 2009 -> Self checking every 600 seconds.
Um auf der Konsole ein Verzeichnis zu scannen rufen wir einfach clamscan auf:
$ clamscan /home/django/.bash_history: OK /home/django/.bash_profile: OK /home/django/.bash_logout: OK /home/django/.viminfo: OK /home/django/.bashrc: OK /home/django/eicarcom2.zip: Eicar-Test-Signature FOUND ----------- SCAN SUMMARY ----------- Known viruses: 549731 Engine version: 0.95.1 Scanned directories: 1 Scanned files: 6 Infected files: 1 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 1.047 sec (0 m 1 s)
In dem oben genannten Beispiel wurde eine Datei bemängelt, in der sich die Eicar-Test-Signatur befindet. Diese Virensignaturen können zum testen direkt von der Eicar-Webseite herunter geladen werden.
Möchte man ein ganzes Verzeichnis und die Unterverzeichnisse durchsuchen, so muss man beim Aufruf die Option -r angeben.
$ clamscan -r /home/django/
Alternativ kann man auch das Programm clamtk einem GUI3) nutzen.
Wollen wir einen automatischen Scan-Lauf eines Verzeichnisses in regelmäßigen Abständen vornehmen, bedienen wir uns eines einfachen Shell-Scripts.
Im Verzeichnis /usr/local/bin/ legen wir uns nun das entsprechende Script an.
# vim /usr/local/bin/virusscan
#!/bin/bash ############################################################################## # Script-Name : virusscan # # Description : CLamAV-Scan for a directory. When a virus was found a e-Mail # # will be send to the Administration. # # # # Last update : 19.10.2009 # # Version : 0.01 # ############################################################################## ############################################################################## # H I S T O R Y # ############################################################################## # Version : 0.01 # # Description : initial release # # -------------------------------------------------------------------------- # ############################################################################## # Source function library. . /etc/init.d/functions # Source variable declarations. SCAN_DIRECTORY="/home/" SCAN_TEMP_FILE="/tmp/virusscan.tmp" HOST=$(hostname) MAIL="/bin/mail" MAIL_TO="root@nausch.org" ############################################################################## # Check if temp file exist, and delete them. # ############################################################################## if [ -e "$SCAN_TEMP_FILE" ]; then echo -n $"Lösche temporäre Datei $SCAN_TEMP_FILE... " `rm $SCAN_TEMP_FILE -f` # Check if delete of temp file was successful. if [ "$?" != "0" ]; then failure; echo exit 3 else success; echo fi fi ############################################################################## # Scan a directory recursly. # ############################################################################## echo -n $"Scanne das Verzeichnis: $SCAN_DIRECTORY... " /usr/bin/clamscan -r $SCAN_DIRECTORY > $SCAN_TEMP_FILE if [ "$?" -gt 1 ]; then failure; echo echo "Return-Code clamscan: [$?], (man clamscan) !" exit 4 else success; echo fi ############################################################################## # Check if a virus was found, and send a e-Mail if true. # ############################################################################## echo -n $"Ergebnis des Virenscanns " if [ -n "`grep FOUND $SCAN_TEMP_FILE`" ]; then warning; echo cat ${SCAN_TEMP_FILE} | ${MAIL} -s "!!! VIRUS GEFUNDEN @ ${HOST} !!!" ${MAIL_TO} else success; echo fi # End of script; exit 0
Möchten wir einzelne Verzeichnisse nur teilweise, oder auch mehrere verschiedene Verzeichnisse scannen, so nutzen wir einfach eine klein wenig erweiterte Version des vorgenannten Scriptes.
#!/bin/bash ############################################################################## # Script-Name : virusscan.sh # # Description : Automatisierter CLamAV-Scan für Verzeichnisse. # # Sollte ein Virus gefunden werden, wird der System- # # administrator per eMail informiert. # # # # Last update : 17.06.2011 # # Version : 0.02 # ############################################################################## ############################################################################## # H I S T O R Y # ############################################################################## # -------------------------------------------------------------------------- # # Version : 0.02 # # Description : Umstellung auf einzeln zu definierende Scanbereiche # # -------------------------------------------------------------------------- # # Version : 0.01 # # Description : initiale Version mit Definition eines einzelnen # # Verzeichnisses, welches gescannt werden soll. # ############################################################################## # Source function library. . /etc/init.d/functions # Source variable declarations. ARRAY=( "/home/admin/" "/home/django/" "/root/" "/var/www/html/") SCAN_DIRECTORY="/home/" SCAN_TEMP_FILE="/tmp/virusscan.tmp" HOST=$(hostname) MAIL="/bin/mailx" MAIL_TO="root@nausch.org" ############################################################################## # Check if dms directory is mounted via DRBD # ############################################################################## #if [ ! -d "$SCAN_DIRECTORY" ]; then # echo -n $"Server ist nicht der aktive DRBD-Knoten! " # success; echo # exit 2 #fi ############################################################################## # Check if temp file exist, and delete them. # ############################################################################## if [ -e "$SCAN_TEMP_FILE" ]; then echo -n $"Lösche temporäre Datei $SCAN_TEMP_FILE ... " `rm $SCAN_TEMP_FILE -f` touch $SCAN_TEMP_FILE # Check if delete of temp file was successful. if [ "$?" != "0" ]; then failure; echo exit 3 else success; echo fi fi ############################################################################## # Scan a directory recursly. # ############################################################################## ELEMENTS=${#ARRAY[@]} echo $"Anzahl der definierten Verzeichnisse: $ELEMENTS" for (( i=0;i<$ELEMENTS;i++)); do echo -n $"Scanne das Verzeichnis: ${ARRAY[${i}]} ..." /usr/bin/clamscan -r ${ARRAY[${i}]} >> $SCAN_TEMP_FILE if [ "$?" -gt 1 ]; then failure; echo echo "Return-Code clamscan: [$?], (man clamscan) !" exit 4 else success; echo fi done #echo -n $"Scanne das Verzeichnis: $SCAN_DIRECTORY... " # #/usr/bin/clamscan -r $SCAN_DIRECTORY > $SCAN_TEMP_FILE #if [ "$?" -gt 1 ]; then # failure; echo # echo "Return-Code clamscan: [$?], (man clamscan) !" # exit 4 #else # success; echo #fi ############################################################################## # Check if a virus was found, and send a e-Mail if true. # ############################################################################## echo -n $"Ergebnis des Virenscanns " if [ -n "`grep FOUND $SCAN_TEMP_FILE`" ]; then warning; echo grep FOUND ${SCAN_TEMP_FILE} | ${MAIL} -s "!!! VIRUS GEFUNDEN @ ${HOST}!!!" ${MAIL_TO} # cat ${SCAN_TEMP_FILE} | ${MAIL} -s "!!! VIRUS GEFUNDEN @ ${HOST} !!!" ${MAIL_TO} else success; echo fi # End of script; exit 0
Anschließend setzen wir nun die eXecutable-Dateiberechtigungen unseres shell-scriptes.
# chmod +x /usr/local/bin/virusscan
Damit nun das oder die gewählten Verzeichnisse regelmäßig gescannt werden, brauchen wir lediglich einen symbolischen link in das gewünschte Verzeichnis /etc/cron.daily/ oder /etc/cron.hourly/. Möchten wir das gewählte Verzeichnis stündlich durchsuchen, setzen wird demnach:
# ln -s /usr/local/bin/virusscan /etc/cron.hourly/
Wollen wir 1x am Tag den Scanvorgang anstoßen lautet der Aufruf entsprechend:
# ln -s /usr/local/bin/virusscan /etc/cron.daily/