AmavisdConfig

Материал из OpenWiki
Перейти к: навигация, поиск

Amavisd-new

amavisd.conf

# Для запрещения проверки на вирусы или спам расскомментируйте нужную строку.
# @bypass_virus_checks_maps = (1);  # uncomment to DISABLE anti-virus code
# @bypass_spam_checks_maps  = (1);  # uncomment to DISABLE anti-spam code

# Число процессов висящих в памяти и обрабатывающих запросы.
$max_servers = 15;            # number of pre-forked children (2..15 is common)

# После обработки скольки запросов перезапускать дочерний процесс.
$max_requests = 20;           # retire a child after that many accepts

# Таймаут за который запрос должен успеть быть обработанным.
$child_timeout = 5*60;

# Пользователь и группа под которой будет выполняться amavisd.
$daemon_user  = 'vscan';      # (no default;  customary: vscan or amavis)
$daemon_group = 'vscan';      # (no default;  customary: vscan or amavis)

#--------------------------------

# Домен по умолчанию.
$mydomain = 'test-domain.ru';   # a convenient default for other settings

# Имя текущего хоста.
$myhostname = 'relay.test-domain.ru';  # must be a fully-qualified domain name!

#--------------------------------

# Путь к корневой директории chroot-окружения или рабочей директории amavisd.
# Все параметры приведены для запуска внутри chroot.
$MYHOME   = '/usr/local/amavis'; # a convenient default for other settings
$TEMPBASE = "$MYHOME/tmp";   # working directory, needs to be created manually
$ENV{TMPDIR} = $TEMPBASE;    # environment variable TMPDIR
$daemon_chroot_dir = $MYHOME;   # chroot directory or undef
$db_home   = "$MYHOME/db";
$helpers_home = "$MYHOME/var/run/amavisd";  # prefer $MYHOME clean and owned by
root?
$pid_file  = "$MYHOME/var/run/amavisd/amavisd.pid";
$lock_file = "$MYHOME/var/run/amavisd/amavisd.lock";

# Если нужно сохранять отвергнутые письма в определенной директории.
# $QUARANTINEDIR = "$MYHOME/var/virusmails";

#--------------------------------

# Список обслуживаемых локальных доменов, для отделения локальных пересылок.
# @local_domains_maps = ( [[.$mydomain]] ); # .$mydomain - все поддомены домена $mydomain
# Так как доменов у меня много, считаем что для все пересылки можно считать
# локальными, разрешив при этом пометку писем со спамом. Реальные локальные
# пересылки определяем по IP адресам, и не доабвляем к ним спам метки.
# Если доменов несколько, лучше перечислить их.
@local_domains_maps = ( [[.]] );

# У меня доменов несколько сотен, поэтому локальные пересылки определяем по
# IP адресам. В master.cf в описании amavis транспорта обязатлельна строка
# "-o lmtp_send_xforward_command=yes"
@mynetworks = qw( 127.0.0.0/8 ::1 !192.168.0.0/16 !10.10.210.2);

# Уровень говорливости логов.
# 0: startup/exit/failure messages, viruses detected
# 1: args passed from client, some more interesting messages
# 2: virus scanner output, timing
# 3: server, client
# 4: decompose parts
# 5: more debug details
$log_level = 2;
# Логи ведем через syslog.
$DO_SYSLOG = 1;              # log via syslogd (preferred)
$SYSLOG_LEVEL = 'user.info';

# Разрешаем вставку указания пересылки через фильтр в Received: поле заголовка.
$insert_received_line = 1;  # behave like MTA: insert 'Received:' header

# Меняем текст служебного заголовка.
$X_HEADER_LINE = "antivirus-gw at $mydomain";

# Убираем использование модулей Amavis::DB, Amavis::DB::SNMP и
# диблирование информационных хэшей на диске. Не сможем смотреть online
# статистику, но работает так быстрее.
$enable_db = 0;              # enable use of BerkeleyDB/libdb (SNMP and nanny)
$enable_global_cache = 0;    # enable use of libdb-based cache if $enable_db=1

# На каком порту и IP принимаем запросы на проверку почты.
# У меня почтовый сервер и система проверки на разных хостах, в обычных
# ситуациях рекомендуется использовать только адрес 127.0.0.1.
$inet_socket_port = 10024;   # listen on this local TCP port(s) (see $protocol)
$inet_socket_bind = '10.10.11.4'; # IP локального хоста

# Кому разрешаем доступ к amavisd
@inet_acl = qw( 127.0.0.1 ::1 10.10.11.4 10.10.11.30);

# Куда переправляем проверенные письма и уведомления (10.10.11.30 - почтовый сервер).
#$notify_method  = 'smtp:[127.0.0.1]:10025';
$notify_method  = 'smtp:[10.10.11.30]:10025';
$forward_method = $notify_method;  # set to undef with milter!


# После первого обнаружения вируса, не тратим ресурсы на проверку других вложений
$first_infected_stops_scan = 1;

# Защита от DoS атак, ограничения уровня вложенности, числа файлов и размера архивов.
$MAXLEVELS = 10;
$MAXFILES = 500;
$MIN_EXPANSION_QUOTA =      100*1024;  # bytes  (default undef, not enforced)
$MAX_EXPANSION_QUOTA = 300*1024*1024;  # bytes  (default undef, not enforced)


# При обнаружении писем с вирусами, отправляем уведомление отправителю.
# Только для вирусов не использующих поддельные адреса (см. правила ниже).
# Для того чтобы молча убивать письма с вирусами, вместо D_BOUNCE напишите D_DISCARD.
$final_virus_destiny      = D_BOUNCE;

# При блокировании средствами amavisd высылаем уведомление отправителю.
$final_banned_destiny     = D_BOUNCE;

# Пропускаем письма со спамом (пометив их) и некорректно сформированные письма.
$final_spam_destiny       = D_PASS;
$final_bad_header_destiny = D_PASS;

#--------------------------------

# Вес для пометки SpamAssassin'ом писем как спам.
$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 5.0; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 5.0; # triggers spam evasive actions

# Не проверяем на спам если письмо больше 100 Кб, чтобы не тратить зря ресурсы сервера.
$sa_mail_body_size_limit = 100*1024; # don't waste time on SA if mail is larger

# Разрешаем SpamAssassin'у проводить тесты с использованием сети.

$sa_local_tests_only = 0;    # only tests which do not require internet access?

# Автоматическое формирование белого списка.
$sa_auto_whitelist = 1;      # turn on AWL in SA 2.63 or older (irrelevant
                             # for SA 3.0, cf option is 'use_auto_whitelist')

# Добавляем в Subject метку для писем со спамом.
$sa_spam_subject_tag = '***SPAM*** ';

#--------------------------------

# Не разрешаем помещение блока с вирусом в тело уведомления.
$defang_virus  = 0;  # MIME-wrap passed infected mail
$defang_banned = 1;  # MIME-wrap passed mail containing banned name

# От каких адресов отправлять уведомления.
$mailfrom_notify_admin     = "abuse\@$mydomain";  # notifications sender
$mailfrom_notify_recip     = "abuse\@$mydomain";  # notifications sender
$mailfrom_notify_spamadmin = "abuse\@$mydomain"; # notifications sender
$mailfrom_to_quarantine = undef; # null return path; uses original sender if undef
$spam_quarantine_to = undef;

# Кодировка которую нужно указывать в письмах-уведомлениях.
$hdr_encoding = 'koi8-r';
$bdy_encoding = 'koi8-r';
$hdr_encoding_qb = 'Q';

# Пути к темплейтам уведомлений.
$notify_sender_templ      = read_text("$MYHOME/etc/notify/notify_sender.txt", 'koi8-r');
$notify_virus_sender_templ= read_text("$MYHOME/etc/notify/notify_virus_sender.txt", 'koi8-r');
# $notify_virus_admin_templ = read_text("$MYHOME/etc/notify/notify_virus_admin.txt", 'koi8-r');
$notify_virus_recips_templ= read_text("$MYHOME/etc/notify/notify_virus_recips.txt", 'koi8-r');
# $notify_spam_sender_templ = read_text("$MYHOME/etc/notify/notify_spam_sender.txt", 'koi8-r');
# $notify_spam_admin_templ  = read_text("$MYHOME/etc/notify/notify_spam_admin.txt", 'koi8-r');


#--------------------------------

# Пути.
$file   = 'file';   # file(1) utility; use recent versions
$gzip   = 'gzip';
$bzip2  = 'bzip2';
$lzop   = 'lzop';
# $rpm2cpio   = ['rpm2cpio.pl','rpm2cpio'];
$cabextract = 'cabextract';
$uncompress = ['uncompress', 'gzip -d', 'zcat'];
$unfreeze   = ['unfreeze', 'freeze -d', 'melt', 'fcat'];
$arc        = ['nomarch', 'arc'];
$unarj      = ['arj', 'unarj'];
$unrar      = ['rar', 'unrar'];
$zoo    = 'zoo';
$lha    = 'lha';
$cpio   = ['gcpio','cpio'];
$ar     = 'ar';
# $dspam  = 'dspam';

#--------------------------------


# Список масок вирусов, которые подставляют нереальные адерса в поле отправителя.

@viruses_that_fake_sender_maps = (new_RE(
  qr'nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar'i,
  qr'tanatos|lentin|bridex|mimail|trojan\.dropper|dumaru|parite|spaces'i,
  qr'dloader|galil|gibe|swen|netwatch|bics|sbrowse|sober|rox|val(hal)?la'i,
  qr'frethem|sircam|be?agle|tanx|mydoom|novarg|shimg|netsky|somefool|moodown'i,
  qr'@mm|@MM',    # mass mailing viruses as labeled by f-prot and uvscan
  qr'Worm'i,      # worms as labeled by ClamAV, Kaspersky, etc
  [qr'^(EICAR|Joke\.|Junk\.)'i         => 0],
  [qr'^(WM97|OF97|W95/CIH-|JS/Fort)'i  => 0],
  [qr/.*/ => 1],  # true by default  (remove or comment-out if undesired)
));


# По каким маскам, проверяем антивирусом не только распакованный вариант, но
# но и оригинальную версию до распаковки.
@keep_decoded_original_maps = (new_RE(
  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
));

# Отвергаем прием писем с исполняемыми файлами во вложении

$banned_filename_re = new_RE(


  # block certain double extensions anywhere in the base name
  qr'\.[^./]*\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)\.?$'i,


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



  [ qr'^\.(Z|gz|bz2)$'           => 0 ],  # allow any type in Unix-compressed
  [ qr'^\.(rpm|cpio|tar)$'       => 0 ],  # allow any type in Unix archives
  [ qr'^\.(zip|rar|arc|arj|zoo|lha)$'=> 0 ],  # allow any type within such archives

  qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl)$'i, # banned extension - basic




# qr'^\.(exe-ms)$',                       # banned file(1) types

);

#--------------------------------

# Описание взаимодейсвия с антивирусным ПО.

# Основной сканер. Используем обращение к демону clamd
@av_scanners = (
# ### http://www.clamav.net/
 ['ClamAV-clamd',
   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
   qr/\bOK$/, qr/\bFOUND$/,
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# # NOTE: run clamd under the same user as amavisd;  match the socket
# # name (LocalSocket) in clamav.conf to the socket name in this entry
# # When running chrooted one may prefer: ["CONTSCAN {}\n","$MYHOME/clamd"],
);

# Запасные сканеры, если clamd окажется недоступным.
@av_scanners_backup = (
  # Вызов утититы clamscan. Пропишите путь к базе через опцию "-d".
  ### http://www.clamav.net/   - backs up clamd or Mail::ClamAV
  ['ClamAV-clamscan', 'clamscan',
    "--stdout -d /db_clamav --disable-summary -r --tempdir=$TEMPBASE {}", [0], [1],
    qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

  # Если проверить на вирусы не удалось, пропускаем непроверенное письмо.
  # always succeeds (uncomment to consider mail clean if all other scanners fail)
  ['always-clean', sub {0}],

);

# Подменяем некоторые настройки для отправителей из локальной сети.
# Для локальных пользователей запрещаем проверку на спам и блокирование
# средствами amavisd.
$policy_bank{'MYNETS'} = {  # mail originating from @mynetworks
#   spam_admin_maps => [[spamalert\@$mydomain]],  # alert of internal spam
   bypass_spam_checks_maps   => [1],  # or: don't spam-check internal mail
   bypass_banned_checks_maps => [1],  # don't banned-check internal mail
};

# Пользователи которые хотят получать спам как есть, без пометки.

@spam_lovers_maps = (
 ['test1@test-domain.ru', 'man@test-domain.ru', 'new-test-domain.ru'],
);
@spam_modifies_subj_maps = (
 [qw( !test1@test-domain.ru !man@test-domain.ru !new-test-domain.ru . )]
);

1;  # insure a defined return


Postfix

main.cf

content_filter=smtp-amavis:[10.10.11.4]:10024

master.cf

smtp-amavis unix -      -       y       -       15  lmtp
        -o lmtp_data_done_timeout=1200
        -o lmtp_send_xforward_command=yes
        -o disable_dns_lookups=yes

10.10.11.30:10025 inet n  -       y       -       -  smtpd 
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8,10.10.11.4
        -o strict_rfc821_envelopes=yes
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks

Проверка

Сигнатура для проверки блокирования спама

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Сигнатура для проверки на вирусы

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*