Changeset View
Changeset View
Standalone View
Standalone View
share/templates/amavisd.conf.j2
- This file was copied from share/templates/amavisd.conf.tpl.
use strict; | use strict; | ||||
# a minimalistic configuration file for amavisd-new with all necessary settings | # 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-default for a list of all variables with their defaults; | ||||
# see amavisd.conf-sample for a traditional-style commented file; | # see amavisd.conf-sample for a traditional-style commented file; | ||||
# for more details see documentation in INSTALL, README_FILES/* | # for more details see documentation in INSTALL, README_FILES/* | ||||
# and at http://www.ijs.si/software/amavisd/amavisd-new-docs.html | # and at http://www.ijs.si/software/amavisd/amavisd-new-docs.html | ||||
# COMMONLY ADJUSTED SETTINGS: | # COMMONLY ADJUSTED SETTINGS: | ||||
# @bypass_virus_checks_maps = (1); # controls running of anti-virus code | # @bypass_virus_checks_maps = (1); # controls running of anti-virus code | ||||
# @bypass_spam_checks_maps = (1); # controls running of anti-spam code | # @bypass_spam_checks_maps = (1); # controls running of anti-spam code | ||||
# \$bypass_decode_parts = 1; # controls running of decoders&dearchivers | # $bypass_decode_parts = 1; # controls running of decoders&dearchivers | ||||
\$max_servers = 2; # num of pre-forked children (2..30 is common), -m | $max_servers = 2; # num of pre-forked children (2..30 is common), -m | ||||
\$daemon_user = 'amavis'; # (no default; customary: vscan or amavis), -u | $daemon_user = 'amavis'; # (no default; customary: vscan or amavis), -u | ||||
\$daemon_group = 'amavis'; # (no default; customary: vscan or amavis), -g | $daemon_group = 'amavis'; # (no default; customary: vscan or amavis), -g | ||||
\$mydomain = '$primary_domain'; # a convenient default for other settings | $mydomain = '{{ kolab.primary_domain }}'; # a convenient default for other settings | ||||
\$MYHOME = '/var/spool/amavisd'; # a convenient default for other settings, -H | $MYHOME = '/var/spool/amavisd'; # a convenient default for other settings, -H | ||||
\$TEMPBASE = "\$MYHOME/tmp"; # working directory, needs to exist, -T | $TEMPBASE = "$MYHOME/tmp"; # working directory, needs to exist, -T | ||||
\$ENV{TMPDIR} = \$TEMPBASE; # environment variable TMPDIR, used by SA, etc. | $ENV{TMPDIR} = $TEMPBASE; # environment variable TMPDIR, used by SA, etc. | ||||
\$QUARANTINEDIR = undef; # -Q | $QUARANTINEDIR = undef; # -Q | ||||
# \$quarantine_subdir_levels = 1; # add level of subdirs to disperse quarantine | # $quarantine_subdir_levels = 1; # add level of subdirs to disperse quarantine | ||||
# \$release_format = 'resend'; # 'attach', 'plain', 'resend' | # $release_format = 'resend'; # 'attach', 'plain', 'resend' | ||||
# \$report_format = 'arf'; # 'attach', 'plain', 'resend', 'arf' | # $report_format = 'arf'; # 'attach', 'plain', 'resend', 'arf' | ||||
# \$daemon_chroot_dir = \$MYHOME; # chroot directory or undef, -R | # $daemon_chroot_dir = $MYHOME; # chroot directory or undef, -R | ||||
\$db_home = "\$MYHOME/db"; # dir for bdb nanny/cache/snmp databases, -D | $db_home = "$MYHOME/db"; # dir for bdb nanny/cache/snmp databases, -D | ||||
# \$helpers_home = "\$MYHOME/var"; # working directory for SpamAssassin, -S | # $helpers_home = "$MYHOME/var"; # working directory for SpamAssassin, -S | ||||
\$lock_file = "/var/run/amavisd/amavisd.lock"; # -L | $lock_file = "/var/run/amavisd/amavisd.lock"; # -L | ||||
\$pid_file = "/var/run/amavisd/amavisd.pid"; # -P | $pid_file = "/var/run/amavisd/amavisd.pid"; # -P | ||||
#NOTE: create directories \$MYHOME/tmp, \$MYHOME/var, \$MYHOME/db manually | #NOTE: create directories $MYHOME/tmp, $MYHOME/var, $MYHOME/db manually | ||||
\$log_level = 9; # verbosity 0..5, -d | $log_level = 3; # verbosity 0..5, -d | ||||
\$log_recip_templ = undef; # disable by-recipient level-0 log entries | $log_recip_templ = undef; # disable by-recipient level-0 log entries | ||||
\$DO_SYSLOG = 1; # log via syslogd (preferred) | $DO_SYSLOG = 1; # log via syslogd (preferred) | ||||
\$syslog_facility = 'mail'; # Syslog facility as a string | $syslog_facility = 'mail'; # Syslog facility as a string | ||||
# e.g.: mail, daemon, user, local0, ... local7 | # e.g.: mail, daemon, user, local0, ... local7 | ||||
\$syslog_priority = 'debug'; # Syslog base (minimal) priority as a string, | $syslog_priority = 'debug'; # Syslog base (minimal) priority as a string, | ||||
# choose from: emerg, alert, crit, err, warning, notice, info, debug | # choose from: emerg, alert, crit, err, warning, notice, info, debug | ||||
\$enable_db = 1; # enable use of BerkeleyDB/libdb (SNMP and nanny) | $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 | $enable_global_cache = 1; # enable use of libdb-based cache if $enable_db=1 | ||||
\$nanny_details_level = 2; # nanny verbosity: 1: traditional, 2: detailed | $nanny_details_level = 2; # nanny verbosity: 1: traditional, 2: detailed | ||||
\$enable_dkim_verification = 1; # enable DKIM signatures verification | $enable_dkim_verification = 1; # enable DKIM signatures verification | ||||
\$enable_dkim_signing = 1; # load DKIM signing code, keys defined by dkim_key | $enable_dkim_signing = 1; # load DKIM signing code, keys defined by dkim_key | ||||
\$enable_ldap = 1; | $enable_ldap = 1; | ||||
\$default_ldap = { | $default_ldap = { | ||||
hostname => [ 'localhost' ], | hostname => [ '{{ ldap.ldap_uri}}' ], | ||||
version => 3, | version => 3, | ||||
timeout => 5, | timeout => 5, | ||||
tls => 0, | tls => 0, | ||||
base => '$ldap_base_dn', | base => '{{ ldap.base_dn }}', | ||||
query_filter => '$ldap_filter', | query_filter => '(|{% for item in ldap.mail_attributes.split(',') -%}({{ item | trim }}=%m){% endfor -%})', | ||||
bind_dn => '$ldap_bind_dn', | bind_dn => '{{ ldap.service_bind_dn }}', | ||||
bind_password => '$ldap_bind_pw' | bind_password => '{{ ldap.service_bind_pw }}' | ||||
}; | }; | ||||
@local_domains_maps = ( [".\$mydomain"] ); # list of all local domains | @local_domains_maps = ( [".$mydomain"] ); # list of all local domains | ||||
@mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0::]/10 | @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 ); | 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 ); | ||||
\$unix_socketname = "\$MYHOME/amavisd.sock"; # amavisd-release or amavis-milter | $unix_socketname = "$MYHOME/amavisd.sock"; # amavisd-release or amavis-milter | ||||
# option(s) -p overrides \$inet_socket_port and \$unix_socketname | # option(s) -p overrides $inet_socket_port and $unix_socketname | ||||
\$inet_socket_port = 10024; # listen on this local TCP port(s) | $inet_socket_port = 10024; # listen on this local TCP port(s) | ||||
# \$inet_socket_port = [10024,10026]; # listen on multiple TCP ports | # $inet_socket_port = [10024,10026]; # listen on multiple TCP ports | ||||
\$policy_bank{'MYNETS'} = { # mail originating from @mynetworks | $policy_bank{'MYNETS'} = { # mail originating from @mynetworks | ||||
originating => 1, # is true in MYNETS by default, but let's make it explicit | originating => 1, # is true in MYNETS by default, but let's make it explicit | ||||
os_fingerprint_method => undef, # don't query p0f for internal clients | os_fingerprint_method => undef, # don't query p0f for internal clients | ||||
}; | }; | ||||
# it is up to MTA to re-route mail from authenticated roaming users or | # it is up to MTA to re-route mail from authenticated roaming users or | ||||
# from internal hosts to a dedicated TCP port (such as 10026) for filtering | # from internal hosts to a dedicated TCP port (such as 10026) for filtering | ||||
\$interface_policy{'10026'} = 'ORIGINATING'; | $interface_policy{'10026'} = 'ORIGINATING'; | ||||
\$policy_bank{'ORIGINATING'} = { # mail supposedly originating from our users | $policy_bank{'ORIGINATING'} = { # mail supposedly originating from our users | ||||
originating => 1, # declare that mail was submitted by our smtp client | originating => 1, # declare that mail was submitted by our smtp client | ||||
allow_disclaimers => 1, # enables disclaimer insertion if available | allow_disclaimers => 1, # enables disclaimer insertion if available | ||||
# notify administrator of locally originating malware | # notify administrator of locally originating malware | ||||
virus_admin_maps => ["virusalert\@\$mydomain"], | virus_admin_maps => ["virusalert\@$mydomain"], | ||||
spam_admin_maps => ["virusalert\@\$mydomain"], | spam_admin_maps => ["virusalert\@$mydomain"], | ||||
warnbadhsender => 1, | warnbadhsender => 1, | ||||
# forward to a smtpd service providing DKIM signing service | # forward to a smtpd service providing DKIM signing service | ||||
forward_method => 'smtp:[127.0.0.1]:10027', | forward_method => 'smtp:[127.0.0.1]:10027', | ||||
# force MTA conversion to 7-bit (e.g. before DKIM signing) | # force MTA conversion to 7-bit (e.g. before DKIM signing) | ||||
smtpd_discard_ehlo_keywords => ['8BITMIME'], | smtpd_discard_ehlo_keywords => ['8BITMIME'], | ||||
bypass_banned_checks_maps => [1], # allow sending any file names and types | bypass_banned_checks_maps => [1], # allow sending any file names and types | ||||
terminate_dsn_on_notify_success => 0, # don't remove NOTIFY=SUCCESS option | terminate_dsn_on_notify_success => 0, # don't remove NOTIFY=SUCCESS option | ||||
}; | }; | ||||
\$interface_policy{'SOCK'} = 'AM.PDP-SOCK'; # only applies with \$unix_socketname | $interface_policy{'SOCK'} = 'AM.PDP-SOCK'; # only applies with $unix_socketname | ||||
# Use with amavis-release over a socket or with Petr Rehor's amavis-milter.c | # 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'): | # (with amavis-milter.c from this package or old amavis.c client use 'AM.CL'): | ||||
\$policy_bank{'AM.PDP-SOCK'} = { | $policy_bank{'AM.PDP-SOCK'} = { | ||||
protocol => 'AM.PDP', | protocol => 'AM.PDP', | ||||
auth_required_release => 0, # do not require secret_id for amavisd-release | auth_required_release => 0, # do not require secret_id for amavisd-release | ||||
}; | }; | ||||
\$sa_tag_level_deflt = -10; # add spam info headers if at, or above that level | $sa_tag_level_deflt = -10; # add spam info headers if at, or above that level | ||||
\$sa_tag2_level_deflt = 6.2; # add 'spam detected' headers at that level | $sa_tag2_level_deflt = 6.2; # add 'spam detected' headers at that level | ||||
\$sa_kill_level_deflt = 6.9; # triggers spam evasive actions (e.g. blocks mail) | $sa_kill_level_deflt = 6.9; # 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 = 10; # spam level beyond which a DSN is not sent | ||||
\$sa_crediblefrom_dsn_cutoff_level = 18; # likewise, but for a likely valid From | $sa_crediblefrom_dsn_cutoff_level = 18; # likewise, but for a likely valid From | ||||
# \$sa_quarantine_cutoff_level = 25; # spam level beyond which quarantine is off | # $sa_quarantine_cutoff_level = 25; # spam level beyond which quarantine is off | ||||
\$penpals_bonus_score = 8; # (no effect without a @storage_sql_dsn database) | $penpals_bonus_score = 8; # (no effect without a @storage_sql_dsn database) | ||||
\$penpals_threshold_high = \$sa_kill_level_deflt; # don't waste time on hi spam | $penpals_threshold_high = $sa_kill_level_deflt; # don't waste time on hi spam | ||||
\$bounce_killer_score = 100; # spam score points to add for joe-jobbed bounces | $bounce_killer_score = 100; # spam score points to add for joe-jobbed bounces | ||||
\$sa_mail_body_size_limit = 400*1024; # don't waste time on SA if mail is larger | $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? | $sa_local_tests_only = 0; # only tests which do not require internet access? | ||||
# @lookup_sql_dsn = | # @lookup_sql_dsn = | ||||
# ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'user1', 'passwd1'], | # ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'user1', 'passwd1'], | ||||
# ['DBI:mysql:database=mail;host=host2', 'username2', 'password2'], | # ['DBI:mysql:database=mail;host=host2', 'username2', 'password2'], | ||||
# ["DBI:SQLite:dbname=\$MYHOME/sql/mail_prefs.sqlite", '', ''] ); | # ["DBI:SQLite:dbname=$MYHOME/sql/mail_prefs.sqlite", '', ''] ); | ||||
# @storage_sql_dsn = @lookup_sql_dsn; # none, same, or separate database | # @storage_sql_dsn = @lookup_sql_dsn; # none, same, or separate database | ||||
# \$timestamp_fmt_mysql = 1; # if using MySQL *and* msgs.time_iso is TIMESTAMP; | # $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) | # defaults to 0, which is good for non-MySQL or if msgs.time_iso is CHAR(16) | ||||
\$virus_admin = undef; # notifications recip. | $virus_admin = undef; # notifications recip. | ||||
\$mailfrom_notify_admin = undef; # notifications sender | $mailfrom_notify_admin = undef; # notifications sender | ||||
\$mailfrom_notify_recip = undef; # notifications sender | $mailfrom_notify_recip = undef; # notifications sender | ||||
\$mailfrom_notify_spamadmin = undef; # notifications sender | $mailfrom_notify_spamadmin = undef; # notifications sender | ||||
\$mailfrom_to_quarantine = ''; # null return path; uses original sender if undef | $mailfrom_to_quarantine = ''; # null return path; uses original sender if undef | ||||
@addr_extension_virus_maps = ('virus'); | @addr_extension_virus_maps = ('virus'); | ||||
@addr_extension_banned_maps = ('banned'); | @addr_extension_banned_maps = ('banned'); | ||||
@addr_extension_spam_maps = ('spam'); | @addr_extension_spam_maps = ('spam'); | ||||
@addr_extension_bad_header_maps = ('badh'); | @addr_extension_bad_header_maps = ('badh'); | ||||
# \$recipient_delimiter = '+'; # undef disables address extensions altogether | # $recipient_delimiter = '+'; # undef disables address extensions altogether | ||||
# when enabling addr extensions do also Postfix/main.cf: recipient_delimiter=+ | # when enabling addr extensions do also Postfix/main.cf: recipient_delimiter=+ | ||||
\$path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin'; | $path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin'; | ||||
# \$dspam = 'dspam'; | # $dspam = 'dspam'; | ||||
\$MAXLEVELS = 14; | $MAXLEVELS = 14; | ||||
\$MAXFILES = 1500; | $MAXFILES = 1500; | ||||
\$MIN_EXPANSION_QUOTA = 100*1024; # bytes (default undef, not enforced) | $MIN_EXPANSION_QUOTA = 100*1024; # bytes (default undef, not enforced) | ||||
\$MAX_EXPANSION_QUOTA = 300*1024*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_virus = 1; # MIME-wrap passed infected mail | ||||
\$defang_banned = 1; # MIME-wrap passed mail containing banned name | $defang_banned = 1; # MIME-wrap passed mail containing banned name | ||||
# for defanging bad headers only turn on certain minor contents categories: | # 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.",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.",5"} = 1; # header line longer than 998 characters | ||||
\$defang_by_ccat{+CC_BADH.",6"} = 1; # header field syntax error | $defang_by_ccat{+CC_BADH.",6"} = 1; # header field syntax error | ||||
# OTHER MORE COMMON SETTINGS (defaults may suffice): | # OTHER MORE COMMON SETTINGS (defaults may suffice): | ||||
# \$myhostname = 'host.example.com'; # must be a fully-qualified domain name! | # $myhostname = 'host.example.com'; # must be a fully-qualified domain name! | ||||
# \$notify_method = 'smtp:[127.0.0.1]:10025'; | # $notify_method = 'smtp:[127.0.0.1]:10025'; | ||||
# \$forward_method = 'smtp:[127.0.0.1]:10025'; # set to undef with milter! | # $forward_method = 'smtp:[127.0.0.1]:10025'; # set to undef with milter! | ||||
\$final_virus_destiny = D_DISCARD; | $final_virus_destiny = D_DISCARD; | ||||
\$final_banned_destiny = D_BOUNCE; | $final_banned_destiny = D_BOUNCE; | ||||
\$final_spam_destiny = D_DISCARD; | $final_spam_destiny = D_DISCARD; | ||||
\$final_bad_header_destiny = D_BOUNCE; | $final_bad_header_destiny = D_BOUNCE; | ||||
# \$bad_header_quarantine_method = undef; | # $bad_header_quarantine_method = undef; | ||||
# \$os_fingerprint_method = 'p0f:*:2345'; # to query p0f-analyzer.pl | # $os_fingerprint_method = 'p0f:*:2345'; # to query p0f-analyzer.pl | ||||
\#\# hierarchy by which a final setting is chosen: | ## hierarchy by which a final setting is chosen: | ||||
\#\# policy bank (based on port or IP address) -> *_by_ccat | ## policy bank (based on port or IP address) -> *_by_ccat | ||||
\#\# *_by_ccat (based on mail contents) -> *_maps | ## *_by_ccat (based on mail contents) -> *_maps | ||||
\#\# *_maps (based on recipient address) -> final configuration value | ## *_maps (based on recipient address) -> final configuration value | ||||
# SOME OTHER VARIABLES WORTH CONSIDERING (see amavisd.conf-default for all) | # SOME OTHER VARIABLES WORTH CONSIDERING (see amavisd.conf-default for all) | ||||
# \$warnbadhsender, | # $warnbadhsender, | ||||
# \$warnvirusrecip, \$warnbannedrecip, \$warnbadhrecip, (or @warn*recip_maps) | # $warnvirusrecip, $warnbannedrecip, $warnbadhrecip, (or @warn*recip_maps) | ||||
# | # | ||||
# @bypass_virus_checks_maps, @bypass_spam_checks_maps, | # @bypass_virus_checks_maps, @bypass_spam_checks_maps, | ||||
# @bypass_banned_checks_maps, @bypass_header_checks_maps, | # @bypass_banned_checks_maps, @bypass_header_checks_maps, | ||||
# | # | ||||
# @virus_lovers_maps, @spam_lovers_maps, | # @virus_lovers_maps, @spam_lovers_maps, | ||||
# @banned_files_lovers_maps, @bad_header_lovers_maps, | # @banned_files_lovers_maps, @bad_header_lovers_maps, | ||||
# | # | ||||
# @blacklist_sender_maps, @score_sender_maps, | # @blacklist_sender_maps, @score_sender_maps, | ||||
# | # | ||||
# \$clean_quarantine_method, \$virus_quarantine_to, \$banned_quarantine_to, | # $clean_quarantine_method, $virus_quarantine_to, $banned_quarantine_to, | ||||
# \$bad_header_quarantine_to, \$spam_quarantine_to, | # $bad_header_quarantine_to, $spam_quarantine_to, | ||||
# | # | ||||
# \$defang_bad_header, \$defang_undecipherable, \$defang_spam | # $defang_bad_header, $defang_undecipherable, $defang_spam | ||||
# REMAINING IMPORTANT VARIABLES ARE LISTED HERE BECAUSE OF LONGER ASSIGNMENTS | # REMAINING IMPORTANT VARIABLES ARE LISTED HERE BECAUSE OF LONGER ASSIGNMENTS | ||||
@keep_decoded_original_maps = (new_RE( | @keep_decoded_original_maps = (new_RE( | ||||
qr'^MAIL\$', # retain full original message for virus checking | qr'^MAIL$', # retain full original message for virus checking | ||||
qr'^MAIL-UNDECIPHERABLE\$', # recheck full mail if it contains undecipherables | qr'^MAIL-UNDECIPHERABLE$', # recheck full mail if it contains undecipherables | ||||
qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i, | qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i, | ||||
# qr'^Zip archive data', # don't trust Archive::Zip | # qr'^Zip archive data', # don't trust Archive::Zip | ||||
)); | )); | ||||
# for \$banned_namepath_re (a new-style of banned table) see amavisd.conf-sample | # for $banned_namepath_re (a new-style of banned table) see amavisd.conf-sample | ||||
\$banned_filename_re = new_RE( | $banned_filename_re = new_RE( | ||||
\#\## BLOCKED ANYWHERE | ### BLOCKED ANYWHERE | ||||
# qr'^UNDECIPHERABLE\$', # is or contains any undecipherable components | # qr'^UNDECIPHERABLE$', # is or contains any undecipherable components | ||||
qr'^\.(exe-ms|dll)\$', # banned file(1) types, rudimentary | qr'^\.(exe-ms|dll)$', # banned file(1) types, rudimentary | ||||
# qr'^\.(exe|lha|tnef|cab|dll)\$', # banned file(1) types | # qr'^\.(exe|lha|tnef|cab|dll)$', # banned file(1) types | ||||
\#\## BLOCK THE FOLLOWING, EXCEPT WITHIN UNIX ARCHIVES: | ### BLOCK THE FOLLOWING, EXCEPT WITHIN UNIX ARCHIVES: | ||||
# [ qr'^\.(gz|bz2)\$' => 0 ], # allow any in gzip or bzip2 | # [ qr'^\.(gz|bz2)$' => 0 ], # allow any in gzip or bzip2 | ||||
[ qr'^\.(rpm|cpio|tar)\$' => 0 ], # allow any in Unix-type archives | [ qr'^\.(rpm|cpio|tar)$' => 0 ], # allow any in Unix-type archives | ||||
qr'.\.(pif|scr)\$'i, # banned extensions - rudimentary | qr'.\.(pif|scr)$'i, # banned extensions - rudimentary | ||||
# qr'^\.zip\$', # block zip type | # qr'^\.zip$', # block zip type | ||||
\#\## BLOCK THE FOLLOWING, EXCEPT WITHIN ARCHIVES: | ### BLOCK THE FOLLOWING, EXCEPT WITHIN ARCHIVES: | ||||
# [ qr'^\.(zip|rar|arc|arj|zoo)\$'=> 0 ], # allow any within these archives | # [ qr'^\.(zip|rar|arc|arj|zoo)$'=> 0 ], # allow any within these archives | ||||
qr'^application/x-msdownload\$'i, # block these MIME types | qr'^application/x-msdownload$'i, # block these MIME types | ||||
qr'^application/x-msdos-program\$'i, | qr'^application/x-msdos-program$'i, | ||||
qr'^application/hta\$'i, | qr'^application/hta$'i, | ||||
# qr'^message/partial\$'i, # rfc2046 MIME type | # qr'^message/partial$'i, # rfc2046 MIME type | ||||
# qr'^message/external-body\$'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'^(application/x-msmetafile|image/x-wmf)$'i, # Windows Metafile MIME type | ||||
# qr'^\.wmf\$', # Windows Metafile file(1) type | # qr'^\.wmf$', # Windows Metafile file(1) type | ||||
# block certain double extensions in filenames | # block certain double extensions in filenames | ||||
qr'\.[^./]*[A-Za-z][^./]*\.\s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.\s]*\$'i, | 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-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'\{[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)$'i, # banned extension - basic | ||||
# qr'.\.(exe|vbs|pif|scr|cpl|bat|cmd|com)\$'i, # banned extension - basic+cmd | # 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| | # 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| | # 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| | # ops|pcd|pif|prg|reg|scr|sct|shb|shs|vb|vbe|vbs| | ||||
# wmf|wsc|wsf|wsh)\$'ix, # banned ext - long | # wmf|wsc|wsf|wsh)$'ix, # banned ext - long | ||||
# qr'.\.(ani|cur|ico)\$'i, # banned cursors and icons filename | # qr'.\.(ani|cur|ico)$'i, # banned cursors and icons filename | ||||
# qr'^\.ani\$', # banned animated cursor file(1) type | # qr'^\.ani$', # banned animated cursor file(1) type | ||||
# qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)\$'i, # banned extension - WinZip vulnerab. | # 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 | # See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262631 | ||||
# and http://www.cknow.com/vtutor/vtextensions.htm | # and http://www.cknow.com/vtutor/vtextensions.htm | ||||
# ENVELOPE SENDER SOFT-WHITELISTING / SOFT-BLACKLISTING | # ENVELOPE SENDER SOFT-WHITELISTING / SOFT-BLACKLISTING | ||||
@score_sender_maps = ({ # a by-recipient hash lookup table, | @score_sender_maps = ({ # a by-recipient hash lookup table, | ||||
# results from all matching recipient tables are summed | # results from all matching recipient tables are summed | ||||
# \#\# per-recipient personal tables (NOTE: positive: black, negative: white) | # ## per-recipient personal tables (NOTE: positive: black, negative: white) | ||||
# 'user1@example.com' => [{'bla-mobile.press@example.com' => 10.0}], | # 'user1@example.com' => [{'bla-mobile.press@example.com' => 10.0}], | ||||
# 'user3@example.com' => [{'.ebay.com' => -3.0}], | # 'user3@example.com' => [{'.ebay.com' => -3.0}], | ||||
# 'user4@example.com' => [{'cleargreen@cleargreen.com' => -7.0, | # 'user4@example.com' => [{'cleargreen@cleargreen.com' => -7.0, | ||||
# '.cleargreen.com' => -5.0}], | # '.cleargreen.com' => -5.0}], | ||||
\#\# site-wide opinions about senders (the '.' matches any recipient) | ## site-wide opinions about senders (the '.' matches any recipient) | ||||
'.' => [ # the _first_ matching sender determines the score boost | '.' => [ # the _first_ matching sender determines the score boost | ||||
new_RE( # regexp-type lookup table, just happens to be all soft-blacklist | new_RE( # regexp-type lookup table, just happens to be all soft-blacklist | ||||
[qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i => 5.0], | [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i => 5.0], | ||||
[qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'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'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 5.0], | ||||
[qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i => 5.0], | [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i => 5.0], | ||||
[qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i => 5.0], | [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i => 5.0], | ||||
▲ Show 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | # ['doc', \&do_ole, 'ripole'], | ||||
['tnef', \&do_tnef], | ['tnef', \&do_tnef], | ||||
# ['sit', \&do_unstuff, 'unstuff'], # broken/unsafe decoder | # ['sit', \&do_unstuff, 'unstuff'], # broken/unsafe decoder | ||||
['exe', \&do_executable, ['rar','unrar'], 'lha', ['arj','unarj'] ], | ['exe', \&do_executable, ['rar','unrar'], 'lha', ['arj','unarj'] ], | ||||
); | ); | ||||
@av_scanners = ( | @av_scanners = ( | ||||
# \#\## http://www.clanfield.info/sophie/ (http://www.vanja.com/tools/sophie/) | # ### http://www.clanfield.info/sophie/ (http://www.vanja.com/tools/sophie/) | ||||
# ['Sophie', | # ['Sophie', | ||||
# \&ask_daemon, ["{}/\n", '/var/run/sophie'], | # \&ask_daemon, ["{}/\n", '/var/run/sophie'], | ||||
# qr/(?x)^ 0+ ( : | [\000\r\n]* \$)/m, qr/(?x)^ 1 ( : | [\000\r\n]* \$)/m, | # qr/(?x)^ 0+ ( : | [\000\r\n]* $)/m, qr/(?x)^ 1 ( : | [\000\r\n]* $)/m, | ||||
# qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* \$/m ], | # qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/m ], | ||||
# \#\## http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/ | # ### http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/ | ||||
# ['Sophos SAVI', \&sophos_savi ], | # ['Sophos SAVI', \&sophos_savi ], | ||||
# \#\## http://www.clamav.net/ | # ### http://www.clamav.net/ | ||||
['ClamAV-clamd', | ['ClamAV-clamd', | ||||
\&ask_daemon, ["CONTSCAN {}\n", "$clamdsock"], | \&ask_daemon, ["CONTSCAN {}\n", "{{ clamdsock }}"], | ||||
qr/\bOK\$/m, qr/\bFOUND\$/m, | qr/\bOK$/m, qr/\bFOUND$/m, | ||||
qr/^.*?: (?!Infected Archive)(.*) FOUND\$/m ], | qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], | ||||
# # NOTE: run clamd under the same user as amavisd, or run it under its own | # # 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 | # # uid such as clamav, add user clamav to the amavis group, and then add | ||||
# # AllowSupplementaryGroups to clamd.conf; | # # AllowSupplementaryGroups to clamd.conf; | ||||
# # NOTE: match socket name (LocalSocket) in clamav.conf to the socket name in | # # NOTE: match socket name (LocalSocket) in clamav.conf to the socket name in | ||||
# # this entry; when running chrooted one may prefer socket "\$MYHOME/clamd". | # # this entry; when running chrooted one may prefer socket "$MYHOME/clamd". | ||||
# \#\## http://www.clamav.net/ and CPAN (memory-hungry! clamd is preferred) | # ### http://www.clamav.net/ and CPAN (memory-hungry! clamd is preferred) | ||||
# # note that Mail::ClamAV requires perl to be build with threading! | # # note that Mail::ClamAV requires perl to be build with threading! | ||||
# ['Mail::ClamAV', \&ask_clamav, "*", [0], [1], qr/^INFECTED: (.+)/m ], | # ['Mail::ClamAV', \&ask_clamav, "*", [0], [1], qr/^INFECTED: (.+)/m ], | ||||
# \#\## http://www.openantivirus.org/ | # ### http://www.openantivirus.org/ | ||||
# ['OpenAntiVirus ScannerDaemon (OAV)', | # ['OpenAntiVirus ScannerDaemon (OAV)', | ||||
# \&ask_daemon, ["SCAN {}\n", '127.0.0.1:8127'], | # \&ask_daemon, ["SCAN {}\n", '127.0.0.1:8127'], | ||||
# qr/^OK/m, qr/^FOUND: /m, qr/^FOUND: (.+)/m ], | # qr/^OK/m, qr/^FOUND: /m, qr/^FOUND: (.+)/m ], | ||||
# \#\## http://www.vanja.com/tools/trophie/ | # ### http://www.vanja.com/tools/trophie/ | ||||
# ['Trophie', | # ['Trophie', | ||||
# \&ask_daemon, ["{}/\n", '/var/run/trophie'], | # \&ask_daemon, ["{}/\n", '/var/run/trophie'], | ||||
# qr/(?x)^ 0+ ( : | [\000\r\n]* \$)/m, qr/(?x)^ 1 ( : | [\000\r\n]* \$)/m, | # qr/(?x)^ 0+ ( : | [\000\r\n]* $)/m, qr/(?x)^ 1 ( : | [\000\r\n]* $)/m, | ||||
# qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* \$/m ], | # qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/m ], | ||||
# \#\## http://www.grisoft.com/ | # ### http://www.grisoft.com/ | ||||
# ['AVG Anti-Virus', | # ['AVG Anti-Virus', | ||||
# \&ask_daemon, ["SCAN {}\n", '127.0.0.1:55555'], | # \&ask_daemon, ["SCAN {}\n", '127.0.0.1:55555'], | ||||
# qr/^200/m, qr/^403/m, qr/^403 .*?: ([^\r\n]+)/m ], | # qr/^200/m, qr/^403/m, qr/^403 .*?: ([^\r\n]+)/m ], | ||||
# \#\## http://www.f-prot.com/ | # ### http://www.f-prot.com/ | ||||
# ['F-Prot fpscand', # F-PROT Antivirus for BSD/Linux/Solaris, version 6 | # ['F-Prot fpscand', # F-PROT Antivirus for BSD/Linux/Solaris, version 6 | ||||
# \&ask_daemon, | # \&ask_daemon, | ||||
# ["SCAN FILE {}/*\n", '127.0.0.1:10200'], | # ["SCAN FILE {}/*\n", '127.0.0.1:10200'], | ||||
# qr/^(0|8|64) /m, | # qr/^(0|8|64) /m, | ||||
# qr/^([1235679]|1[01345]) |<[^>:]*(?i)(infected|suspicious|unwanted)/m, | # qr/^([1235679]|1[01345]) |<[^>:]*(?i)(infected|suspicious|unwanted)/m, | ||||
# qr/(?i)<[^>:]*(?:infected|suspicious|unwanted)[^>:]*: ([^>]*)>/m ], | # qr/(?i)<[^>:]*(?:infected|suspicious|unwanted)[^>:]*: ([^>]*)>/m ], | ||||
# \#\## http://www.f-prot.com/ | # ### http://www.f-prot.com/ | ||||
# ['F-Prot f-protd', # old version | # ['F-Prot f-protd', # old version | ||||
# \&ask_daemon, | # \&ask_daemon, | ||||
# ["GET {}/*?-dumb%20-archive%20-packed HTTP/1.0\r\n\r\n", | # ["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:10200', '127.0.0.1:10201', '127.0.0.1:10202', | ||||
# '127.0.0.1:10203', '127.0.0.1:10204'] ], | # '127.0.0.1:10203', '127.0.0.1:10204'] ], | ||||
# qr/(?i)<summary[^>]*>clean<\/summary>/m, | # qr/(?i)<summary[^>]*>clean<\/summary>/m, | ||||
# qr/(?i)<summary[^>]*>infected<\/summary>/m, | # qr/(?i)<summary[^>]*>infected<\/summary>/m, | ||||
# qr/(?i)<name>(.+)<\/name>/m ], | # qr/(?i)<name>(.+)<\/name>/m ], | ||||
# \#\## http://www.sald.com/, http://www.dials.ru/english/, http://www.drweb.ru/ | # ### http://www.sald.com/, http://www.dials.ru/english/, http://www.drweb.ru/ | ||||
# ['DrWebD', \&ask_daemon, # DrWebD 4.31 or later | # ['DrWebD', \&ask_daemon, # DrWebD 4.31 or later | ||||
# [pack('N',1). # DRWEBD_SCAN_CMD | # [pack('N',1). # DRWEBD_SCAN_CMD | ||||
# pack('N',0x00280001). # DONT_CHANGEMAIL, IS_MAIL, RETURN_VIRUSES | # pack('N',0x00280001). # DONT_CHANGEMAIL, IS_MAIL, RETURN_VIRUSES | ||||
# pack('N', # path length | # pack('N', # path length | ||||
# length("\$TEMPBASE/amavis-yyyymmddTHHMMSS-xxxxx/parts/pxxx")). | # length("$TEMPBASE/amavis-yyyymmddTHHMMSS-xxxxx/parts/pxxx")). | ||||
# '{}/*'. # path | # '{}/*'. # path | ||||
# pack('N',0). # content size | # pack('N',0). # content size | ||||
# pack('N',0), | # pack('N',0), | ||||
# '/var/drweb/run/drwebd.sock', | # '/var/drweb/run/drwebd.sock', | ||||
# # '/var/amavis/var/run/drwebd.sock', # suitable for chroot | # # '/var/amavis/var/run/drwebd.sock', # suitable for chroot | ||||
# # '/usr/local/drweb/run/drwebd.sock', # FreeBSD drweb ports default | # # '/usr/local/drweb/run/drwebd.sock', # FreeBSD drweb ports default | ||||
# # '127.0.0.1:3000', # or over an inet socket | # # '127.0.0.1:3000', # or over an inet socket | ||||
# ], | # ], | ||||
# qr/\A\x00[\x10\x11][\x00\x10]\x00/sm, # IS_CLEAN,EVAL_KEY; SKIPPED | # qr/\A\x00[\x10\x11][\x00\x10]\x00/sm, # IS_CLEAN,EVAL_KEY; SKIPPED | ||||
# qr/\A\x00[\x00\x01][\x00\x10][\x20\x40\x80]/sm,# KNOWN_V,UNKNOWN_V,V._MODIF | # qr/\A\x00[\x00\x01][\x00\x10][\x20\x40\x80]/sm,# KNOWN_V,UNKNOWN_V,V._MODIF | ||||
# qr/\A.{12}(?:infected with )?([^\x00]+)\x00/sm, | # qr/\A.{12}(?:infected with )?([^\x00]+)\x00/sm, | ||||
# ], | # ], | ||||
# # NOTE: If using amavis-milter, change length to: | # # NOTE: If using amavis-milter, change length to: | ||||
# # length("\$TEMPBASE/amavis-milter-xxxxxxxxxxxxxx/parts/pxxx"). | # # length("$TEMPBASE/amavis-milter-xxxxxxxxxxxxxx/parts/pxxx"). | ||||
\#\## http://www.kaspersky.com/ (kav4mailservers) | ### http://www.kaspersky.com/ (kav4mailservers) | ||||
['KasperskyLab AVP - aveclient', | ['KasperskyLab AVP - aveclient', | ||||
['/usr/local/kav/bin/aveclient','/usr/local/share/kav/bin/aveclient', | ['/usr/local/kav/bin/aveclient','/usr/local/share/kav/bin/aveclient', | ||||
'/opt/kav/5.5/kav4mailservers/bin/aveclient','aveclient'], | '/opt/kav/5.5/kav4mailservers/bin/aveclient','aveclient'], | ||||
'-p /var/run/aveserver -s {}/*', | '-p /var/run/aveserver -s {}/*', | ||||
[0,3,6,8], qr/\b(INFECTED|SUSPICION|SUSPICIOUS)\b/m, | [0,3,6,8], qr/\b(INFECTED|SUSPICION|SUSPICIOUS)\b/m, | ||||
qr/(?:INFECTED|WARNING|SUSPICION|SUSPICIOUS) (.+)/m, | qr/(?:INFECTED|WARNING|SUSPICION|SUSPICIOUS) (.+)/m, | ||||
], | ], | ||||
# NOTE: one may prefer [0],[2,3,4,5], depending on how suspicious, | # NOTE: one may prefer [0],[2,3,4,5], depending on how suspicious, | ||||
# currupted or protected archives are to be handled | # currupted or protected archives are to be handled | ||||
\#\## http://www.kaspersky.com/ | ### http://www.kaspersky.com/ | ||||
['KasperskyLab AntiViral Toolkit Pro (AVP)', ['avp'], | ['KasperskyLab AntiViral Toolkit Pro (AVP)', ['avp'], | ||||
'-* -P -B -Y -O- {}', [0,3,6,8], [2,4], # any use for -A -K ? | '-* -P -B -Y -O- {}', [0,3,6,8], [2,4], # any use for -A -K ? | ||||
qr/infected: (.+)/m, | qr/infected: (.+)/m, | ||||
sub {chdir('/opt/AVP') or die "Can't chdir to AVP: \$!"}, | sub {chdir('/opt/AVP') or die "Can't chdir to AVP: $!"}, | ||||
sub {chdir(\$TEMPBASE) or die "Can't chdir back to \$TEMPBASE \$!"}, | sub {chdir($TEMPBASE) or die "Can't chdir back to $TEMPBASE $!"}, | ||||
], | ], | ||||
\#\## The kavdaemon and AVPDaemonClient have been removed from Kasperky | ### The kavdaemon and AVPDaemonClient have been removed from Kasperky | ||||
\#\## products and replaced by aveserver and aveclient | ### products and replaced by aveserver and aveclient | ||||
['KasperskyLab AVPDaemonClient', | ['KasperskyLab AVPDaemonClient', | ||||
[ '/opt/AVP/kavdaemon', 'kavdaemon', | [ '/opt/AVP/kavdaemon', 'kavdaemon', | ||||
'/opt/AVP/AvpDaemonClient', 'AvpDaemonClient', | '/opt/AVP/AvpDaemonClient', 'AvpDaemonClient', | ||||
'/opt/AVP/AvpTeamDream', 'AvpTeamDream', | '/opt/AVP/AvpTeamDream', 'AvpTeamDream', | ||||
'/opt/AVP/avpdc', 'avpdc' ], | '/opt/AVP/avpdc', 'avpdc' ], | ||||
"-f=\$TEMPBASE {}", [0,8], [3,4,5,6], qr/infected: ([^\r\n]+)/m ], | "-f=$TEMPBASE {}", [0,8], [3,4,5,6], qr/infected: ([^\r\n]+)/m ], | ||||
# change the startup-script in /etc/init.d/kavd to: | # change the startup-script in /etc/init.d/kavd to: | ||||
# DPARMS="-* -Y -dl -f=/var/amavis /var/amavis" | # DPARMS="-* -Y -dl -f=/var/amavis /var/amavis" | ||||
# (or perhaps: DPARMS="-I0 -Y -* /var/amavis" ) | # (or perhaps: DPARMS="-I0 -Y -* /var/amavis" ) | ||||
# adjusting /var/amavis above to match your \$TEMPBASE. | # adjusting /var/amavis above to match your $TEMPBASE. | ||||
# The '-f=/var/amavis' is needed if not running it as root, so it | # 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'. | # can find, read, and write its pid file, etc., see 'man kavdaemon'. | ||||
# defUnix.prf: there must be an entry "*/var/amavis" (or whatever | # defUnix.prf: there must be an entry "*/var/amavis" (or whatever | ||||
# directory \$TEMPBASE specifies) in the 'Names=' section. | # directory $TEMPBASE specifies) in the 'Names=' section. | ||||
# cd /opt/AVP/DaemonClients; configure; cd Sample; make | # cd /opt/AVP/DaemonClients; configure; cd Sample; make | ||||
# cp AvpDaemonClient /opt/AVP/ | # cp AvpDaemonClient /opt/AVP/ | ||||
# su - vscan -c "\${PREFIX}/kavdaemon \${DPARMS}" | # su - vscan -c "${PREFIX}/kavdaemon ${DPARMS}" | ||||
\#\## http://www.centralcommand.com/ | ### http://www.centralcommand.com/ | ||||
['CentralCommand Vexira (new) vascan', | ['CentralCommand Vexira (new) vascan', | ||||
['vascan','/usr/lib/Vexira/vascan'], | ['vascan','/usr/lib/Vexira/vascan'], | ||||
"-a s --timeout=60 --temp=\$TEMPBASE -y \$QUARANTINEDIR ". | "-a s --timeout=60 --temp=$TEMPBASE -y $QUARANTINEDIR ". | ||||
"--log=/var/log/vascan.log {}", | "--log=/var/log/vascan.log {}", | ||||
[0,3], [1,2,5], | [0,3], [1,2,5], | ||||
qr/(?x)^\s* (?:virus|iworm|macro|mutant|sequence|trojan)\ found:\ ( [^\]\s']+ )\ \.\.\.\ /m ], | qr/(?x)^\s* (?:virus|iworm|macro|mutant|sequence|trojan)\ found:\ ( [^\]\s']+ )\ \.\.\.\ /m ], | ||||
# Adjust the path of the binary and the virus database as needed. | # 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 | # '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. | # the quarantine directory, and the quarantine option can not be disabled. | ||||
# If \$QUARANTINEDIR is not used, then another directory must be specified | # If $QUARANTINEDIR is not used, then another directory must be specified | ||||
# to appease 'vascan'. Move status 3 to the second list if password | # to appease 'vascan'. Move status 3 to the second list if password | ||||
# protected files are to be considered infected. | # protected files are to be considered infected. | ||||
\#\## http://www.avira.com/ | ### http://www.avira.com/ | ||||
\#\## Avira AntiVir (formerly H+BEDV) or (old) CentralCommand Vexira Antivirus | ### Avira AntiVir (formerly H+BEDV) or (old) CentralCommand Vexira Antivirus | ||||
['Avira AntiVir', ['antivir','vexira'], | ['Avira AntiVir', ['antivir','vexira'], | ||||
'--allfiles -noboot -nombr -rs -s -z {}', [0], qr/ALERT:|VIRUS:/m, | '--allfiles -noboot -nombr -rs -s -z {}', [0], qr/ALERT:|VIRUS:/m, | ||||
qr/(?x)^\s* (?: ALERT: \s* (?: \[ | [^']* ' ) | | qr/(?x)^\s* (?: ALERT: \s* (?: \[ | [^']* ' ) | | ||||
(?i) VIRUS:\ .*?\ virus\ '?) ( [^\]\s']+ )/m ], | (?i) VIRUS:\ .*?\ virus\ '?) ( [^\]\s']+ )/m ], | ||||
# NOTE: if you only have a demo version, remove -z and add 214, as in: | # 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:/, | # '--allfiles -noboot -nombr -rs -s {}', [0,214], qr/ALERT:|VIRUS:/, | ||||
\#\## http://www.commandsoftware.com/ | ### http://www.commandsoftware.com/ | ||||
['Command AntiVirus for Linux', 'csav', | ['Command AntiVirus for Linux', 'csav', | ||||
'-all -archive -packed {}', [50], [51,52,53], | '-all -archive -packed {}', [50], [51,52,53], | ||||
qr/Infection: (.+)/m ], | qr/Infection: (.+)/m ], | ||||
\#\## http://www.symantec.com/ | ### http://www.symantec.com/ | ||||
['Symantec CarrierScan via Symantec CommandLineScanner', | ['Symantec CarrierScan via Symantec CommandLineScanner', | ||||
'cscmdline', '-a scan -i 1 -v -s 127.0.0.1:7777 {}', | 'cscmdline', '-a scan -i 1 -v -s 127.0.0.1:7777 {}', | ||||
qr/^Files Infected:\s+0\$/m, qr/^Infected\b/m, | qr/^Files Infected:\s+0$/m, qr/^Infected\b/m, | ||||
qr/^(?:Info|Virus Name):\s+(.+)/m ], | qr/^(?:Info|Virus Name):\s+(.+)/m ], | ||||
\#\## http://www.symantec.com/ | ### http://www.symantec.com/ | ||||
['Symantec AntiVirus Scan Engine', | ['Symantec AntiVirus Scan Engine', | ||||
'savsecls', '-server 127.0.0.1:7777 -mode scanrepair -details -verbose {}', | 'savsecls', '-server 127.0.0.1:7777 -mode scanrepair -details -verbose {}', | ||||
[0], qr/^Infected\b/m, | [0], qr/^Infected\b/m, | ||||
qr/^(?:Info|Virus Name):\s+(.+)/m ], | qr/^(?:Info|Virus Name):\s+(.+)/m ], | ||||
# NOTE: check options and patterns to see which entry better applies | # NOTE: check options and patterns to see which entry better applies | ||||
# \#\## http://www.f-secure.com/products/anti-virus/ version 4.65 | # ### http://www.f-secure.com/products/anti-virus/ version 4.65 | ||||
# ['F-Secure Antivirus for Linux servers', | # ['F-Secure Antivirus for Linux servers', | ||||
# ['/opt/f-secure/fsav/bin/fsav', 'fsav'], | # ['/opt/f-secure/fsav/bin/fsav', 'fsav'], | ||||
# '--delete=no --disinf=no --rename=no --archive=yes --auto=yes '. | # '--delete=no --disinf=no --rename=no --archive=yes --auto=yes '. | ||||
# '--dumb=yes --list=no --mime=yes {}', [0], [3,6,8], | # '--dumb=yes --list=no --mime=yes {}', [0], [3,6,8], | ||||
# qr/(?:infection|Infected|Suspected): (.+)/m ], | # qr/(?:infection|Infected|Suspected): (.+)/m ], | ||||
\#\## http://www.f-secure.com/products/anti-virus/ version 5.52 | ### http://www.f-secure.com/products/anti-virus/ version 5.52 | ||||
['F-Secure Antivirus for Linux servers', | ['F-Secure Antivirus for Linux servers', | ||||
['/opt/f-secure/fsav/bin/fsav', 'fsav'], | ['/opt/f-secure/fsav/bin/fsav', 'fsav'], | ||||
'--virus-action1=report --archive=yes --auto=yes '. | '--virus-action1=report --archive=yes --auto=yes '. | ||||
'--dumb=yes --list=no --mime=yes {}', [0], [3,4,6,8], | '--dumb=yes --list=no --mime=yes {}', [0], [3,4,6,8], | ||||
qr/(?:infection|Infected|Suspected|Riskware): (.+)/m ], | qr/(?:infection|Infected|Suspected|Riskware): (.+)/m ], | ||||
# NOTE: internal archive handling may be switched off by '--archive=no' | # NOTE: internal archive handling may be switched off by '--archive=no' | ||||
# to prevent fsav from exiting with status 9 on broken archives | # to prevent fsav from exiting with status 9 on broken archives | ||||
# \#\## http://www.avast.com/ | # ### http://www.avast.com/ | ||||
# ['avast! Antivirus daemon', | # ['avast! Antivirus daemon', | ||||
# \&ask_daemon, # greets with 220, terminate with QUIT | # \&ask_daemon, # greets with 220, terminate with QUIT | ||||
# ["SCAN {}\015\012QUIT\015\012", '/var/run/avast4/mailscanner.sock'], | # ["SCAN {}\015\012QUIT\015\012", '/var/run/avast4/mailscanner.sock'], | ||||
# qr/\t\[\+\]/m, qr/\t\[L\]\t/m, qr/\t\[L\]\t([^[ \t\015\012]+)/m ], | # qr/\t\[\+\]/m, qr/\t\[L\]\t/m, qr/\t\[L\]\t([^[ \t\015\012]+)/m ], | ||||
# \#\## http://www.avast.com/ | # ### http://www.avast.com/ | ||||
# ['avast! Antivirus - Client/Server Version', 'avastlite', | # ['avast! Antivirus - Client/Server Version', 'avastlite', | ||||
# '-a /var/run/avast4/mailscanner.sock -n {}', [0], [1], | # '-a /var/run/avast4/mailscanner.sock -n {}', [0], [1], | ||||
# qr/\t\[L\]\t([^[ \t\015\012]+)/m ], | # qr/\t\[L\]\t([^[ \t\015\012]+)/m ], | ||||
['CAI InoculateIT', 'inocucmd', # retired product | ['CAI InoculateIT', 'inocucmd', # retired product | ||||
'-sec -nex {}', [0], [100], | '-sec -nex {}', [0], [100], | ||||
qr/was infected by virus (.+)/m ], | qr/was infected by virus (.+)/m ], | ||||
# see: http://www.flatmtn.com/computer/Linux-Antivirus_CAI.html | # see: http://www.flatmtn.com/computer/Linux-Antivirus_CAI.html | ||||
\#\## http://www3.ca.com/Solutions/Product.asp?ID=156 (ex InoculateIT) | ### http://www3.ca.com/Solutions/Product.asp?ID=156 (ex InoculateIT) | ||||
['CAI eTrust Antivirus', 'etrust-wrapper', | ['CAI eTrust Antivirus', 'etrust-wrapper', | ||||
'-arc -nex -spm h {}', [0], [101], | '-arc -nex -spm h {}', [0], [101], | ||||
qr/is infected by virus: (.+)/m ], | qr/is infected by virus: (.+)/m ], | ||||
# NOTE: requires suid wrapper around inocmd32; consider flag: -mod reviewer | # NOTE: requires suid wrapper around inocmd32; consider flag: -mod reviewer | ||||
# see http://marc.theaimsgroup.com/?l=amavis-user&m=109229779912783 | # see http://marc.theaimsgroup.com/?l=amavis-user&m=109229779912783 | ||||
\#\## http://mks.com.pl/english.html | ### http://mks.com.pl/english.html | ||||
['MkS_Vir for Linux (beta)', ['mks32','mks'], | ['MkS_Vir for Linux (beta)', ['mks32','mks'], | ||||
'-s {}/*', [0], [1,2], | '-s {}/*', [0], [1,2], | ||||
qr/--[ \t]*(.+)/m ], | qr/--[ \t]*(.+)/m ], | ||||
\#\## http://mks.com.pl/english.html | ### http://mks.com.pl/english.html | ||||
['MkS_Vir daemon', 'mksscan', | ['MkS_Vir daemon', 'mksscan', | ||||
'-s -q {}', [0], [1..7], | '-s -q {}', [0], [1..7], | ||||
qr/^... (\S+)/m ], | qr/^... (\S+)/m ], | ||||
# \#\## http://www.nod32.com/, version v2.52 (old) | # ### http://www.nod32.com/, version v2.52 (old) | ||||
# ['ESET NOD32 for Linux Mail servers', | # ['ESET NOD32 for Linux Mail servers', | ||||
# ['/opt/eset/nod32/bin/nod32cli', 'nod32cli'], | # ['/opt/eset/nod32/bin/nod32cli', 'nod32cli'], | ||||
# '--subdir --files -z --sfx --rtp --adware --unsafe --pattern --heur '. | # '--subdir --files -z --sfx --rtp --adware --unsafe --pattern --heur '. | ||||
# '-w -a --action-on-infected=accept --action-on-uncleanable=accept '. | # '-w -a --action-on-infected=accept --action-on-uncleanable=accept '. | ||||
# '--action-on-notscanned=accept {}', | # '--action-on-notscanned=accept {}', | ||||
# [0,3], [1,2], qr/virus="([^"]+)"/m ], | # [0,3], [1,2], qr/virus="([^"]+)"/m ], | ||||
# \#\## http://www.eset.com/, version v2.7 (old) | # ### http://www.eset.com/, version v2.7 (old) | ||||
# ['ESET NOD32 Linux Mail Server - command line interface', | # ['ESET NOD32 Linux Mail Server - command line interface', | ||||
# ['/usr/bin/nod32cli', '/opt/eset/nod32/bin/nod32cli', 'nod32cli'], | # ['/usr/bin/nod32cli', '/opt/eset/nod32/bin/nod32cli', 'nod32cli'], | ||||
# '--subdir {}', [0,3], [1,2], qr/virus="([^"]+)"/m ], | # '--subdir {}', [0,3], [1,2], qr/virus="([^"]+)"/m ], | ||||
# \#\## http://www.eset.com/, version 2.71.12 | # ### http://www.eset.com/, version 2.71.12 | ||||
# ['ESET Software ESETS Command Line Interface', | # ['ESET Software ESETS Command Line Interface', | ||||
# ['/usr/bin/esets_cli', 'esets_cli'], | # ['/usr/bin/esets_cli', 'esets_cli'], | ||||
# '--subdir {}', [0], [1,2,3], qr/virus="([^"]+)"/m ], | # '--subdir {}', [0], [1,2,3], qr/virus="([^"]+)"/m ], | ||||
\#\## http://www.eset.com/, version 3.0 | ### http://www.eset.com/, version 3.0 | ||||
['ESET Software ESETS Command Line Interface', | ['ESET Software ESETS Command Line Interface', | ||||
['/usr/bin/esets_cli', 'esets_cli'], | ['/usr/bin/esets_cli', 'esets_cli'], | ||||
'--subdir {}', [0], [1,2,3], | '--subdir {}', [0], [1,2,3], | ||||
qr/:\s*action="(?!accepted)[^"]*"\n.*:\s*virus="([^"]*)"/m ], | qr/:\s*action="(?!accepted)[^"]*"\n.*:\s*virus="([^"]*)"/m ], | ||||
\#\# http://www.nod32.com/, NOD32LFS version 2.5 and above | ## http://www.nod32.com/, NOD32LFS version 2.5 and above | ||||
['ESET NOD32 for Linux File servers', | ['ESET NOD32 for Linux File servers', | ||||
['/opt/eset/nod32/sbin/nod32','nod32'], | ['/opt/eset/nod32/sbin/nod32','nod32'], | ||||
'--files -z --mail --sfx --rtp --adware --unsafe --pattern --heur '. | '--files -z --mail --sfx --rtp --adware --unsafe --pattern --heur '. | ||||
'-w -a --action=1 -b {}', | '-w -a --action=1 -b {}', | ||||
[0], [1,10], qr/^object=.*, virus="(.*?)",/m ], | [0], [1,10], qr/^object=.*, virus="(.*?)",/m ], | ||||
# Experimental, based on posting from Rado Dibarbora (Dibo) on 2002-05-31 | # Experimental, based on posting from Rado Dibarbora (Dibo) on 2002-05-31 | ||||
# ['ESET Software NOD32 Client/Server (NOD32SS)', | # ['ESET Software NOD32 Client/Server (NOD32SS)', | ||||
# \&ask_daemon2, # greets with 200, persistent, terminate with QUIT | # \&ask_daemon2, # greets with 200, persistent, terminate with QUIT | ||||
# ["SCAN {}/*\r\n", '127.0.0.1:8448' ], | # ["SCAN {}/*\r\n", '127.0.0.1:8448' ], | ||||
# qr/^200 File OK/m, qr/^201 /m, qr/^201 (.+)/m ], | # qr/^200 File OK/m, qr/^201 /m, qr/^201 (.+)/m ], | ||||
\#\## http://www.norman.com/products_nvc.shtml | ### http://www.norman.com/products_nvc.shtml | ||||
['Norman Virus Control v5 / Linux', 'nvcc', | ['Norman Virus Control v5 / Linux', 'nvcc', | ||||
'-c -l:0 -s -u -temp:\$TEMPBASE {}', [0,10,11], [1,2,14], | '-c -l:0 -s -u -temp:$TEMPBASE {}', [0,10,11], [1,2,14], | ||||
qr/(?i).* virus in .* -> \'(.+)\'/m ], | qr/(?i).* virus in .* -> \'(.+)\'/m ], | ||||
\#\## http://www.pandasoftware.com/ | ### http://www.pandasoftware.com/ | ||||
['Panda CommandLineSecure 9 for Linux', | ['Panda CommandLineSecure 9 for Linux', | ||||
['/opt/pavcl/usr/bin/pavcl','pavcl'], | ['/opt/pavcl/usr/bin/pavcl','pavcl'], | ||||
'-auto -aex -heu -cmp -nbr -nor -nos -eng -nob {}', | '-auto -aex -heu -cmp -nbr -nor -nos -eng -nob {}', | ||||
qr/Number of files infected[ .]*: 0+(?!\d)/m, | qr/Number of files infected[ .]*: 0+(?!\d)/m, | ||||
qr/Number of files infected[ .]*: 0*[1-9]/m, | qr/Number of files infected[ .]*: 0*[1-9]/m, | ||||
qr/Found virus :\s*(\S+)/m ], | qr/Found virus :\s*(\S+)/m ], | ||||
# NOTE: for efficiency, start the Panda in resident mode with 'pavcl -tsr' | # NOTE: for efficiency, start the Panda in resident mode with 'pavcl -tsr' | ||||
# before starting amavisd - the bases are then loaded only once at startup. | # before starting amavisd - the bases are then loaded only once at startup. | ||||
# To reload bases in a signature update script: | # To reload bases in a signature update script: | ||||
# /opt/pavcl/usr/bin/pavcl -tsr -ulr; /opt/pavcl/usr/bin/pavcl -tsr | # /opt/pavcl/usr/bin/pavcl -tsr -ulr; /opt/pavcl/usr/bin/pavcl -tsr | ||||
# Please review other options of pavcl, for example: | # Please review other options of pavcl, for example: | ||||
# -nomalw, -nojoke, -nodial, -nohackt, -nospyw, -nocookies | # -nomalw, -nojoke, -nodial, -nohackt, -nospyw, -nocookies | ||||
# \#\## http://www.pandasoftware.com/ | # ### http://www.pandasoftware.com/ | ||||
# ['Panda Antivirus for Linux', ['pavcl'], | # ['Panda Antivirus for Linux', ['pavcl'], | ||||
# '-TSR -aut -aex -heu -cmp -nbr -nor -nso -eng {}', | # '-TSR -aut -aex -heu -cmp -nbr -nor -nso -eng {}', | ||||
# [0], [0x10, 0x30, 0x50, 0x70, 0x90, 0xB0, 0xD0, 0xF0], | # [0], [0x10, 0x30, 0x50, 0x70, 0x90, 0xB0, 0xD0, 0xF0], | ||||
# qr/Found virus :\s*(\S+)/m ], | # qr/Found virus :\s*(\S+)/m ], | ||||
# GeCAD AV technology is acquired by Microsoft; RAV has been discontinued. | # GeCAD AV technology is acquired by Microsoft; RAV has been discontinued. | ||||
# Check your RAV license terms before fiddling with the following two lines! | # Check your RAV license terms before fiddling with the following two lines! | ||||
# ['GeCAD RAV AntiVirus 8', 'ravav', | # ['GeCAD RAV AntiVirus 8', 'ravav', | ||||
# '--all --archive --mail {}', [1], [2,3,4,5], qr/Infected: (.+)/m ], | # '--all --archive --mail {}', [1], [2,3,4,5], qr/Infected: (.+)/m ], | ||||
# # NOTE: the command line switches changed with scan engine 8.5 ! | # # NOTE: the command line switches changed with scan engine 8.5 ! | ||||
# # (btw, assigning stdin to /dev/null causes RAV to fail) | # # (btw, assigning stdin to /dev/null causes RAV to fail) | ||||
\#\## http://www.nai.com/ | ### http://www.nai.com/ | ||||
['NAI McAfee AntiVirus (uvscan)', 'uvscan', | ['NAI McAfee AntiVirus (uvscan)', 'uvscan', | ||||
'--secure -rv --mime --summary --noboot - {}', [0], [13], | '--secure -rv --mime --summary --noboot - {}', [0], [13], | ||||
qr/(?x) Found (?: | qr/(?x) Found (?: | ||||
\ the\ (.+)\ (?:virus|trojan) | | \ the\ (.+)\ (?:virus|trojan) | | ||||
\ (?:virus|trojan)\ or\ variant\ ([^ ]+) | | \ (?:virus|trojan)\ or\ variant\ ([^ ]+) | | ||||
:\ (.+)\ NOT\ a\ virus)/m, | :\ (.+)\ NOT\ a\ virus)/m, | ||||
# sub {\$ENV{LD_PRELOAD}='/lib/libc.so.6'}, | # sub {$ENV{LD_PRELOAD}='/lib/libc.so.6'}, | ||||
# sub {delete \$ENV{LD_PRELOAD}}, | # sub {delete $ENV{LD_PRELOAD}}, | ||||
], | ], | ||||
# NOTE1: with RH9: force the dynamic linker to look at /lib/libc.so.6 before | # 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 | # anything else by setting environment variable LD_PRELOAD=/lib/libc.so.6 | ||||
# and then clear it when finished to avoid confusing anything else. | # and then clear it when finished to avoid confusing anything else. | ||||
# NOTE2: to treat encrypted files as viruses replace the [13] with: | # NOTE2: to treat encrypted files as viruses replace the [13] with: | ||||
# qr/^\s{5,}(Found|is password-protected|.*(virus|trojan))/ | # qr/^\s{5,}(Found|is password-protected|.*(virus|trojan))/ | ||||
\#\## http://www.virusbuster.hu/en/ | ### http://www.virusbuster.hu/en/ | ||||
['VirusBuster', ['vbuster', 'vbengcl'], | ['VirusBuster', ['vbuster', 'vbengcl'], | ||||
"{} -ss -i '*' -log=\$MYHOME/vbuster.log", [0], [1], | "{} -ss -i '*' -log=$MYHOME/vbuster.log", [0], [1], | ||||
qr/: '(.*)' - Virus/m ], | qr/: '(.*)' - Virus/m ], | ||||
# VirusBuster Ltd. does not support the daemon version for the workstation | # 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 | # 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). | # binaries, some parameters AND return codes have changed (from 3 to 1). | ||||
# See also the new Vexira entry 'vascan' which is possibly related. | # See also the new Vexira entry 'vascan' which is possibly related. | ||||
# \#\## http://www.virusbuster.hu/en/ | # ### http://www.virusbuster.hu/en/ | ||||
# ['VirusBuster (Client + Daemon)', 'vbengd', | # ['VirusBuster (Client + Daemon)', 'vbengd', | ||||
# '-f -log scandir {}', [0], [3], | # '-f -log scandir {}', [0], [3], | ||||
# qr/Virus found = (.*);/m ], | # qr/Virus found = (.*);/m ], | ||||
# # HINT: for an infected file it always returns 3, | # # HINT: for an infected file it always returns 3, | ||||
# # although the man-page tells a different story | # # although the man-page tells a different story | ||||
\#\## http://www.cyber.com/ | ### http://www.cyber.com/ | ||||
['CyberSoft VFind', 'vfind', | ['CyberSoft VFind', 'vfind', | ||||
'--vexit {}/*', [0], [23], qr/\#\#==>>>> VIRUS ID: CVDL (.+)/m, | '--vexit {}/*', [0], [23], qr/##==>>>> VIRUS ID: CVDL (.+)/m, | ||||
# sub {\$ENV{VSTK_HOME}='/usr/lib/vstk'}, | # sub {$ENV{VSTK_HOME}='/usr/lib/vstk'}, | ||||
], | ], | ||||
\#\## http://www.avast.com/ | ### http://www.avast.com/ | ||||
['avast! Antivirus', ['/usr/bin/avastcmd','avastcmd'], | ['avast! Antivirus', ['/usr/bin/avastcmd','avastcmd'], | ||||
'-a -i -n -t=A {}', [0], [1], qr/\binfected by:\s+([^ \t\n\[\]]+)/m ], | '-a -i -n -t=A {}', [0], [1], qr/\binfected by:\s+([^ \t\n\[\]]+)/m ], | ||||
\#\## http://www.ikarus-software.com/ | ### http://www.ikarus-software.com/ | ||||
['Ikarus AntiVirus for Linux', 'ikarus', | ['Ikarus AntiVirus for Linux', 'ikarus', | ||||
'{}', [0], [40], qr/Signature (.+) found/m ], | '{}', [0], [40], qr/Signature (.+) found/m ], | ||||
\#\## http://www.bitdefender.com/ | ### http://www.bitdefender.com/ | ||||
['BitDefender', 'bdscan', # new version | ['BitDefender', 'bdscan', # new version | ||||
'--action=ignore --no-list {}', qr/^Infected files\s*:\s*0+(?!\d)/m, | '--action=ignore --no-list {}', qr/^Infected files\s*:\s*0+(?!\d)/m, | ||||
qr/^(?:Infected files|Identified viruses|Suspect files)\s*:\s*0*[1-9]/m, | qr/^(?:Infected files|Identified viruses|Suspect files)\s*:\s*0*[1-9]/m, | ||||
qr/(?:suspected|infected)\s*:\s*(.*)(?:\033|\$)/m ], | qr/(?:suspected|infected)\s*:\s*(.*)(?:\033|$)/m ], | ||||
\#\## http://www.bitdefender.com/ | ### http://www.bitdefender.com/ | ||||
['BitDefender', 'bdc', # old version | ['BitDefender', 'bdc', # old version | ||||
'--arc --mail {}', qr/^Infected files *:0+(?!\d)/m, | '--arc --mail {}', qr/^Infected files *:0+(?!\d)/m, | ||||
qr/^(?:Infected files|Identified viruses|Suspect files) *:0*[1-9]/m, | qr/^(?:Infected files|Identified viruses|Suspect files) *:0*[1-9]/m, | ||||
qr/(?:suspected|infected): (.*)(?:\033|\$)/m ], | qr/(?:suspected|infected): (.*)(?:\033|$)/m ], | ||||
# consider also: --all --nowarn --alev=15 --flev=15. The --all argument may | # 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' | # not apply to your version of bdc, check documentation and see 'bdc --help' | ||||
\#\## ArcaVir for Linux and Unix http://www.arcabit.pl/ | ### ArcaVir for Linux and Unix http://www.arcabit.pl/ | ||||
['ArcaVir for Linux', ['arcacmd','arcacmd.static'], | ['ArcaVir for Linux', ['arcacmd','arcacmd.static'], | ||||
'-v 1 -summary 0 -s {}', [0], [1,2], | '-v 1 -summary 0 -s {}', [0], [1,2], | ||||
qr/(?:VIR|WIR):[ \t]*(.+)/m ], | qr/(?:VIR|WIR):[ \t]*(.+)/m ], | ||||
# \#\## a generic SMTP-client interface to a SMTP-based virus scanner | # ### a generic SMTP-client interface to a SMTP-based virus scanner | ||||
# ['av_smtp', \&ask_av_smtp, | # ['av_smtp', \&ask_av_smtp, | ||||
# ['{}', 'smtp:[127.0.0.1]:5525', 'dummy@localhost'], | # ['{}', 'smtp:[127.0.0.1]:5525', 'dummy@localhost'], | ||||
# qr/^2/, qr/^5/, qr/^\s*(.*?)\s*\$/m ], | # qr/^2/, qr/^5/, qr/^\s*(.*?)\s*$/m ], | ||||
# ['File::Scan', sub {Amavis::AV::ask_av(sub{ | # ['File::Scan', sub {Amavis::AV::ask_av(sub{ | ||||
# use File::Scan; my(\$fn)=@_; | # use File::Scan; my($fn)=@_; | ||||
# my(\$f)=File::Scan->new(max_txt_size=>0, max_bin_size=>0); | # my($f)=File::Scan->new(max_txt_size=>0, max_bin_size=>0); | ||||
# my(\$vname) = \$f->scan(\$fn); | # my($vname) = $f->scan($fn); | ||||
# \$f->error ? (2,"Error: ".\$f->error) | # $f->error ? (2,"Error: ".$f->error) | ||||
# : (\$vname ne '') ? (1,"\$vname FOUND") : (0,"Clean")}, @_) }, | # : ($vname ne '') ? (1,"$vname FOUND") : (0,"Clean")}, @_) }, | ||||
# ["{}/*"], [0], [1], qr/^(.*) FOUND\$/m ], | # ["{}/*"], [0], [1], qr/^(.*) FOUND$/m ], | ||||
# \#\## fully-fledged checker for JPEG marker segments of invalid length | # ### fully-fledged checker for JPEG marker segments of invalid length | ||||
# ['check-jpeg', | # ['check-jpeg', | ||||
# sub { use JpegTester (); Amavis::AV::ask_av(\&JpegTester::test_jpeg, @_) }, | # sub { use JpegTester (); Amavis::AV::ask_av(\&JpegTester::test_jpeg, @_) }, | ||||
# ["{}/*"], undef, [1], qr/^(bad jpeg: .*)\$/m ], | # ["{}/*"], undef, [1], qr/^(bad jpeg: .*)$/m ], | ||||
# # NOTE: place file JpegTester.pm somewhere where Perl can find it, | # # NOTE: place file JpegTester.pm somewhere where Perl can find it, | ||||
# # for example in /usr/local/lib/perl5/site_perl | # # for example in /usr/local/lib/perl5/site_perl | ||||
); | ); | ||||
@av_scanners_backup = ( | @av_scanners_backup = ( | ||||
\#\## http://www.clamav.net/ - backs up clamd or Mail::ClamAV | ### http://www.clamav.net/ - backs up clamd or Mail::ClamAV | ||||
['ClamAV-clamscan', 'clamscan', | ['ClamAV-clamscan', 'clamscan', | ||||
"--stdout --no-summary -r --tempdir=\$TEMPBASE {}", | "--stdout --no-summary -r --tempdir=$TEMPBASE {}", | ||||
[0], qr/:.*\sFOUND\$/m, qr/^.*?: (?!Infected Archive)(.*) FOUND\$/m ], | [0], qr/:.*\sFOUND$/m, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], | ||||
\#\## http://www.f-prot.com/ - backs up F-Prot Daemon, V6 | ### http://www.f-prot.com/ - backs up F-Prot Daemon, V6 | ||||
['F-PROT Antivirus for UNIX', ['fpscan'], | ['F-PROT Antivirus for UNIX', ['fpscan'], | ||||
'--report --mount --adware {}', # consider: --applications -s 4 -u 3 -z 10 | '--report --mount --adware {}', # consider: --applications -s 4 -u 3 -z 10 | ||||
[0,8,64], [1,2,3, 4+1,4+2,4+3, 8+1,8+2,8+3, 12+1,12+2,12+3], | [0,8,64], [1,2,3, 4+1,4+2,4+3, 8+1,8+2,8+3, 12+1,12+2,12+3], | ||||
qr/^\[Found\s+[^\]]*\]\s+<([^ \t(>]*)/m ], | qr/^\[Found\s+[^\]]*\]\s+<([^ \t(>]*)/m ], | ||||
\#\## http://www.f-prot.com/ - backs up F-Prot Daemon (old) | ### http://www.f-prot.com/ - backs up F-Prot Daemon (old) | ||||
['FRISK F-Prot Antivirus', ['f-prot','f-prot.sh'], | ['FRISK F-Prot Antivirus', ['f-prot','f-prot.sh'], | ||||
'-dumb -archive -packed {}', [0,8], [3,6], # or: [0], [3,6,8], | '-dumb -archive -packed {}', [0,8], [3,6], # or: [0], [3,6,8], | ||||
qr/(?:Infection:|security risk named) (.+)|\s+contains\s+(.+)\$/m ], | qr/(?:Infection:|security risk named) (.+)|\s+contains\s+(.+)$/m ], | ||||
\#\## http://www.trendmicro.com/ - backs up Trophie | ### http://www.trendmicro.com/ - backs up Trophie | ||||
['Trend Micro FileScanner', ['/etc/iscan/vscan','vscan'], | ['Trend Micro FileScanner', ['/etc/iscan/vscan','vscan'], | ||||
'-za -a {}', [0], qr/Found virus/m, qr/Found virus (.+) in/m ], | '-za -a {}', [0], qr/Found virus/m, qr/Found virus (.+) in/m ], | ||||
\#\## http://www.sald.com/, http://drweb.imshop.de/ - backs up DrWebD | ### http://www.sald.com/, http://drweb.imshop.de/ - backs up DrWebD | ||||
['drweb - DrWeb Antivirus', # security LHA hole in Dr.Web 4.33 and earlier | ['drweb - DrWeb Antivirus', # security LHA hole in Dr.Web 4.33 and earlier | ||||
['/usr/local/drweb/drweb', '/opt/drweb/drweb', 'drweb'], | ['/usr/local/drweb/drweb', '/opt/drweb/drweb', 'drweb'], | ||||
'-path={} -al -go -ot -cn -upn -ok-', | '-path={} -al -go -ot -cn -upn -ok-', | ||||
[0,32], [1,9,33], qr' infected (?:with|by)(?: virus)? (.*)\$'m ], | [0,32], [1,9,33], qr' infected (?:with|by)(?: virus)? (.*)$'m ], | ||||
\#\## http://www.kaspersky.com/ | ### http://www.kaspersky.com/ | ||||
['Kaspersky Antivirus v5.5', | ['Kaspersky Antivirus v5.5', | ||||
['/opt/kaspersky/kav4fs/bin/kav4fs-kavscanner', | ['/opt/kaspersky/kav4fs/bin/kav4fs-kavscanner', | ||||
'/opt/kav/5.5/kav4unix/bin/kavscanner', | '/opt/kav/5.5/kav4unix/bin/kavscanner', | ||||
'/opt/kav/5.5/kav4mailservers/bin/kavscanner', 'kavscanner'], | '/opt/kav/5.5/kav4mailservers/bin/kavscanner', 'kavscanner'], | ||||
'-i0 -xn -xp -mn -R -ePASBME {}/*', [0,10,15], [5,20,21,25], | '-i0 -xn -xp -mn -R -ePASBME {}/*', [0,10,15], [5,20,21,25], | ||||
qr/(?:INFECTED|WARNING|SUSPICION|SUSPICIOUS) (.*)/m, | qr/(?:INFECTED|WARNING|SUSPICION|SUSPICIOUS) (.*)/m, | ||||
# sub {chdir('/opt/kav/bin') or die "Can't chdir to kav: \$!"}, | # sub {chdir('/opt/kav/bin') or die "Can't chdir to kav: $!"}, | ||||
# sub {chdir(\$TEMPBASE) or die "Can't chdir back to \$TEMPBASE \$!"}, | # sub {chdir($TEMPBASE) or die "Can't chdir back to $TEMPBASE $!"}, | ||||
], | ], | ||||
# Commented out because the name 'sweep' clashes with Debian and FreeBSD | # Commented out because the name 'sweep' clashes with Debian and FreeBSD | ||||
# package/port of an audio editor. Make sure the correct 'sweep' is found | # package/port of an audio editor. Make sure the correct 'sweep' is found | ||||
# in the path when enabling. | # in the path when enabling. | ||||
# | # | ||||
# \#\## http://www.sophos.com/ - backs up Sophie or SAVI-Perl | # ### http://www.sophos.com/ - backs up Sophie or SAVI-Perl | ||||
# ['Sophos Anti Virus (sweep)', 'sweep', | # ['Sophos Anti Virus (sweep)', 'sweep', | ||||
# '-nb -f -all -rec -ss -sc -archive -cab -mime -oe -tnef '. | # '-nb -f -all -rec -ss -sc -archive -cab -mime -oe -tnef '. | ||||
# '--no-reset-atime {}', | # '--no-reset-atime {}', | ||||
# [0,2], qr/Virus .*? found/m, | # [0,2], qr/Virus .*? found/m, | ||||
# qr/^>>> Virus(?: fragment)? '?(.*?)'? found/m, | # qr/^>>> Virus(?: fragment)? '?(.*?)'? found/m, | ||||
# ], | # ], | ||||
# # other options to consider: -idedir=/usr/local/sav | # # other options to consider: -idedir=/usr/local/sav | ||||
Show All 9 Lines |