Собственно, сабж. Пытаюсь отправить с MS Outlook 2016 и Thunderbird. В заголовках видно, что письмо проходило через amavisd-new и... всё.
Received: from *** (*** [127.0.0.1])
by *** (Postfix) with ESMTP id 5AC25255EF
for <@@@>; Tue, 12 Jul 2016 23:45:02 +0300 (MSK)
Received: from *** ([127.0.0.1])
by *** (*** [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id 9sHhIuEx-rzN for <@@@>;
Tue, 12 Jul 2016 23:45:01 +0300 (MSK)
Received: from ### (### [###])
by *** (Postfix) with ESMTPSA id BD0A7255EC
for <@@@>; Tue, 12 Jul 2016 23:45:01 +0300 (MSK)
root@***# amavisd-new testkeys
TESTING#1 ***: dkim._domainkey.*** => pass
Конфиг amavis (50-user):
use strict;
#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#
#------------ Do not modify anything below this line -------------
#{1}
chomp($mydomain = "***");
@local_domains_maps = 1;
@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 );
# listen on multiple TCP ports.
$inet_socket_port = [10024, 10026];
# Enable spam check.
@bypass_spam_checks_maps = (
\%bypass_spam_checks,
\@bypass_spam_checks_acl,
$bypass_spam_checks_re,
);
$mailfrom_notify_admin = "root\@$mydomain";
$mailfrom_notify_recip = "root\@$mydomain";
$mailfrom_notify_spamadmin = "root\@$mydomain";
# Mail notify.
$mailfrom_notify_admin = "root\@$mydomain"; # notifications sender
$mailfrom_notify_recip = "root\@$mydomain"; # notifications sender
$mailfrom_notify_spamadmin = "root\@$mydomain"; # notifications sender
$mailfrom_to_quarantine = ''; # null return path; uses original sender if undef
# Disable defang banned mail.
$defang_banned = 0; # MIME-wrap passed mail containing banned name
$policy_bank{'MYNETS'} = { # mail originating from @mynetworks
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
allow_disclaimers => 1, # enables disclaimer insertion if available
enable_dkim_signing => 1,
};
# 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
$interface_policy{'10026'} = 'ORIGINATING';
$policy_bank{'ORIGINATING'} = { # mail supposedly originating from our users
originating => 1, # declare that mail was submitted by our smtp client
allow_disclaimers => 1, # enables disclaimer insertion if available
enable_dkim_signing => 1,
banned_admin_maps => ["root\@$mydomain"],
warnbadhsender => 1,
warnbannedsender => 1,
# force MTA conversion to 7-bit (e.g. before DKIM signing)
#smtpd_discard_ehlo_keywords => ['8BITMIME'],
# don't remove NOTIFY=SUCCESS option
terminate_dsn_on_notify_success => 0,
# don't perform spam/virus/header check.
#bypass_spam_checks_maps => [1], # spam
#bypass_header_checks_maps => [1], # bad header
bypass_virus_checks_maps => [1], # virus
#bypass_banned_checks_maps => [1], # banned file names and types
};
# Custom short log template (at log_level 0), add SpamAssassin testing result (Tests: [xxx])
#
# Note: You can find the original log template at the bottom of
# /usr/sbin/amavisd-new.
$log_templ = '
[?%#D|#|Passed #
[? [:ccat|major] |#
OTHER|CLEAN|MTA-BLOCKED|OVERSIZED|BAD-HEADER-[:ccat|minor]|SPAMMY|SPAM|\
UNCHECKED[?[:ccat|minor]||-ENCRYPTED|]|BANNED (%F)|INFECTED (%V)]#
{[:actions_performed]}#
,[?%p|| %p][?%a||[?%l|| LOCAL] [:client_addr_port]][?%e|| \[%e\]] [:mail_addr_decode_octets|%s] -> [%D|[:mail_addr_decode_octets|%D]|,]#
[? %q ||, quarantine: %q]#
[? %Q ||, Queue-ID: %Q]#
[? %m ||, Message-ID: [:mail_addr_decode_octets|%m]]#
[? %r ||, Resent-Message-ID: [:mail_addr_decode_octets|%r]]#
[? %i ||, mail_id: %i]#
, Hits: [:SCORE]#
, size: %z#
[? [:partition_tag] ||, pt: [:partition_tag]]#
[~[:remote_mta_smtp_response]|["^$"]||[", queued_as: "]]\
[remote_mta_smtp_response|[~%x|["queued as ([0-9A-Za-z]+)$"]|["%1"]|["%0"]]|/]#
#, Subject: [:dquote|[:mime2utf8|[:header_field_octets|Subject]|100|1]]#
#, From: [:uquote|[:mail_addr_decode_octets|[:rfc2822_from]]]#
[? [:dkim|sig_sd] ||, dkim_sd=[:dkim|sig_sd]]#
[? [:dkim|newsig_sd] ||, dkim_new=[:dkim|newsig_sd]]#
, %y ms#
[? %#T ||, Tests: \[[%T|,]\]]#
]
[?%#O|#|Blocked #
[? [:ccat|major|blocking] |#
OTHER|CLEAN|MTA-BLOCKED|OVERSIZED|BAD-HEADER-[:ccat|minor]|SPAMMY|SPAM|\
UNCHECKED[?[:ccat|minor]||-ENCRYPTED|]|BANNED (%F)|INFECTED (%V)]#
{[:actions_performed]}#
,[?%p|| %p][?%a||[?%l|| LOCAL] [:client_addr_port]][?%e|| \[%e\]] [:mail_addr_decode_octets|%s] -> [%O|[:mail_addr_decode_octets|%O]|,]#
[? %q ||, quarantine: %q]#
[? %Q ||, Queue-ID: %Q]#
[? %m ||, Message-ID: [:mail_addr_decode_octets|%m]]#
[? %r ||, Resent-Message-ID: [:mail_addr_decode_octets|%r]]#
[? %i ||, mail_id: %i]#
, Hits: [:SCORE]#
, size: %z#
[? [:partition_tag] ||, pt: [:partition_tag]]#
#, Subject: [:dquote|[:mime2utf8|[:header_field_octets|Subject]|100|1]]#
#, From: [:uquote|[:mail_addr_decode_octets|[:rfc2822_from]]]#
[? [:dkim|sig_sd] ||, dkim_sd=[:dkim|sig_sd]]#
[? [:dkim|newsig_sd] ||, dkim_new=[:dkim|newsig_sd]]#
, %y ms#
[? %#T ||, Tests: \[[%T|,]\]]#
]';
# Set hostname.
$myhostname = "***";
$localhost_name = $myhostname;
# Set listen IP/PORT.
$notify_method = 'smtp:[127.0.0.1]:10025';
$forward_method = 'smtp:[127.0.0.1]:10025';
# Set default action.
# Available actions: D_PASS, D_BOUNCE, D_REJECT, D_DISCARD.
$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_BOUNCE;
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS;
#########################
# Quarantine mails.
#
# Where to store quarantined mail message:
# - 'local:spam-%i-%m', quarantine mail on local file system.
# - 'sql:', quarantine mail in SQL server specified in @storage_sql_dsn.
# - undef, do not quarantine mail.
# Bad header.
$bad_header_quarantine_method = undef;
#$bad_header_quarantine_method = 'sql:';
#$bad_header_quarantine_to = 'bad-header-quarantine';
# SPAM.
$spam_quarantine_method = undef;
#$spam_quarantine_method = 'sql:';
#$spam_quarantine_to = 'spam-quarantine';
# Banned
$banned_files_quarantine_method = undef;
#$banned_files_quarantine_method = 'sql:';
#$banned_quarantine_to = 'banned-quarantine';
#########################
# Quarantine CLEAN mails.
# Don't forget to enable clean quarantine in policy bank 'MYUSERS'.
#
#$clean_quarantine_method = 'sql:';
#$clean_quarantine_to = 'clean-quarantine';
$sql_allow_8bit_address = 1;
$timestamp_fmt_mysql = 1;
# a string to prepend to Subject (for local recipients only) if mail could
# not be decoded or checked entirely, e.g. due to password-protected archives
#$undecipherable_subject_tag = '***UNCHECKED*** '; # undef disables it
$undecipherable_subject_tag = undef;
# Hope to fix 'nested MAIL command' issue on high load server.
$smtp_connection_cache_enable = 0;
# The default set of header fields to be signed can be controlled
# by setting %signed_header_fields elements to true (to sign) or
# to false (not to sign). Keys must be in lowercase, e.g.:
# 0 -> off
# 1 -> on
$signed_header_fields{'received'} = 1;
$signed_header_fields{'to'} = 1;
# Add dkim_key here.
dkim_key("***", "dkim", "/var/lib/dkim/***.pem");
@dkim_signature_options_bysender_maps = ( {
# ------------------------------------
# For domain: ***
# ------------------------------------
# 'd' defaults to a domain of an author/sender address,
# 's' defaults to whatever selector is offered by a matching key
"***" => { d => "***", a => 'rsa-sha256', ttl => 10*24*3600 },
# ---- End domain: *** ----
# catchall defaults
'.' => { a => 'rsa-sha256', c => 'relaxed/simple', ttl => 30*24*3600 },
} );
# ------------ Disclaimer Setting ---------------
# Uncomment this line to enable singing disclaimer in outgoing mails.
#$defang_maps_by_ccat{+CC_CATCHALL} = [ 'disclaimer' ];
# Program used to signing disclaimer in outgoing mails.
$altermime = '/usr/bin/altermime';
# Disclaimer in plain text formart.
@altermime_args_disclaimer = qw(--disclaimer=/etc/postfix/disclaimer/_OPTION_.txt --disclaimer-html=/etc/postfix/disclaimer/_OPTION_.txt --force-for-bad-html);
@disclaimer_options_bysender_maps = ({
# Per-domain disclaimer setting: /etc/postfix/disclaimer/host1.iredmail.org.txt
#'host1.iredmail.org' => 'host1.iredmail.org',
# Sub-domain disclaimer setting: /etc/postfix/disclaimer/iredmail.org.txt
#'.iredmail.org' => 'iredmail.org',
# Per-user disclaimer setting: /etc/postfix/disclaimer/boss.iredmail.org.txt
#'boss@iredmail.org' => 'boss.iredmail.org',
# Catch-all disclaimer setting: /etc/postfix/disclaimer/default.txt
'.' => 'default',
},);
# ------------ End Disclaimer Setting ---------------
# Reporting and quarantining.
@storage_sql_dsn = (
['DBI:Pg:database=amavisd;host=127.0.0.1;port=5432', 'amavisd', 'sTrEqOPwSh2Ff5yEufbPFqjjZ8Uz4o'],
);
# Lookup for per-recipient, per-domain and global policy.
@lookup_sql_dsn = @storage_sql_dsn;
# Don't send email with subject "UNCHECKED contents in mail FROM xxx".
delete $admin_maps_by_ccat{&CC_UNCHECKED};
# Do not notify administrator about SPAM/VIRUS from remote servers.
$virus_admin = undef;
$spam_admin = undef;
$banned_admin = undef;
$bad_header_admin = undef;
# Num of pre-forked children.
# WARNING: it must match (equal to or larger than) the number set in
# /etc/postfix/master.cf "maxproc" column for the 'smtp-amavis' service.
$max_servers = 1;
# Enable DKIM signing/verification
$enable_dkim_verification = 1;
#$enable_dkim_signing = 1; # we have dkim signing enabled in policy banks.
# Amavisd log level. Verbosity: 0, 1, 2, 3, 4, 5, -d.
$log_level = 0;
# SpamAssassin debugging (require $log_level). Default if off (0).
$sa_debug = 0;
# Listen on specified addresses.
$inet_socket_bind = ['127.0.0.1'];
# Selectively disable some of the header checks
#
# Duplicate or multiple occurrence of a header field
$allowed_header_tests{'multiple'} = 0;
# Missing some headers. e.g. 'Date:'
$allowed_header_tests{'missing'} = 0;
1; # insure a defined return