Discussion:
Problem with spam quarantine
(too old to reply)
Nikolaos Milas
2012-08-30 11:21:48 UTC
Permalink
Hello list,

I have a mail gateway server running
Postfix/Amavisd-new/clamav/spamassassin. It's a VM (on KVM host) running
Centos 5.8 with:

postfix-2.9.1-1.pcre.sasl2.dovecot.rhel5
amavisd-new-2.4.5-1.el5
clamav-0.97.5-1.el5
clamav-db-0.97.5-1.el5
spamassassin-3.3.1-2.el5

My problem is I want to quarantine spam mail rather than totally discard
it, however, although (I think) I have followed directions/manual, spam
is not being quarantined.

My config is at the end of this message (as well the server
initialization log). As you can see, I am using:

$final_spam_destiny = D_DISCARD;

and:

$spam_quarantine_method = "local:spam/spam-%n-%m-%i" ;

without success.

I had also tried:

$spam_quarantine_method = "local:/var/blockedmail/spam/%n-%m-%i" ;

(and other things) also without success.

What am I doing wrong?

Here is the session of a test spam mail (with the well-known
spam-designation content: "XJ...34X"), as logged in /var/log/amavisd.log:

Aug 30 10:38:27 mailgw2 amavis[32044]: (32044-01) Blocked SPAM,
[69.93.164.3] [195.251.204.219] <***@eurobjects.com> ->
<***@technet.noa.gr>, Message-ID: <***@eurobjects.com>,
mail_id: ePMdQUNIB5CZ, Hits: 1000.805, 731 ms

FYI:

[***@mailgw2 amavisd]# ls -la /var/blockedmail/
total 20
drwxr-xr-x 5 root root 4096 Oct 6 2011 .
drwxr-xr-x 21 root root 4096 Oct 6 2011 ..
drwxr-x--- 2 amavis amavis 4096 Oct 6 2011 banned
drwxr-x--- 2 amavis amavis 4096 Oct 6 2011 spam
drwxr-x--- 2 amavis amavis 4096 Oct 6 2011 virus

[***@mailgw2 amavisd]# ls -la /var/spool/amavisd/
total 28
drwx------ 7 amavis amavis 4096 Aug 30 10:34 .
drwxr-xr-x 9 root root 4096 Sep 7 2011 ..
srwxr-x--- 1 amavis amavis 0 Aug 30 10:34 amavisd.sock
srw-rw-rw- 1 amavis amavis 0 Aug 21 18:38 clamd.sock
drwx------ 2 amavis amavis 4096 Aug 30 10:34 db
drwx------ 3 amavis amavis 4096 Aug 30 10:37 quarantine
drwxr-x--- 2 amavis amavis 4096 Aug 30 10:26 .razor
drwx------ 2 amavis amavis 4096 Aug 30 10:38 .spamassassin
drwx------ 5 amavis amavis 4096 Aug 30 10:38 tmp

/var/spool/amavisd/quarantine/ was empty. I tried to create manually a
spam/ directory always without success:

[***@mailgw2 amavisd]# ls -la /var/spool/amavisd/quarantine
total 12
drwx------ 3 amavis amavis 4096 Aug 30 10:37 .
drwx------ 7 amavis amavis 4096 Aug 30 10:34 ..
drwx------ 2 amavis amavis 4096 Aug 30 10:37 spam

Please advise.

Thanks in advance,
Nick

========================= /etc/amavisd/amavisd.conf
=============================

use strict;

# a minimalistic configuration file for amavisd-new with all necessary
settings
#
# see amavisd.conf-default for a list of all variables with their
defaults;
# see amavisd.conf-sample for a traditional-style commented file;
# for more details see documentation in INSTALL, README_FILES/*
# and at http://www.ijs.si/software/amavisd/amavisd-new-docs.html


# COMMONLY ADJUSTED SETTINGS:

# @bypass_virus_checks_maps = (1); # uncomment to DISABLE anti-virus code
# @bypass_spam_checks_maps = (1); # uncomment to DISABLE anti-spam code

$max_servers = 2; # num of pre-forked children (2..15 is
common), -m
$daemon_user = 'amavis'; # (no default; customary: vscan or
amavis), -u
$daemon_group = 'amavis'; # (no default; customary: vscan or
amavis), -g

$mydomain = 'noa.gr'; # a convenient default for other settings

$MYHOME = '/var/spool/amavisd'; # a convenient default for other
settings, -H
$TEMPBASE = "$MYHOME/tmp"; # working directory, needs to exist, -T
$ENV{TMPDIR} = $TEMPBASE; # environment variable TMPDIR
$QUARANTINEDIR = undef; # -Q
# $quarantine_subdir_levels = 1; # add level of subdirs to disperse
quarantine

# $daemon_chroot_dir = $MYHOME; # chroot directory or undef, -R

# $db_home = "$MYHOME/db"; # dir for bdb nanny/cache/snmp
databases, -D
# $helpers_home = "$MYHOME/var"; # working directory for SpamAssassin, -S
$lock_file = "/var/run/amavisd/amavisd.lock"; # -L
$pid_file = "/var/run/amavisd/amavisd.pid"; # -P
#NOTE: create directories $MYHOME/tmp, $MYHOME/var, $MYHOME/db manually

@local_domains_maps = ( [".$mydomain"] );
# @mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0::]/10
# 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 );

$log_level = 0; # verbosity 0..5, -d
$log_recip_templ = undef; # disable by-recipient level-0 log entries
$DO_SYSLOG = 1; # log via syslogd (preferred)
$syslog_facility = 'local6'; # Syslog facility as a string
# e.g.: mail, daemon, user, local0, ... local7
$syslog_priority = 'debug'; # Syslog base (minimal) priority as a string,
# choose from: emerg, alert, crit, err, warning, notice,
info, debug

$enable_db = 1; # enable use of BerkeleyDB/libdb (SNMP and
nanny)
$enable_global_cache = 1; # enable use of libdb-based cache if
$enable_db=1

$inet_socket_port = 10024; # listen on this local TCP port(s) (see
$protocol)
$unix_socketname = "$MYHOME/amavisd.sock"; # amavisd-release or
amavis-milter
# option(s) -p overrides $inet_socket_port and
$unix_socketname

$interface_policy{'SOCK'}='AM.PDP-SOCK'; # only relevant with
$unix_socketname
# Use with amavis-release over a socket or with Petr Rehor's
amavis-milter.c
# (with amavis-milter.c from this package or old amavis.c client use
'AM.CL'):
$policy_bank{'AM.PDP-SOCK'} = { protocol=>'AM.PDP' };

#
# Customized by Nick based on Steve Jenkins Settings
#

# $sa_tag_level_deflt = 2.0; # add spam info headers if at, or above
that level
$sa_tag_level_deflt = '-9999'; # add spam info headers if at, or above
that level
# $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_tag2_level_deflt = 6.0; # add 'spam detected' headers at that level
# $sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_kill_level_deflt = 15.0; # triggers spam evasive actions (e.g.
blocks mail)
# $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
$sa_dsn_cutoff_level = 15.0; # spam level beyond which a DSN is not sent

# $sa_quarantine_cutoff_level = 20; # spam level beyond which quarantine
is off
# $penpals_bonus_score = 5; # (no effect without a @storage_sql_dsn
database)
# $penpals_threshold_high = $sa_kill_level_deflt; # don't waste time on
hi spam

$sa_mail_body_size_limit = 400*1024; # don't waste time on SA if mail is
larger
$sa_local_tests_only = 0; # only tests which do not require internet
access?

# @lookup_sql_dsn =
# ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'user1',
'passwd1'],
# ['DBI:mysql:database=mail;host=host2', 'username2', 'password2'],
# ["DBI:SQLite:dbname=$MYHOME/sql/mail_prefs.sqlite", '', ''] );
# @storage_sql_dsn = @lookup_sql_dsn; # none, same, or separate database

# $timestamp_fmt_mysql = 1; # if using MySQL *and* msgs.time_iso is
TIMESTAMP;
# defaults to 0, which is good for non-MySQL or if msgs.time_iso is
CHAR(16)

$virus_admin = undef; # notifications
recip.

$mailfrom_notify_admin = undef; # notifications
sender
$mailfrom_notify_recip = undef; # notifications
sender
$mailfrom_notify_spamadmin = undef; # notifications
sender
$mailfrom_to_quarantine = ''; # null return path; uses original sender
if undef

@addr_extension_virus_maps = ('virus');
@addr_extension_banned_maps = ('banned');
@addr_extension_spam_maps = ('spam');
@addr_extension_bad_header_maps = ('badh');
# $recipient_delimiter = '+'; # undef disables address extensions
altogether
# when enabling addr extensions do also Postfix/main.cf:
recipient_delimiter=+

$path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';
# $dspam = 'dspam';

$MAXLEVELS = 14;
$MAXFILES = 1500;
$MIN_EXPANSION_QUOTA = 100*1024; # bytes (default undef, not
enforced)
$MAX_EXPANSION_QUOTA = 300*1024*1024; # bytes (default undef, not
enforced)

# $sa_spam_subject_tag = '***SPAM*** ';
$sa_spam_subject_tag = 'SPAM(?): ';
$defang_virus = 1; # MIME-wrap passed infected mail
$defang_banned = 1; # MIME-wrap passed mail containing banned name
# for defanging bad headers only turn on certain minor contents categories:
$defang_by_ccat{+CC_BADH.",3"} = 1; # NUL or CR character in header
$defang_by_ccat{+CC_BADH.",5"} = 1; # header line longer than 998
characters
$defang_by_ccat{+CC_BADH.",6"} = 1; # header field syntax error


# OTHER MORE COMMON SETTINGS (defaults may suffice):

# $myhostname = 'host.example.com'; # must be a fully-qualified domain
name!

# $notify_method = 'smtp:[127.0.0.1]:10025';
# $forward_method = 'smtp:[127.0.0.1]:10025'; # set to undef with milter!

$final_virus_destiny = D_DISCARD;
#
# Value changed by Nick
#
# $final_banned_destiny = D_BOUNCE;
#
$final_banned_destiny = D_DISCARD;
$final_spam_destiny = D_DISCARD;
$final_bad_header_destiny = D_BOUNCE;

# $os_fingerprint_method = 'p0f:127.0.0.1:2345'; # to query
p0f-analyzer.pl

## hierarchy by which a final setting is chosen:
## policy bank (based on port or IP address) -> *_by_ccat
## *_by_ccat (based on mail contents) -> *_maps
## *_maps (based on recipient address) -> final configuration value


# SOME OTHER VARIABLES WORTH CONSIDERING (see amavisd.conf-default for all)

# $warnbadhsender,
# $warnvirusrecip, $warnbannedrecip, $warnbadhrecip, (or @warn*recip_maps)
#
# @bypass_virus_checks_maps, @bypass_spam_checks_maps,
# @bypass_banned_checks_maps, @bypass_header_checks_maps,
#
# @virus_lovers_maps, @spam_lovers_maps,
# @banned_files_lovers_maps, @bad_header_lovers_maps,
#
# @blacklist_sender_maps, @score_sender_maps,
#
# $clean_quarantine_method, $virus_quarantine_to, $banned_quarantine_to,
# $bad_header_quarantine_to, $spam_quarantine_to,
#
# $defang_bad_header, $defang_undecipherable, $defang_spam

$virus_quarantine_method = "local:virus/virus-%n-%m-%i" ;
$spam_quarantine_method = "local:spam/spam-%n-%m-%i" ;
$banned_files_quarantine_method = "local:banned/banned-%n-%m-%i" ;

# $bad_header_quarantine_method

# $virus_quarantine_to = "/var/blockedmail/virus/";
# $banned_quarantine_to = "/var/blockedmail/banned/";
# $spam_quarantine_to = "/var/blockedmail/spam/";

# REMAINING IMPORTANT VARIABLES ARE LISTED HERE BECAUSE OF LONGER
ASSIGNMENTS

@keep_decoded_original_maps = (new_RE(
# qr'^MAIL$', # retain full original message for virus checking (can
be slow)
qr'^MAIL-UNDECIPHERABLE$', # recheck full mail if it contains
undecipherables
qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
# qr'^Zip archive data', # don't trust Archive::Zip
));


# for $banned_namepath_re (a new-style of banned table) see
amavisd.conf-sample

$banned_filename_re = new_RE(

### BLOCKED ANYWHERE
# qr'^UNDECIPHERABLE$', # is or contains any undecipherable components
qr'^\.(exe-ms|dll)$', # banned file(1) types,
rudimentary
# qr'^\.(exe|lha|tnef|cab|dll)$', # banned file(1) types

### BLOCK THE FOLLOWING, EXCEPT WITHIN UNIX ARHIVES:
# [ qr'^\.(gz|bz2)$' => 0 ], # allow any in gzip or bzip2
[ qr'^\.(rpm|cpio|tar)$' => 0 ], # allow any in Unix-type
archives

qr'.\.(pif|scr)$'i, # banned extensions -
rudimentary
# qr'^\.zip$', # block zip type

### BLOCK THE FOLLOWING, EXCEPT WITHIN ARHIVES:
# [ qr'^\.(zip|rar|arc|arj|zoo)$'=> 0 ], # allow any within these archives

qr'^application/x-msdownload$'i, # block these MIME types
qr'^application/x-msdos-program$'i,
qr'^application/hta$'i,

# qr'^message/partial$'i, # rfc2046 MIME type
# qr'^message/external-body$'i, # rfc2046 MIME type

# qr'^(application/x-msmetafile|image/x-wmf)$'i, # Windows Metafile
MIME type
# qr'^\.wmf$', # Windows Metafile file(1) type

# block certain double extensions in filenames
qr'\.[^./]*[A-Za-z][^./]*\.\s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.\s]*$'i,


# qr'\{[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\}?'i, # Class ID CLSID,
strict
# qr'\{[0-9a-z]{4,}(-[0-9a-z]{4,}){0,7}\}?'i, # Class ID extension
CLSID, loose

qr'.\.(exe|vbs|pif|scr|cpl)$'i, # banned extension - basic
# qr'.\.(exe|vbs|pif|scr|cpl|bat|cmd|com)$'i, # banned extension -
basic+cmd
# qr'.\.(ade|adp|app|bas|bat|chm|cmd|com|cpl|crt|emf|exe|fxp|grp|hlp|hta|
# inf|ins|isp|js|jse|lnk|mda|mdb|mde|mdw|mdt|mdz|msc|msi|msp|mst|
# ops|pcd|pif|prg|reg|scr|sct|shb|shs|vb|vbe|vbs|
# wmf|wsc|wsf|wsh)$'ix, # banned ext - long

# qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i, # banned extension - WinZip
vulnerab.
);
# See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262631
# and http://www.cknow.com/vtutor/vtextensions.htm

#
# ENVELOPE SENDER HARD WHITELISTING
# By Nick on 1/3/2011
#

read_hash(\%whitelist_sender, '/etc/amavisd/whitelist_domains');

# ENVELOPE SENDER HARD BLACKLISTING
# By Nick on 9/6/2012
#
read_hash(\%blacklist_sender, '/etc/amavisd/blacklist');


# ENVELOPE SENDER SOFT-WHITELISTING / SOFT-BLACKLISTING

@score_sender_maps = ({ # a by-recipient hash lookup table,
# results from all matching recipient tables
are summed

# ## per-recipient personal tables (NOTE: positive: black, negative:
white)
# '***@example.com' => [{'bla-***@example.com' => 10.0}],
# '***@example.com' => [{'.ebay.com' => -3.0}],
# '***@example.com' => [{'***@cleargreen.com' => -7.0,
# '.cleargreen.com' => -5.0}],

## site-wide opinions about senders (the '.' matches any recipient)
'.' => [ # the _first_ matching sender determines the score boost

new_RE( # regexp-type lookup table, just happens to be all
soft-blacklist
[qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i => 5.0],
[qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 5.0],
[qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 5.0],
[qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i => 5.0],
[qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i => 5.0],
[qr'^(your_friend|greatoffers)@'i => 5.0],
[qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i => 5.0],
),

# read_hash("/var/amavis/sender_scores_sitewide"),

{ # a hash-type lookup table (associative array)
'***@cert.org' => -3.0,
'cert-***@us-cert.gov' => -3.0,
'owner-***@iss.net' => -3.0,
'***@slashdot.org' => -3.0,
'securityfocus.com' => -3.0,
'***@listserv.ntbugtraq.com' => -3.0,
'security-***@linuxsecurity.com' => -3.0,
'mailman-announce-***@python.org' => -3.0,
'amavis-user-***@lists.sourceforge.net'=> -3.0,
'amavis-user-***@lists.sourceforge.net' => -3.0,
'spamassassin.apache.org' => -3.0,
'notification-***@lists.sophos.com' => -3.0,
'owner-postfix-***@postfix.org' => -3.0,
'owner-postfix-***@postfix.org' => -3.0,
'owner-sendmail-***@lists.sendmail.org' => -3.0,
'sendmail-announce-***@lists.sendmail.org' => -3.0,
'***@sendmail.org' => -3.0,
'ca+***@sendmail.org' => -3.0,
'***@freshmeat.net' => -3.0,
'owner-***@postel.acm.org' => -3.0,
'ietf-123-***@loki.ietf.org' => -3.0,
'cvs-commits-list-***@gnome.org' => -3.0,
'rt-users-***@lists.fsck.com' => -3.0,
'clp-***@comp.nus.edu.sg' => -3.0,
'surveys-***@lists.nua.ie' => -3.0,
'***@genomeweb.com' => -5.0,
'yahoo-dev-***@yahoo-inc.com' => -3.0,
'returns.groups.yahoo.com' => -3.0,
'***@linuxnetworx.com' => -3.0,
lc('lvs-users-***@LinuxVirtualServer.org') => -3.0,
lc('owner-***@CNNIMAIL12.CNN.COM') => -5.0,

# soft-blacklisting (positive score)
'***@example.net' => 3.0,
'.example.net' => 1.0,

},
], # end of site-wide tables
});


@decoders = (
['mail', \&do_mime_decode],
['asc', \&do_ascii],
['uue', \&do_ascii],
['hqx', \&do_ascii],
['ync', \&do_ascii],
['F', \&do_uncompress, ['unfreeze','freeze -d','melt','fcat'] ],
['Z', \&do_uncompress, ['uncompress','gzip -d','zcat'] ],
['gz', \&do_uncompress, 'gzip -d'],
['gz', \&do_gunzip],
['bz2', \&do_uncompress, 'bzip2 -d'],
['lzo', \&do_uncompress, 'lzop -d'],
['rpm', \&do_uncompress, ['rpm2cpio.pl','rpm2cpio'] ],
['cpio', \&do_pax_cpio, ['pax','gcpio','cpio'] ],
['tar', \&do_pax_cpio, ['pax','gcpio','cpio'] ],
['tar', \&do_tar],
['deb', \&do_ar, 'ar'],
# ['a', \&do_ar, 'ar'], # unpacking .a seems an overkill
['zip', \&do_unzip],
['rar', \&do_unrar, ['rar','unrar'] ],
['arj', \&do_unarj, ['arj','unarj'] ],
['arc', \&do_arc, ['nomarch','arc'] ],
['zoo', \&do_zoo, ['zoo','unzoo'] ],
['lha', \&do_lha, 'lha'],
# ['doc', \&do_ole, 'ripole'],
['cab', \&do_cabextract, 'cabextract'],
['tnef', \&do_tnef_ext, 'tnef'],
['tnef', \&do_tnef],
# ['sit', \&do_unstuff, 'unstuff'], # broken/unsafe decoder
['exe', \&do_executable, ['rar','unrar'], 'lha', ['arj','unarj'] ],
);


@av_scanners = (

# ### http://www.clanfield.info/sophie/
(http://www.vanja.com/tools/sophie/)
# ['Sophie',
# \&ask_daemon, ["{}/\n", '/var/run/sophie'],
# qr/(?x)^ 0+ ( : | [\000\r\n]* $)/, qr/(?x)^ 1 ( : | [\000\r\n]* $)/,
# qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/ ],

# ### http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/
# ['Sophos SAVI', \&sophos_savi ],

# ### http://www.clamav.net/
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/spool/amavisd/clamd.sock"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# # NOTE: run clamd under the same user as amavisd, or run it under its own
# # uid such as clamav, add user clamav to the amavis group, and then add
# # AllowSupplementaryGroups to clamd.conf;
# # NOTE: match socket name (LocalSocket) in clamav.conf to the socket
name in
# # this entry; when running chrooted one may prefer socket
"$MYHOME/clamd".

# ### http://www.clamav.net/ and CPAN (memory-hungry! clamd is preferred)
# ['Mail::ClamAV', \&ask_clamav, "*", [0], [1], qr/^INFECTED: (.+)/],

# ### http://www.openantivirus.org/
# ['OpenAntiVirus ScannerDaemon (OAV)',
# \&ask_daemon, ["SCAN {}\n", '127.0.0.1:8127'],
# qr/^OK/, qr/^FOUND: /, qr/^FOUND: (.+)/ ],

# ### http://www.vanja.com/tools/trophie/
# ['Trophie',
# \&ask_daemon, ["{}/\n", '/var/run/trophie'],
# qr/(?x)^ 0+ ( : | [\000\r\n]* $)/, qr/(?x)^ 1 ( : | [\000\r\n]* $)/,
# qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/ ],

# ### http://www.grisoft.com/
# ['AVG Anti-Virus',
# \&ask_daemon, ["SCAN {}\n", '127.0.0.1:55555'],
# qr/^200/, qr/^403/, qr/^403 .*?: ([^\r\n]+)/ ],

# ### http://www.f-prot.com/
# ['FRISK F-Prot Daemon',
# \&ask_daemon,
# ["GET {}/*?-dumb%20-archive%20-packed HTTP/1.0\r\n\r\n",
# ['127.0.0.1:10200','127.0.0.1:10201','127.0.0.1:10202',
# '127.0.0.1:10203','127.0.0.1:10204'] ],
# qr/(?i)<summary[^>]*>clean<\/summary>/,
# qr/(?i)<summary[^>]*>infected<\/summary>/,
# qr/(?i)<name>(.+)<\/name>/ ],

# ### http://www.sald.com/, http://www.dials.ru/english/,
http://www.drweb.ru/
# ['DrWebD', \&ask_daemon, # DrWebD 4.31 or later
# [pack('N',1). # DRWEBD_SCAN_CMD
# pack('N',0x00280001). # DONT_CHANGEMAIL, IS_MAIL, RETURN_VIRUSES
# pack('N', # path length
# length("$TEMPBASE/amavis-yyyymmddTHHMMSS-xxxxx/parts/pxxx")).
# '{}/*'. # path
# pack('N',0). # content size
# pack('N',0),
# '/var/drweb/run/drwebd.sock',
# # '/var/amavis/var/run/drwebd.sock', # suitable for chroot
# # '/usr/local/drweb/run/drwebd.sock', # FreeBSD drweb ports default
# # '127.0.0.1:3000', # or over an inet socket
# ],
# qr/\A\x00[\x10\x11][\x00\x10]\x00/s, # IS_CLEAN,EVAL_KEY;
SKIPPED
# qr/\A\x00[\x00\x01][\x00\x10][\x20\x40\x80]/s, #
KNOWN_V,UNKNOWN_V,V._MODIF
# qr/\A.{12}(?:infected with )?([^\x00]+)\x00/s,
# ],
# # NOTE: If using amavis-milter, change length to:
# # length("$TEMPBASE/amavis-milter-xxxxxxxxxxxxxx/parts/pxxx").

### http://www.kaspersky.com/ (kav4mailservers)
['KasperskyLab AVP - aveclient',
['/usr/local/kav/bin/aveclient','/usr/local/share/kav/bin/aveclient',
'/opt/kav/5.5/kav4mailservers/bin/aveclient','aveclient'],
'-p /var/run/aveserver -s {}/*',
[0,3,6,8], qr/\b(INFECTED|SUSPICION|SUSPICIOUS)\b/,
qr/(?:INFECTED|WARNING|SUSPICION|SUSPICIOUS) (.+)/,
],
# NOTE: one may prefer [0],[2,3,4,5], depending on how suspicious,
# currupted or protected archives are to be handled

### http://www.kaspersky.com/
['KasperskyLab AntiViral Toolkit Pro (AVP)', ['avp'],
'-* -P -B -Y -O- {}', [0,3,6,8], [2,4], # any use for -A -K ?
qr/infected: (.+)/,
sub {chdir('/opt/AVP') or die "Can't chdir to AVP: $!"},
sub {chdir($TEMPBASE) or die "Can't chdir back to $TEMPBASE $!"},
],

### The kavdaemon and AVPDaemonClient have been removed from Kasperky
### products and replaced by aveserver and aveclient
['KasperskyLab AVPDaemonClient',
[ '/opt/AVP/kavdaemon', 'kavdaemon',
'/opt/AVP/AvpDaemonClient', 'AvpDaemonClient',
'/opt/AVP/AvpTeamDream', 'AvpTeamDream',
'/opt/AVP/avpdc', 'avpdc' ],
"-f=$TEMPBASE {}", [0,8], [3,4,5,6], qr/infected: ([^\r\n]+)/ ],
# change the startup-script in /etc/init.d/kavd to:
# DPARMS="-* -Y -dl -f=/var/amavis /var/amavis"
# (or perhaps: DPARMS="-I0 -Y -* /var/amavis" )
# adjusting /var/amavis above to match your $TEMPBASE.
# The '-f=/var/amavis' is needed if not running it as root, so it
# can find, read, and write its pid file, etc., see 'man kavdaemon'.
# defUnix.prf: there must be an entry "*/var/amavis" (or whatever
# directory $TEMPBASE specifies) in the 'Names=' section.
# cd /opt/AVP/DaemonClients; configure; cd Sample; make
# cp AvpDaemonClient /opt/AVP/
# su - vscan -c "${PREFIX}/kavdaemon ${DPARMS}"

### http://www.centralcommand.com/
['CentralCommand Vexira (new) vascan',
['vascan','/usr/lib/Vexira/vascan'],
"-a s --timeout=60 --temp=$TEMPBASE -y $QUARANTINEDIR ".
"--log=/var/log/vascan.log {}",
[0,3], [1,2,5],
qr/(?x)^\s* (?:virus|iworm|macro|mutant|sequence|trojan)\ found:\ (
[^\]\s']+ )\ \.\.\.\ / ],
# Adjust the path of the binary and the virus database as needed.
# 'vascan' does not allow to have the temp directory to be the same as
# the quarantine directory, and the quarantine option can not be
disabled.
# If $QUARANTINEDIR is not used, then another directory must be
specified
# to appease 'vascan'. Move status 3 to the second list if password
# protected files are to be considered infected.

### http://www.avira.com/
### Avira AntiVir (formerly H+BEDV) or (old) CentralCommand Vexira
Antivirus
['Avira AntiVir', ['antivir','vexira'],
'--allfiles -noboot -nombr -rs -s -z {}', [0], qr/ALERT:|VIRUS:/,
qr/(?x)^\s* (?: ALERT: \s* (?: \[ | [^']* ' ) |
(?i) VIRUS:\ .*?\ virus\ '?) ( [^\]\s']+ )/ ],
# NOTE: if you only have a demo version, remove -z and add 214, as in:
# '--allfiles -noboot -nombr -rs -s {}', [0,214], qr/ALERT:|VIRUS:/,

### http://www.commandsoftware.com/
['Command AntiVirus for Linux', 'csav',
'-all -archive -packed {}', [50], [51,52,53],
qr/Infection: (.+)/ ],

### http://www.symantec.com/
['Symantec CarrierScan via Symantec CommandLineScanner',
'cscmdline', '-a scan -i 1 -v -s 127.0.0.1:7777 {}',
qr/^Files Infected:\s+0$/, qr/^Infected\b/,
qr/^(?:Info|Virus Name):\s+(.+)/ ],

### http://www.symantec.com/
['Symantec AntiVirus Scan Engine',
'savsecls', '-server 127.0.0.1:7777 -mode scanrepair -details
-verbose {}',
[0], qr/^Infected\b/,
qr/^(?:Info|Virus Name):\s+(.+)/ ],
# NOTE: check options and patterns to see which entry better applies

### http://www.f-secure.com/products/anti-virus/ version 4.65
['F-Secure Antivirus for Linux servers',
['/opt/f-secure/fsav/bin/fsav', 'fsav'],
'--delete=no --disinf=no --rename=no --archive=yes --auto=yes '.
'--dumb=yes --list=no --mime=yes {}', [0], [3,6,8],
qr/(?:infection|Infected|Suspected): (.+)/ ],

# ### http://www.avast.com/
# ['avast! Antivirus daemon',
# \&ask_daemon, # greets with 220, terminate with QUIT
# ["SCAN {}\015\012QUIT\015\012", '/var/run/avast4/mailscanner.sock'],
# qr/\t\[\+\]/, qr/\t\[L\]\t/, qr/\t\[L\]\t([^[ \t\015\012]+)/ ],

# ### http://www.avast.com/
# ['avast! Antivirus - Client/Server Version', 'avastlite',
# '-a /var/run/avast4/mailscanner.sock -n {}', [0], [1],
# qr/\t\[L\]\t([^[ \t\015\012]+)/ ],

['CAI InoculateIT', 'inocucmd', # retired product
'-sec -nex {}', [0], [100],
qr/was infected by virus (.+)/ ],
# see: http://www.flatmtn.com/computer/Linux-Antivirus_CAI.html

### http://www3.ca.com/Solutions/Product.asp?ID=156 (ex InoculateIT)
['CAI eTrust Antivirus', 'etrust-wrapper',
'-arc -nex -spm h {}', [0], [101],
qr/is infected by virus: (.+)/ ],
# NOTE: requires suid wrapper around inocmd32; consider flag: -mod
reviewer
# see http://marc.theaimsgroup.com/?l=amavis-user&m=109229779912783

### http://mks.com.pl/english.html
['MkS_Vir for Linux (beta)', ['mks32','mks'],
'-s {}/*', [0], [1,2],
qr/--[ \t]*(.+)/ ],

### http://mks.com.pl/english.html
['MkS_Vir daemon', 'mksscan',
'-s -q {}', [0], [1..7],
qr/^... (\S+)/ ],

### http://www.nod32.com/, version v2.52 and above
['ESET NOD32 for Linux Mail servers',
['/opt/eset/nod32/bin/nod32cli', 'nod32cli'],
'--subdir --files -z --sfx --rtp --adware --unsafe --pattern
--heur '.
'-w -a --action-on-infected=accept --action-on-uncleanable=accept '.
'--action-on-notscanned=accept {}',
[0,3], [1,2], qr/virus="([^"]+)"/ ],

## http://www.nod32.com/, NOD32LFS version 2.5 and above
['ESET NOD32 for Linux File servers',
['/opt/eset/nod32/sbin/nod32','nod32'],
'--files -z --mail --sfx --rtp --adware --unsafe --pattern --heur '.
'-w -a --action=1 -b {}',
[0], [1,10], qr/^object=.*, virus="(.*?)",/ ],

# Experimental, based on posting from Rado Dibarbora (Dibo) on 2002-05-31
# ['ESET Software NOD32 Client/Server (NOD32SS)',
# \&ask_daemon2, # greets with 200, persistent, terminate with QUIT
# ["SCAN {}/*\r\n", '127.0.0.1:8448' ],
# qr/^200 File OK/, qr/^201 /, qr/^201 (.+)/ ],

### http://www.norman.com/products_nvc.shtml
['Norman Virus Control v5 / Linux', 'nvcc',
'-c -l:0 -s -u -temp:$TEMPBASE {}', [0,10,11], [1,2,14],
qr/(?i).* virus in .* -> \'(.+)\'/ ],

### http://www.pandasoftware.com/
['Panda CommandLineSecure 9 for Linux',
['/opt/pavcl/usr/bin/pavcl','pavcl'],
'-auto -aex -heu -cmp -nbr -nor -nos -eng -nob {}',
qr/Number of files infected[ .]*: 0+(?!\d)/,
qr/Number of files infected[ .]*: 0*[1-9]/,
qr/Found virus :\s*(\S+)/ ],
# NOTE: for efficiency, start the Panda in resident mode with 'pavcl
-tsr'
# before starting amavisd - the bases are then loaded only once at
startup.
# To reload bases in a signature update script:
# /opt/pavcl/usr/bin/pavcl -tsr -ulr; /opt/pavcl/usr/bin/pavcl -tsr
# Please review other options of pavcl, for example:
# -nomalw, -nojoke, -nodial, -nohackt, -nospyw, -nocookies

# ### http://www.pandasoftware.com/
# ['Panda Antivirus for Linux', ['pavcl'],
# '-TSR -aut -aex -heu -cmp -nbr -nor -nso -eng {}',
# [0], [0x10, 0x30, 0x50, 0x70, 0x90, 0xB0, 0xD0, 0xF0],
# qr/Found virus :\s*(\S+)/ ],

# GeCAD AV technology is acquired by Microsoft; RAV has been discontinued.
# Check your RAV license terms before fiddling with the following two
lines!
# ['GeCAD RAV AntiVirus 8', 'ravav',
# '--all --archive --mail {}', [1], [2,3,4,5], qr/Infected: (.+)/ ],
# # NOTE: the command line switches changed with scan engine 8.5 !
# # (btw, assigning stdin to /dev/null causes RAV to fail)

### http://www.nai.com/
['NAI McAfee AntiVirus (uvscan)', 'uvscan',
'--secure -rv --mime --summary --noboot - {}', [0], [13],
qr/(?x) Found (?:
\ the\ (.+)\ (?:virus|trojan) |
\ (?:virus|trojan)\ or\ variant\ ([^ ]+) |
:\ (.+)\ NOT\ a\ virus)/,
# sub {$ENV{LD_PRELOAD}='/lib/libc.so.6'},
# sub {delete $ENV{LD_PRELOAD}},
],
# NOTE1: with RH9: force the dynamic linker to look at /lib/libc.so.6
before
# anything else by setting environment variable
LD_PRELOAD=/lib/libc.so.6
# and then clear it when finished to avoid confusing anything else.
# NOTE2: to treat encrypted files as viruses replace the [13] with:
# qr/^\s{5,}(Found|is password-protected|.*(virus|trojan))/

### http://www.virusbuster.hu/en/
['VirusBuster', ['vbuster', 'vbengcl'],
"{} -ss -i '*' -log=$MYHOME/vbuster.log", [0], [1],
qr/: '(.*)' - Virus/ ],
# VirusBuster Ltd. does not support the daemon version for the
workstation
# engine (vbuster-eng-1.12-linux-i386-libc6.tgz) any longer. The
names of
# binaries, some parameters AND return codes have changed (from 3 to 1).
# See also the new Vexira entry 'vascan' which is possibly related.

# ### http://www.virusbuster.hu/en/
# ['VirusBuster (Client + Daemon)', 'vbengd',
# '-f -log scandir {}', [0], [3],
# qr/Virus found = (.*);/ ],
# # HINT: for an infected file it always returns 3,
# # although the man-page tells a different story

### http://www.cyber.com/
['CyberSoft VFind', 'vfind',
'--vexit {}/*', [0], [23], qr/##==>>>> VIRUS ID: CVDL (.+)/,
# sub {$ENV{VSTK_HOME}='/usr/lib/vstk'},
],

### http://www.avast.com/
['avast! Antivirus', ['/usr/bin/avastcmd','avastcmd'],
'-a -i -n -t=A {}', [0], [1], qr/\binfected by:\s+([^ \t\n\[\]]+)/ ],

### http://www.ikarus-software.com/
['Ikarus AntiVirus for Linux', 'ikarus',
'{}', [0], [40], qr/Signature (.+) found/ ],

### http://www.bitdefender.com/
['BitDefender', 'bdc',
'--arc --mail {}', qr/^Infected files *:0+(?!\d)/,
qr/^(?:Infected files|Identified viruses|Suspect files) *:0*[1-9]/,
qr/(?:suspected|infected): (.*)(?:\033|$)/ ],
# consider also: --all --nowarn --alev=15 --flev=15. The --all
argument may
# not apply to your version of bdc, check documentation and see 'bdc
--help'

# ['File::Scan', sub {Amavis::AV::ask_av(sub{
# use File::Scan; my($fn)=@_;
# my($f)=File::Scan->new(max_txt_size=>0, max_bin_size=>0);
# my($vname) = $f->scan($fn);
# $f->error ? (2,"Error: ".$f->error)
# : ($vname ne '') ? (1,"$vname FOUND") : (0,"Clean")}, @_) },
# ["{}/*"], [0], [1], qr/^(.*) FOUND$/ ],

# ### fully-fledged checker for JPEG marker segments of invalid length
# ['check-jpeg',
# sub { use JpegTester (); Amavis::AV::ask_av(\&JpegTester::test_jpeg,
@_) },
# ["{}/*"], undef, [1], qr/^(bad jpeg: .*)$/ ],
# # NOTE: place file JpegTester.pm somewhere where Perl can find it,
# # for example in /usr/local/lib/perl5/site_perl

);


@av_scanners_backup = (

### http://www.clamav.net/ - backs up clamd or Mail::ClamAV
['ClamAV-clamscan', 'clamscan',
"--stdout --no-summary -r --tempdir=$TEMPBASE {}",
[0], qr/:.*\sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

### http://www.f-prot.com/ - backs up F-Prot Daemon
['FRISK F-Prot Antivirus', ['f-prot','f-prot.sh'],
'-dumb -archive -packed {}', [0,8], [3,6], # or: [0], [3,6,8],
qr/(?:Infection:|security risk named) (.+)|\s+contains\s+(.+)$/ ],

### http://www.trendmicro.com/ - backs up Trophie
['Trend Micro FileScanner', ['/etc/iscan/vscan','vscan'],
'-za -a {}', [0], qr/Found virus/, qr/Found virus (.+) in/ ],

### http://www.sald.com/, http://drweb.imshop.de/ - backs up DrWebD
['drweb - DrWeb Antivirus', # security LHA hole in Dr.Web 4.33 and
earlier
['/usr/local/drweb/drweb', '/opt/drweb/drweb', 'drweb'],
'-path={} -al -go -ot -cn -upn -ok-',
[0,32], [1,9,33], qr' infected (?:with|by)(?: virus)? (.*)$'],

### http://www.kaspersky.com/
['Kaspersky Antivirus v5.5',
['/opt/kav/5.5/kav4unix/bin/kavscanner',
'/opt/kav/5.5/kav4mailservers/bin/kavscanner','kavscanner'],
'-i0 -xn -xp -mn -R -ePASBME {}/*', [0,10,15], [5,20,21,25],
qr/(?:INFECTED|WARNING|SUSPICION|SUSPICIOUS) (.*)/ ,
# sub {chdir('/opt/kav/bin') or die "Can't chdir to kav: $!"},
# sub {chdir($TEMPBASE) or die "Can't chdir back to $TEMPBASE $!"},
],

# Commented out because the name 'sweep' clashes with Debian and FreeBSD
# package/port of an audio editor. Make sure the correct 'sweep' is found
# in the path when enabling.
#
# ### http://www.sophos.com/ - backs up Sophie or SAVI-Perl
# ['Sophos Anti Virus (sweep)', 'sweep',
# '-nb -f -all -rec -ss -sc -archive -cab -tnef --no-reset-atime {}',
# [0,2], qr/Virus .*? found/,
# qr/^>>> Virus(?: fragment)? '?(.*?)'? found/,
# ],
# # other options to consider: -mime -oe -idedir=/usr/local/sav

# always succeeds (uncomment to consider mail clean if all other
scanners fail)
# ['always-clean', sub {0}],

);


1; # insure a defined return
================================================================================


======================= /var/log/amavisd.log
==================================

Aug 30 10:34:57 mailgw2 amavis[32040]: starting. /usr/sbin/amavisd at
mailgw2.noa.gr amavisd-new-2.4.5 (20070130), Unicode aware,
LANG="en_US.UTF-8"
Aug 30 10:34:57 mailgw2 amavis[32040]: Perl version 5.008008
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Amavis::Conf 2.078
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Archive::Tar 1.3901
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Archive::Zip 1.16
Aug 30 10:34:57 mailgw2 amavis[32042]: Module BerkeleyDB 0.32
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Compress::Zlib 1.42
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Convert::TNEF 0.17
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Convert::UUlib 1.4
Aug 30 10:34:57 mailgw2 amavis[32042]: Module DBD::mysql 3.0007
Aug 30 10:34:57 mailgw2 amavis[32042]: Module DBI 1.52
Aug 30 10:34:57 mailgw2 amavis[32042]: Module DB_File 1.814
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Digest::MD5 2.36
Aug 30 10:34:57 mailgw2 amavis[32042]: Module IO::Socket::INET6 2.51
Aug 30 10:34:57 mailgw2 amavis[32042]: Module MIME::Entity 5.420
Aug 30 10:34:57 mailgw2 amavis[32042]: Module MIME::Parser 5.420
Aug 30 10:34:57 mailgw2 amavis[32042]: Module MIME::Tools 5.420
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Mail::Header 1.77
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Mail::Internet 1.77
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Mail::SPF::Query 1.999001
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Mail::SpamAssassin 3.003001
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Net::Cmd 2.26
Aug 30 10:34:57 mailgw2 amavis[32042]: Module Net::DNS 0.59
Aug 30 10:34:58 mailgw2 amavis[32042]: Module Net::SMTP 2.29
Aug 30 10:34:58 mailgw2 amavis[32042]: Module Net::Server 0.96
Aug 30 10:34:58 mailgw2 amavis[32042]: Module Razor2::Client::Version 2.84
Aug 30 10:34:58 mailgw2 amavis[32042]: Module Time::HiRes 1.9717
Aug 30 10:34:58 mailgw2 amavis[32042]: Module Unix::Syslog 0.100
Aug 30 10:34:58 mailgw2 amavis[32042]: Amavis::DB code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: Amavis::Cache code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: SQL base code NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: SQL::Log code NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: SQL::Quarantine NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: Lookup::SQL code NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: Lookup::LDAP code NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: AM.PDP-in proto code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: SMTP-in proto code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: Courier proto code NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: SMTP-out proto code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: Pipe-out proto code NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: BSMTP-out proto code NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: Local-out proto code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: OS_Fingerprint code NOT loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: ANTI-VIRUS code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: ANTI-SPAM code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: ANTI-SPAM-SA code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: Unpackers code loaded
Aug 30 10:34:58 mailgw2 amavis[32042]: Found $file at
/usr/bin/file
Aug 30 10:34:58 mailgw2 amavis[32042]: No $dspam, not using it
Aug 30 10:34:58 mailgw2 amavis[32042]: Internal decoder for .mail
Aug 30 10:34:58 mailgw2 amavis[32042]: Internal decoder for .asc
Aug 30 10:34:58 mailgw2 amavis[32042]: Internal decoder for .uue
Aug 30 10:34:58 mailgw2 amavis[32042]: Internal decoder for .hqx
Aug 30 10:34:58 mailgw2 amavis[32042]: Internal decoder for .ync
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .F at
/usr/bin/unfreeze
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .Z at
/usr/bin/gzip -d
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .gz at
/usr/bin/gzip -d
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .bz2 at
/usr/bin/bzip2 -d
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .lzo at
/usr/bin/lzop -d
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .rpm at
/usr/bin/rpm2cpio
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .cpio at /bin/cpio
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .tar at
/bin/cpio
Aug 30 10:34:58 mailgw2 amavis[32042]: Found decoder for .deb at
/usr/bin/ar
Aug 30 10:34:58 mailgw2 amavis[32042]: Internal decoder for .zip
Aug 30 10:34:58 mailgw2 amavis[32042]: No decoder for .rar tried:
rar, unrar
Aug 30 10:34:59 mailgw2 amavis[32042]: Found decoder for .arj at
/usr/bin/arj
Aug 30 10:34:59 mailgw2 amavis[32042]: Found decoder for .arc at
/usr/bin/nomarch
Aug 30 10:34:59 mailgw2 amavis[32042]: No decoder for .zoo tried:
zoo, unzoo
Aug 30 10:34:59 mailgw2 amavis[32042]: No decoder for .lha tried: lha
Aug 30 10:34:59 mailgw2 amavis[32042]: Found decoder for .cab at
/usr/bin/cabextract
Aug 30 10:34:59 mailgw2 amavis[32042]: No decoder for .tnef tried: tnef
Aug 30 10:34:59 mailgw2 amavis[32042]: Internal decoder for .tnef
Aug 30 10:34:59 mailgw2 amavis[32042]: Found decoder for .exe at
/usr/bin/arj
Aug 30 10:34:59 mailgw2 amavis[32042]: Using primary internal av scanner
code for ClamAV-clamd
Aug 30 10:34:59 mailgw2 amavis[32042]: Found secondary av scanner
ClamAV-clamscan at /usr/bin/clamscan
Aug 30 10:34:59 mailgw2 amavis[32042]: Creating db in
/var/spool/amavisd/db/; BerkeleyDB 0.32, libdb 4.3

========================================================================================================
Mark.Martinec+ (Mark Martinec)
2012-08-30 14:18:08 UTC
Permalink
Nikolaos,
Post by Nikolaos Milas
My problem is I want to quarantine spam mail rather than totally discard
it, however, although (I think) I have followed directions/manual, spam
is not being quarantined.
My config is at the end of this message (as well the server
$final_spam_destiny = D_DISCARD;
$spam_quarantine_method = "local:spam/spam-%n-%m-%i" ;
What am I doing wrong?
$QUARANTINEDIR = undef;
Set it to:
$QUARANTINEDIR = '/var/blockedmail';

See:
http://www.ijs.si/software/amavisd/amavisd-new-docs.html#quarantine


Mark
Nikolaos Milas
2012-08-30 14:38:27 UTC
Permalink
Post by Mark.Martinec+ (Mark Martinec)
$QUARANTINEDIR = '/var/blockedmail';
Thanks Mark, it worked!

/var/blockedmail/ must be writable by amavis. If not, it causes a server
breakdown; /var/log/amavisd.log:

Aug 30 17:25:30 mailgw2 amavis[3987]: (!!)TROUBLE in pre_loop_hook:
QUARANTINEDIR directory not writable: /var/blockedmail at
/usr/sbin/amavisd line 7516.

# service amavisd restart
Shutting down amavisd: The amavisd daemon is not running
[FAILED]

Starting amavisd: Pid_file "/var/run/amavisd/amavisd.pid" already
exists. Overwriting!
[ OK ]

But when /var/blockedmail/ is writable, then everything runs OK!

By the way, can I configure amavisd so as to quarantine spam only if
score (X-Spam-Score) is higher than a value (rather than always)?

Thanks again!
Nick
Mark.Martinec+ (Mark Martinec)
2012-08-30 15:49:31 UTC
Permalink
Nick,
Post by Nikolaos Milas
Set it to: $QUARANTINEDIR = '/var/blockedmail';
Thanks Mark, it worked!
Good!
Post by Nikolaos Milas
/var/blockedmail/ must be writable by amavis.
QUARANTINEDIR directory not writable: /var/blockedmail
Of course. The failure is clearly reported.
Post by Nikolaos Milas
By the way, can I configure amavisd so as to quarantine spam only if
score (X-Spam-Score) is higher than a value (rather than always)?
Here is a default setting:

%quarantine_method_by_ccat = (
CC_VIRUS, sub { c('virus_quarantine_method') },
CC_BANNED, sub { c('banned_files_quarantine_method') },
CC_UNCHECKED, sub { c('unchecked_quarantine_method') },
CC_SPAM, sub { c('spam_quarantine_method') },
CC_BADH, sub { c('bad_header_quarantine_method') },
CC_CLEAN, sub { c('clean_quarantine_method') },
);

The $spam_quarantine_method in this case is effective when
a mail contents is classified as CC_SPAM, i.e. when its
spam score reaches or exceeds a kill level ($sa_kill_level_deflt).

There are two additional levels: tag2 level and tag3 level,
which are usually the same as a kill level, but may be
set lover than that for some additional flexibility.

@spam_tag_level_maps = (\$sa_tag_level_deflt); # CC_CLEAN,1
@spam_tag2_level_maps = (\$sa_tag2_level_deflt); # CC_SPAMMY
@spam_tag3_level_maps = (\$sa_tag3_level_deflt); # CC_SPAMMY,1
@spam_kill_level_maps = (\$sa_kill_level_deflt); # CC_SPAM"

When a score is above tag2 level (but below kill level),
mail contents is classified as CC_SPAMMY. This is where
mail receives its Subject tagging, X-Spam-Status:YES,
and adding address extensions. Its common usage is to let
a message be marked as a likely spam, but still delivered.
As it is supposed to be delivered, there is no need to
quarantine it, although you can do so by adding a
CC_SPAMMY entry into the %quarantine_method_by_ccat.

When a score is above tag3 level (but below kill level),
mail contents is classified as "CC_SPAMMY,1", i.e. with a minor
contents category 1. Consider it 'a likely blatant spam',
but not high enough to be killed. The tag3 level is usually
undefined or set to the same value as the kill level, so
it has no effect.

In summary: adjust the kill level to control
where spam quarantining and mail blocking starts.

Mark
Nikolaos Milas
2012-08-30 16:17:40 UTC
Permalink
Post by Nikolaos Milas
But when /var/blockedmail/ is writable, then everything runs OK!
I am trying to release a blocked message from quarantine, but I can't
make it.

Log from blocking:

Aug 30 17:29:03 mailgw2 amavis[4052]: (04052-01) Blocked SPAM,
[69.56.150.9] [195.251.204.221] <***@eurobjects.com> ->
<***@technet.noa.gr>, quarantine:
spam/04052-01-Od-cap3HyaUO-20120830T172903, Message-ID:
<***@eurobjects.com>, mail_id: Od-cap3HyaUO, Hits: 1000.751, 879 ms

Doc says: "To release a mail message an exact quarantine location from a
log file should be specified as an argument to amavisd-release", so:

Trying to release:

# amavisd-release spam/04052-01-Od-cap3HyaUO-20120830T172903
450 4.5.0 ERROR: Stored quarantine ID 'Od-cap3HyaUO' does not match
requested ID '20830T172903' at /usr/sbin/amavisd line 6866, <GEN15> line 7.

From the log:

Aug 30 19:02:39 mailgw2 amavis[5049]: (rel-20830T172903) Quarantined
message release: 20830T172903 <***@eurobjects.com> ->
<***@technet.noa.gr>
Aug 30 19:02:39 mailgw2 amavis[5049]: (rel-20830T172903) Quarantine
release 20830T172903: stored quar. ID 'Od-cap3HyaUO' does not match
requested ID '20830T172903'
Aug 30 19:02:39 mailgw2 amavis[5049]: (rel-20830T172903) WARN:
dispatch_from_quarantine failed: Stored quarantine ID 'Od-cap3HyaUO'
does not match requested ID '20830T172903' at /usr/sbin/amavisd line
6866, <GEN15> line 7.

Why can't I release the mail?

Thanks,
Nick
Mark.Martinec+ (Mark Martinec)
2012-08-30 16:23:18 UTC
Permalink
Nick,
Post by Nikolaos Milas
I am trying to release a blocked message from quarantine, but I can't
make it.
Aug 30 17:29:03 mailgw2 amavis[4052]: (04052-01) Blocked SPAM,
[69.56.150.9] [195.251.204.221]
quarantine: spam/04052-01-Od-cap3HyaUO-20120830T172903,
Hits: 1000.751, 879 ms
Doc says: "To release a mail message an exact quarantine location from a
log file should be specified as an argument to amavisd-release",
quarantine: spam/04052-01-Od-cap3HyaUO-20120830T172903
Post by Nikolaos Milas
# amavisd-release spam/04052-01-Od-cap3HyaUO-20120830T172903
450 4.5.0 ERROR: Stored quarantine ID 'Od-cap3HyaUO' does not match
requested ID '20830T172903' at /usr/sbin/amavisd line 6866, <GEN15> line 7.
$ amavisd-release spam/04052-01-Od-cap3HyaUO-20120830T172903


Mark
Nikolaos Milas
2012-08-30 18:05:15 UTC
Permalink
Post by Mark.Martinec+ (Mark Martinec)
Post by Nikolaos Milas
# amavisd-release spam/04052-01-Od-cap3HyaUO-20120830T172903
450 4.5.0 ERROR: Stored quarantine ID 'Od-cap3HyaUO' does not match
requested ID '20830T172903' at /usr/sbin/amavisd line 6866, <GEN15> line 7.
$ amavisd-release spam/04052-01-Od-cap3HyaUO-20120830T172903
Hmmm, that's exactly the command I issued as well (see above), but it
caused an error!

So, what may the cause be?

Nick
Simon Brereton
2012-08-30 18:46:34 UTC
Permalink
Post by Nikolaos Milas
Post by Mark.Martinec+ (Mark Martinec)
Post by Nikolaos Milas
# amavisd-release spam/04052-01-Od-cap3HyaUO-20120830T172903
450 4.5.0 ERROR: Stored quarantine ID 'Od-cap3HyaUO' does not match
requested ID '20830T172903' at /usr/sbin/amavisd line 6866, <GEN15>
line 7.
Post by Nikolaos Milas
Post by Mark.Martinec+ (Mark Martinec)
$ amavisd-release spam/04052-01-Od-cap3HyaUO-20120830T172903
Hmmm, that's exactly the command I issued as well (see above), but it
caused an error!
Post by Nikolaos Milas
So, what may the cause be?
Have you tried the full path?

Simon
Nikolaos Milas
2012-08-30 21:41:10 UTC
Permalink
Post by Nikolaos Milas
Hmmm, that's exactly the command I issued as well (see above), but it
caused an error!
So, what may the cause be?
An update:

As I was using amavisd-new-2.4.5-1.el5.noarch from the EPEL repo, I
thought I could try to upgrade to amavisd-new.x86_64.2.6.6-3.el5.rf
available at rpmforge repo. This caused me a whole lot of new problems
because the two RPMs were in fact totally different in their structure
(paths, config files, init scripts, etc.) but in the end *it seemed* it
worked and the release command gave this strange result (because there
were recipients indeed)!

[***@mailgw2 spam]# /usr/sbin/amavisd-release
spam/04052-01-Od-cap3HyaUO-20120830T172903
250 2.5.0 No recipients, nothing to do

In any case, as I had modified various stuff which should not remain in
such condition (so the above may not be a truly representative result),
I decided and returned back to the original amavisd-new RPM and things
run as before.

Finally, as a test, I decided to set:
$spam_quarantine_method = "local:spam/%n-%m" ;
rather than:
$spam_quarantine_method = "local:spam/%n-%m-%i" ;

And, to my (happy) surprise, this time it worked:

/var/log/amavisd.log:
Aug 31 00:30:43 mailgw2 amavis[2792]: (02792-01) Blocked SPAM,
[69.41.248.84] [195.251.204.222] <***@eurobjects.com> ->
<***@technet.noa.gr>, quarantine: spam/02792-01-bzM11CH7LOH8,
Message-ID: <***@eurobjects.com>, mail_id: bzM11CH7LOH8,
Hits: 999.999, 2446 ms

and:
[***@mailgw2 ~]# amavisd-release spam/02792-01-bzM11CH7LOH8
250 2.6.0 Ok, id=rel-bzM11CH7LOH8, from MTA([127.0.0.1]:10025): 250
2.0.0 Ok: queued as 77B862F888B

...which was delivered fine.

So the question now is: Why the format "local:spam/%n-%m-%i" is not
working right with amavisd-release ?

Thanks,
Nick
Mark.Martinec+ (Mark Martinec)
2012-08-30 23:15:50 UTC
Permalink
Nick,
Post by Nikolaos Milas
Post by Mark.Martinec+ (Mark Martinec)
$ amavisd-release spam/04052-01-Od-cap3HyaUO-20120830T172903
Hmmm, that's exactly the command I issued as well (see above),
but it caused an error!
Sorry, I wasn't paying attention.
Post by Nikolaos Milas
As I was using amavisd-new-2.4.5-1.el5.noarch from the EPEL repo,
Aha!
Post by Nikolaos Milas
$spam_quarantine_method = "local:spam/%n-%m" ;
$spam_quarantine_method = "local:spam/%n-%m-%i";
Good idea.
I'm glad.
Post by Nikolaos Milas
So the question now is: Why the format "local:spam/%n-%m-%i" is not
working right with amavisd-release ?
There is some guesswork in amavisd-release, trying to guess
from a syntax of its argument (without having access to amavisd
config file) whether the quarantine location refers to an SQL
storage or to a file, and whether this file is compressed
or not. There were some improvements in this area during
later versions, although I believe there are still some corner
cases where the guesswork can fail. Choosing a different
file naming convention can avoid ambiguity or a bug.
Alternatively, adjusting code in amavisd-release can adapt
it to a particular installation.

Mark

Continue reading on narkive:
Loading...