Я как бы вслепую смотрю, как заставить ActiveSync правильно работать с моим почтовым сервером, так что, может быть, у кого-нибудь есть идея?
Дело в том, что на почтовом сервере размещены четыре домена, и я хочу, чтобы все отправленные письма имели подпись DKIM.
Я заставил его работать при отправке через SMTP, но он не подписывает, когда клиент использует ActiveSync для отправки электронной почты.
В любом случае вот схема того, как это работает для SMTP:
Большая часть волшебства в том, как Postfix описывает, как идентифицировать почту, отправленную от аутентифицированного пользователя, которая принадлежит одному из моих размещенных доменов, по сравнению с почтой откуда-то из Интернета, исходит из этой строки в /etc/postfix/main.cf
:
smtpd_sender_restrictions =
check_sender_access regexp:/etc/postfix/tag_as_originating.re,
permit_mynetworks,
permit_sasl_authenticated,
check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf,
check_sender_access regexp:/etc/postfix/tag_as_foreign.re
content_filter = amavis:[127.0.0.1]:10024
Содержание /etc/postfix/tag_as_foreign.re
:
/^/ FILTER amavis:[127.0.0.1]:10024
Amavis отправил результат обратно в Postfix, используя порт 10025, который обрабатывается /etc/postfix/master.cf
с этой конфигурацией:
127.0.0.1:10025 inet n - n - - 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
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks, no_header_body_checks
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
Содержание /etc/postfix/tag_as_originating.re
:
/^/ FILTER amavis:[127.0.0.1]:10026
Результат отправляется обратно в Postfix через порт 10027 и обрабатывается этим кодом в /etc/postfix/master.cf
:
127.0.0.1:10027 inet n - n - - 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
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks, no_header_body_checks
-o smtp_send_xforward_command=yes
-o milter_default_action=accept
-o milter_macro_daemon_name=ORIGINATING
-o disable_dns_lookups=yes
Наконец, вот соответствующие строки в master.cf
о том, как почта попадает в Postfix в первую очередь:
smtp inet n - y - - smtpd
pickup unix n - y 60 1 pickup
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated, reject
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated, reject
Я использую Z-push
для обработки соединений через ActiveSync, но моя проблема заключается в следующем:
Я заметил в mail.log, что, хотя в конфигурационных файлах z-push указано, что он должен передавать входящие письма в postfix через SMTP, он по-прежнему настаивает на помещении входящих писем непосредственно в каталог maildrop, который, в свою очередь, обрабатывается демоном захвата Postfix.
Оттуда почта либо пересылается прямо на адрес получателя, даже без подписи DKIM от Amavis.
Возникает вопрос: как я могу заставить Postfix передавать почту от демона перехвата в Amavis, чтобы он мог получить подпись DKIM, прежде чем быть перенаправленным по назначению?
Это так просто, как просто вставить строку под pickup
в master.cf
с текстом:
-o content_filter = amavis:[127.0.0.1]:10026
... или противоречит уже существующим настройкам? :-)
После небольшой дополнительной настройки я наконец заставил его работать.
Вот объяснение того, что происходит.
Z-push написан на PHP, и что я смог найти в Интернете, так это то, что настройки почты PHP управляются через php.ini
.
В php-ini
-file вам сообщат, что единственная доступная опция при отправке почты - через sendmail
и поэтому все полученные письма, полученные от Z-push, всегда будут отправляться в папку maildrop, которую затем обрабатывает демон Postfix pickup.
Настройки SMTP работают, только если они установлены на хосте Windows.
Это немного глупо, если вы спросите меня, но в любом случае мне нужно выбрать другой маршрут, если я хочу подписывать письма с подписью DKIM, полученной по протоколу ActiveSync (также известному как Z-push).
Мне нужно было как подозревать добавить content_filter
к строке, следующей за pickup
линия в /etc/postfix/master.cf
, но мне также нужно было немного подправить мой файл конфигурации Amavis.
Файл /etc/postfix/master.cf
в основном такой же, как и раньше, за исключением того, что когда вы идете к линии приема, теперь говорится:
amavis unix - - y - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o smtp_bind_address=
pickup unix n - y 60 1 pickup
-o content_filter=amavis:[127.0.0.1]:10026
Я добавил раздел amavis, так как обнаружил, что если он закомментирован, то Amavis никогда не вызывается. Просто для полноты всего. :-)
В /etc/amavis/conf.d/50-user
следующая конфигурация показывает, как Amavis различает входящую почту из любого места на мои почтовые учетные записи и почту, отправленную из одной из моих учетных записей куда угодно:
$inet_socket_port = [10024,10026];
$forward_method = 'smtp:[127.0.0.1]:10025';
$notify_method = 'smtp:[127.0.0.1]:10027';
$interface_policy{'10026'} = 'ORIGINATING';
$policy_bank{'ORIGINATING'} = {
originating => 1,
smtpd_discard_ehlo_keywords => ['8BITMIME'],
forward_method => 'smtp:[127.0.0.1]:10027',
};
# IP-Addresses for internal networks => load policy MYNETS
# - requires -o smtp_send_xforward_command=yes in postfix master.cf
@mynetworks = qw(0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
[::1] [FE80::]/10 [FEC0::]/10);
# Allow SMTP access from IPs in @inet_acl to amvisd SMTP Port
@inet_acl = qw( 127.0.0.1 [::1] 192.168.0.0/16 );
# DKIM
$enable_dkim_verification = 1;
$enable_dkim_signing = 1; # load DKIM signing code
$signed_header_fields{'received'} = 0; # turn off signing of Received
@dkim_signature_options_bysender_maps = (
{ '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } );
Я упомянул настройку, которая заключалась в том, что раньше у меня были следующие строки /etc/amavis/conf.d/50-user
:
$forward_method = 'smtp:[127.0.0.1]:*';
$notify_method = 'smtp:[127.0.0.1]:*';
$policy_bank{'ORIGINATING'} = {
originating => 1,
smtpd_discard_ehlo_keywords => ['8BITMIME'],
};
Путь *
работает так: все, что Amavis получает на порт (например, «10025»), будет возвращено на порт на один выше (например, «10026»).
Мне нужно было быть немного более явный - во избежание путаницы.
Я надеюсь, что это поможет, если кто-то еще ругает свой экран, пытаясь заставить DKIM работать с Postfix и Amavis. :-)