Debian Packages: clamav, clamav-freshclam.
The clamav package can be used to check email for viruses. The virus data will be updated automatically if clamav-freshclam is installed.
The clamscan command can be used in evolution to find messages containing a virus. To use it in, create a shell script, perhaps in /usr/local/bin/clam-filter, making it executable, and containing just:
clamscan --quiet --stdout --recursive --mbox -Then in evolution create a new filter with Tools-->Filter and click on Add. Call the new filter something like `ClamScan'. Select `Pipe Message to Shell Command' as the first part of the criteria. Then fill in /usr/local/bin/clam-filter as the command to run. Set `Returns' and `1' for the other fields. For the action choose a folder into which the identified virus email should be placed (rather than deleting it, just in case clamscan gets it wrong). Click OK to close the filter and then OK to close the filter editor. You are now done!
The clamscan command can also be used used with procmail by using a script (in this case, clamfilter.pl from http://www.everysoft.com/) to run clamscan on each message with a procmail entry like:
:0fw | clamfilter.pl :0: * ^X-Virus-Found: yes clam-`date +%Y-%m`
The actual script to add the appropriate X-Virus-Found header is:
#!/usr/bin/perl -w # # ClamFilter 1.0 # by Matt Hahnfeld (http://www.everysoft.com/) # Requires perl, clamscan, procmail, and this script. # # Add these lines to your .procmailrc: # # :0fw # | /usr/local/bin/clamfilter.pl # # This script is public domain. # use strict; use File::Temp 'tempfile'; &main(); exit 0; sub main { # Set up a temporary file for the original message my ($tmpfh, $tmpfn) = tempfile( UNLINK => 1 ); -w $tmpfn or die 'Could not open temp file!'; # Pass 1: Write out the temporary file while (<STDIN>) { print $tmpfh $_; } seek($tmpfh, 0, 0); # Pass 2: Scan the message open CLAMSCAN, "/bin/cat $tmpfn | /usr/bin/clamscan --stdout --recursive --mbox - 2>/dev/null |" or die 'Could not open clamscan!'; my $clamstatus = qq|X-Virus-Found: yes X-Virus-Status: ------------------------------------------------------------ Virus Scan Status: ------------------------------------------------------------ |; while (<CLAMSCAN>) { $clamstatus .= ' ' . $_; } close CLAMSCAN; $clamstatus .= qq| ------------------------------------------------------------ |; # Pass 3: Print out the message my $bodyflag = 0; while (<$tmpfh>) { if (! $bodyflag and $_ eq "\n") { if ($?) { print $clamstatus; } else { print "\n"; } $bodyflag = 1; } else { print; } } }