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*