Antivirus para Linux

El que utilizo yo, tanto en distribuciones de escritorio como en servidores es ClamAV.

Instalación

Para instalarlo:
apt-get install clamav

Para instalar el actualizador:
apt-get install clamav-freshclam

Actualizar las bases de virus

freshclam
Si recibes un error como este:
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).

No te preocupes, tendras funcionando freshclam como demonio / servicio, compruebalo:
service clamav-freshclam status

Y recibirás una salida como esta:

clamav-freshclam.service - ClamAV virus database updater
   Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled)
   Active: active (running) since jue 2017-01-12 08:58:33 CET; 3 days ago
     Docs: man:freshclam(1)
           man:freshclam.conf(5)
           http://www.clamav.net/lang/en/doc/
 Main PID: 439 (freshclam)
   CGroup: /system.slice/clamav-freshclam.service
           └─439 /usr/bin/freshclam -d --foreground=true

ene 15 21:25:27 server freshclam[439]: daily.cld is up to date (version: ...)
ene 15 21:25:27 server freshclam[439]: bytecode.cvd is up to date (versio...)
ene 15 22:25:27 server freshclam[439]: Received signal: wake up
ene 15 22:25:27 server freshclam[439]: ClamAV update process started at S...7
ene 15 22:25:27 server freshclam[439]: main.cvd is up to date (version: 5...)
ene 15 22:25:27 server freshclam[439]: Downloading daily-22899.cdiff [100%]
ene 15 22:25:29 server freshclam[439]: daily.cld updated (version: 22899,...)
ene 15 22:25:29 server freshclam[439]: bytecode.cvd is up to date (versio...)
ene 15 22:25:32 server freshclam[439]: Database updated (5580644 signatur...)
ene 15 22:25:32 server freshclam[439]: Clamd successfully notified about ....
Hint: Some lines were ellipsized, use -l to show in full.

O sencillamente así:

[ ok ] freshclam is running.

Escaner bajo demanda

La sintaxis general es esta:
clamscan [options] [file/directory/-]

Y las opciones más interesantes:

stdout: Write all messages (except for lib‐clamav output) to the standard output (stdout).
quiet: Be quiet (only print error messages).
remove[=yes/no(*)]: Remove infected files. Be careful!
move=DIRECTORY: Move infected files into DIRECTORY.
-r, —recursive: Scan directories recursively.
-i, —infected: Only print infected files.

Ejemplo:
sudo clamscan -r /var/www
Con este ejemplo escaneamos recursivamente la carpeta de las webs.

Si queremos algo más elaborado, además de recursivo que solo muestre los infectados, que guarde el log en cierto sitio y que excluya ciertos directorios del escaneo:
clamscan -r --infected --log=/root/clamscan-`date +%d-%m-%y.log` --exclude-dir=^/sys\|^/proc\|^/dev /
Aquí la ruta es ‘/’ es decir pretendemos escanear todo el sistema.

Eliminar virus

Esto conviene hacerlo de forma controlada, la opción es –remove, aunque podría interesar utilizar la opción –move según como queramos reaccionar ante una infección.
clamscan --infected --remove --recursive /

Programación de un cron para escanear el sistema

Lo mejor es olvidarse, y con cierta frecuencia ejecutar el escaner y enviarnos por email el resultado.

Para ello programamos una tarea cron:
crontab -e

Y añadimos una línea que se ejecute los domingos a las 2:00 am:

# m      h    dom           mon  dow                command
# minuto hora 'dia del mes' mes 'dia de la semana'  ...
# Minutos: de 0 a 59.
# Horas: de 0 a 23.
# Día del mes: de 1 a 31.
# Mes: de 1 a 12.
# Día de la semana: de 0 a 6, siendo 0 el domingo.
0 2 * * 0 clamscan -r --infected --exclude-dir=^/sys\|^/proc\|^/dev / | mail -s "Escaner ClamAV" jblancov@gmail.com

De forma que una vez a la semana se ejecute el escáner y nos envíe un reporte a nuestro email.

Que será algo parecido a esto:

----------- SCAN SUMMARY -----------
Known viruses: 5575169
Engine version: 0.99.2
Scanned directories: 20304
Scanned files: 90084
Infected files: 0
Data scanned: 6405.15 MB
Data read: 8352.78 MB (ratio 0.77:1)
Time: 478.312 sec (7 m 58 s)

Espero que os haya sido útil.