从 Z-push 收到邮件时,Postfix 不会将邮件传递给 Amavis

从 Z-push 收到邮件时,Postfix 不会将邮件传递给 Amavis

我对如何让 ActiveSync 与我的邮件服务器正确协作有点摸不着头脑,所以也许这里有人有什么想法吗?

交易是邮件服务器托管四个域,我希望所有发送的邮件都有 DKIM 签名。

我已经让它在通过 SMTP 发送时工作,但是当客户端使用 ActiveSync 发送电子邮件时签名失败。

以下是 SMTP 工作原理的图表:

Postfix 与 Amavis 邮件处理流程图

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 使用端口 10025 将结果发送回 Postfix,并由/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

结果使用端口 10027 发送回 Postfix,并由以下代码处理/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-pushActiveSync 处理连接,但我的问题如下:

我注意到在 mail.log 中,尽管 z-push 配置文件中声明它应该通过 SMTP 将收到的邮件传递给 postfix,但它仍然坚持将收到的邮件直接放入 maildrop 目录中,然后再由 Postfix pickup 守护进程处理。

从那里,邮件要么直接转发到目标地址,甚至无需经过 Amavis 的 DKIM 签名。

问题是:如何让 Postfix 将邮件从 picker 守护进程传递到 Amavis,以便它可以获得 DKIM 签名,然后再转发到目的地?

是否只需在文本下方插入一行pickup即可master.cf

-o content_filter = amavis:[127.0.0.1]:10026

...或者与已经存在的设置冲突?:-)

答案1

经过一些调整后我终于让它工作了。

以下是对正在发生的事情的解释。

Z-push 是用 PHP 编写的,我在网上查到的资料是,PHP 邮件设置是通过 进行控制的php.ini

php-ini-file 中,您将被告知发送邮件时唯一可用的选项是通过sendmail,因此从 Z-push 收到的所有邮件将始终发送到 maildrop 文件夹,然后由 Postfix pickup 守护进程进行处理。

SMTP 设置仅安装在 Windows 主机上才有效。

如果你问我,这有点愚蠢,但无论如何,如果我想使用通过 ActiveSync 协议(即来自 Z-push)收到的 DKIM 签名来签署邮件,我需要采取另一种方式。

正如我所怀疑的那样,我需要在行后面添加一行content_filter,但我还需要对我的 Amavis 配置文件进行一点点调整。pickup/etc/postfix/master.cf

该文件/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 配合使用时对着屏幕咒骂,我希望这能有所帮助。:-)

相关内容