У меня были проблемы с исходящим спамом от скомпрометированных учетных записей электронной почты, отправляющих спам-письма с моего сервера и попадания в черные списки. Итак, я следовал инструкциям по настройке postfix с помощью amavis:
Кажется, все работает нормально, однако я бы хотел заблокировать исходящие спам-сообщения / сообщения о вирусах и уведомить отправителя, что его электронное письмо было отклонено (например, через MAILER-DAEMON). Есть ли возможность это сделать? Я только смог понять, как:
Aug 25 12:05:35 ns207813 amavis[24728]: (24728-01) Blocked SPAM {NoBounceOpenRelay,Quarantined}, <root@mail.org> -> <john@example.com>, quarantine: J/spam-Jfuzg0ScCmKf.gz, Message-ID: <GTUBE1.1010101@example.net>, mail_id: Jfuzg0ScCmKf, Hits: 1004.054, size: 935, 2013 ms
Aug 25 12:19:10 ns207813 amavis[25182]: (25182-01) Passed SPAM {RelayedTaggedInbound,Quarantined}, [217.230.20.223]:65071 [217.230.20.223] <removed@mail.me> -> <removed@mail.com>, quarantine: i/spam-iy3rVCiRk8k2.gz, Queue-ID: 5B9D722AAA, Message-ID: <74576B87-1986-4179-A262-B96640387C9E@mail.me>, mail_id: iy3rVCiRk8k2, Hits: 999.001, size: 2663, queued_as: DD67222ABE, 1379 ms
Мои текущие настройки amavis:
$sa_spam_subject_tag = '[SPAM] ';
$sa_tag_level_deflt = undef; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 5; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 20; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny = D_BOUNCE; # D_REJECT when front-end MTA
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS; # False-positive prone (for spam)
Я также хотел бы отмечать входящие вирусы как вирус, а не полностью отклонять почту, если это возможно (чтобы почта не терялась).
Спасибо за помощь!
То, что вы хотите сделать, требует обрабатывать письма от пользователей, использующих ваш сервер, как их MSA (то есть их исходящий ретранслятор) с другим политика чем те, которые получены от третьих сторон (т.е. когда ваш почтовый сервер действует в роли MX). К счастью, у amavis есть подходящий инструмент: Policy Banks.
Давайте посмотрим, как вы можете определить политику для своих пользователей:
$policy_bank{'PREQ-SUB'} = {
originating => 1, # indicates client is ours, allows signing
final_spam_destiny => D_DISCARD, # discard spam
final_virus_destiny => D_DISCARD, # discard spam
warnspamsender => 1, # send a warning
forward_method => 'smtp:127.0.0.1:10025', # you probably need to adjust this
smtpd_discard_ehlo_keywords => ['8BITMIME'], # force mail conversion to Q/P
smtpd_greeting_banner => '${helo-name} ${protocol} ${product} SUBMISSION service ready',
spam_admin_maps => ["postmaster\@example.net"], # warn of spam from us
virus_admin_maps => ["postmaster\@example.net"], # warn of viruses from us
};
Судя по названию этого банка политик, вы уже можете догадаться, что я запускаю его как фильтр предварительной очереди, который срабатывает, если почта доставляется через TCP-порт 587. Чтобы эта конфигурация работала, я сказал своему Postfix MTA: доставлять почту, полученную службой отправки, на localhost на порт 10028 (тогда как, действуя как общедоступный MX, сервер пересылает почту на порт 10024). Чтобы активировать два порта в amavis и привязать политику PREQ-SUB к порту 10028, я использую следующие настройки:
# policy bank definition
$inet_socket_port = [10024, 10028]; # listen on listed inet tcp ports
$interface_policy{'10028'} = 'PREQ-SUB'; # mail submitted using TLS on submission/smtps port
Соответствующая запись в master.cf для Postfix:
submission inet n - - - - smtpd -o smtpd_tls_security_level=encrypt
-o tls_preempt_cipherlist=$submission_tls_preempt_cipherlist
-o smtpd_tls_protocols=$submission_smtpd_tls_protocols
-o smtpd_tls_ciphers=$submission_smtpd_tls_ciphers
-o smtpd_tls_exclude_ciphers=$submission_smtpd_tls_exclude_ciphers
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=$submission_smtpd_recipient_restrictions
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_proxy_filter=127.0.0.1:10028
-o syslog_name=postfix-submission/smtpd
-o receive_override_options=no_header_body_checks
Обратите внимание, что на самом деле это немного больше, чем просто отправка писем на amavis, например установить списки шифров и так далее (вы заметите ссылки на переменные main.cf).
Итак, что вы можете сделать, если ваши пользователи НЕ отправляют свою почту через порт 587 или не все делают? Что ж, тогда тебе придется покинуть страну со стопроцентной уверенностью. amavis может анализировать содержимое письма и действовать в зависимости от наличия заголовков. Одним из таких заголовков может быть имя аутентифицированного пользователя, которое Postfix добавляет, если вы установите smtpd_sasl_authenticated_header = да. Затем вы можете указать amavis действовать с этим заголовком:
package Amavis::Custom;
use strict;
BEGIN {
import Amavis::Conf qw(:platform :confvars c cr ca $myhostname);
import Amavis::Util qw(do_log untaint safe_encode safe_decode);
import Amavis::rfc2821_2822_Tools;
import Amavis::Notify qw(build_mime_entity);
}
sub new {
my($class,$conn,$msginfo) = @_;
my($self) = bless {}, $class;
my $auth_sender = 0;
foreach my $line (@{$msginfo->{'orig_header'}}) {
$line =~ s/\n / /g;
# WARNING: you need to improve this to AT LEAST also match
# for your OWN mail servers name!
$auth_sender = 1 if $line =~ m/^Authenticated sender/i;
}
if ($auth_sender) {
do_log(2, sprintf("Load pre-queue submission policy bank"));
Amavis::load_policy_bank('PREQ-SUBMISSION')
}
return $self;
}
1; # insure a defined return
Пожалуйста, не игнорируйте предупреждение в этом коде: заголовки легко подделать, и другие почтовые серверы также могут вставить заголовок «Авторизованный отправитель», поэтому лучше сопоставить что-то вроде «your-mailserver.example.net. * Аутентифицированный отправитель» .
И последнее замечание по поводу одного из ваших комментариев: запуск почтового сервера ДЕЙСТВИТЕЛЬНО занимает много времени и требует от вас постоянного контроля на предмет злоупотреблений. Когда дело доходит до участия в глобальной почтовой системе, не существует карты «выйти из тюрьмы бесплатно»!