我有Postfix 2.9.6,DSpam 3.10.1和Dovecot 2.1.7接收邮件的情况如下:
Incoming Mail -> SMTP -> LMTP -> DSpam (as daemon) -> LMTP -> Dovecot
我有虚拟邮箱的虚拟域。 一切工作到目前为止。
现在出现的问题是(虚拟?)别名指向一个外部域。 假设,我有以下虚拟域:
virtualdomain1.com virtualdomain2.com
我正在处理邮件。 服务器本身运行在
mydomain.com
如果我现在添加一个指向外部域的别名,例如:
[email protected] -> [email protected]
然后(据我可以跟踪日志),DSpam检查邮件,通过LMTP传递给Dovecot和Dovecot拒绝邮件因为[email protected]是未知的(当然是真的)。
那么为了处理虚拟域的别名,正确的设置如何呢? 如果可能的话,我还想检查传入邮件的虚拟别名。
传入消息到[email protected]的日志是:
postfix/smtpd[23910]: connect from xxx.anyhost.com[1.2.3.4] postfix/smtpd[23910]: NOQUEUE: filter: RCPT from xxx.anyhost.com[1.2.3.4]: <[email protected]>: Recipient address triggers FILTER lmtp:unix:/dspam/dspam.sock; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<anyhost.com> postfix/smtpd[23910]: D91D0771AF70: client=xxx.anyhost.com[1.2.3.4] postfix/cleanup[23917]: D91D0771AF70: message-id=<[email protected]> postfix/smtpd[23910]: disconnect from xxx.anyhost.com[1.2.3.4] postfix/qmgr[23278]: D91D0771AF70: from=<[email protected]>, size=1030, nrcpt=1 (queue active) dovecot: lmtp(23920): Debug: none: root=, index=, control=, inbox=, alt= dovecot: lmtp(23920): Connect from local dovecot: lmtp(23920): Debug: Loading modules from directory: /usr/lib/dovecot/modules dovecot: lmtp(23920): Debug: Module loaded: /usr/lib/dovecot/modules/lib90_sieve_plugin.so dovecot: auth-worker(23921): mysql(127.0.0.1): Connected to database postfixadmin dspam[9421]: Got error 550 in response to RCPT TO: 550 5.1.1 <[email protected]> User doesn't exist: [email protected]#015 dovecot: auth-worker(23921): sql([email protected]): unknown user dovecot: lmtp(23920): Debug: auth input: dovecot: lmtp(23920): Disconnect from local: Client quit (in RCPT TO) postfix/lmtp[23918]: D91D0771AF70: to=<[email protected]>, orig_to=<[email protected]>, relay=mail.mydomain.com[/dspam/dspam.sock], delay=0.98, delays=0.47/0.01/0/0.5, dsn=5.3.0, status=bounced (host mail.mydomain.com[/dspam/dspam.sock] said: 530 5.3.0 <[email protected]> Fatal: 550 5.1.1 <[email protected]> User doesn't exist: [email protected] (in reply to end of DATA command)) postfix/cleanup[23917]: 149CB771AF72: message-id=<[email protected]> postfix/bounce[23923]: D91D0771AF70: sender non-delivery notification: 149CB771AF72 postfix/qmgr[23278]: 149CB771AF72: from=<>, size=3182, nrcpt=1 (queue active) postfix/qmgr[23278]: D91D0771AF70: removed postfix/smtp[23925]: 149CB771AF72: to=<[email protected]>, relay=mx.mydomain.com[1.2.3.5]:25, delay=3.9, delays=0.26/0.01/0.09/3.6, dsn=2.0.0, status=sent (250 OK id=1YY9Ne-0007eJ-Hp) postfix/qmgr[23278]: 149CB771AF72: removed
后缀main.cf:smtpd_banner = $ myhostname ESMTP $ mail_name(Debian / GNU)biff = no
# appending .domain is the MUA's job. append_dot_mydomain = no readme_directory = no # BECAUSE we use Dovecot for authentication we also use its certificates smtpd_tls_cert_file=/etc/dovecot/dovecot.pem smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes #Handing off local delivery to Dovecot's LMTP, and telling it where to store mail virtual_transport = lmtp:unix:private/dovecot-lmtp #Virtual domains, users, and aliases virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf, proxy:mysql:$config_directory/mysql_virtual_alias_domain_mailbox_maps.cf, proxy:mysql:$config_directory/mysql_virtual_alias_domain_catchall_maps.cf virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf, proxy:mysql:$config_directory/mysql_virtual_alias_domain_maps.cf virtual_mailbox_limit = proxy:mysql:$config_directory/mysql_virtual_mailbox_limit_maps.cf myhostname = mail.me.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = localhost, $myhostname relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 1000000000 recipient_delimiter = + inet_interfaces = all inet_protocols = all #Enabling SMTP for authenticated users, and handing off authentication to Dovecot smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_recipient_access pcre:/etc/postfix/dspam_filter_access, permit
dspam_filter_access文件:
/./ FILTER lmtp:unix:/dspam/dspam.sock
最后一个注意:如果我评论这一行
#check_recipient_access pcre:/etc/postfix/dspam_filter_access,
一切正常,但当然没有垃圾邮件检查。
在上面的当前设置中,dovecot和dspam都不能将您的电子邮件redirect到正确的目的地。 特别是对于dovecot,它只能接受基于域名configuration的邮件。
解决方法是,您的dspam设置将扫描后的邮件发送回postfix ,而不是发送给dovecot。 有了这个设置后,扫描后缀路由引擎将重新路由您的电子邮件
换一种说法
[ Outside ] --smtp--> [ Postfix ] --lmtp--> [ dspam ] --smtp--> [ postfix ] --> dovecot (if localdomain) or another mail server (if external domain)
您可以在本教程中将其configuration为像dspam设置。 步骤摘要
dspam_filter_access将电子邮件发送给dspam,您可以使用content_filter参数 no_address_mappings )content_filter和第二个smtpd中的另一个限制 您可以绕过DSPAM检查外部别名。
Incoming Mail -> SMTP -> External address
除去check_recipient_access行,而是将dspam设置为默认的virtual_transport:
virtual_transport = lmtp:unix:/dspam/dspam.sock
节省资源并跳过一些疯狂的本地弹跳。 电子邮件很可能会在外部目的地被垃圾邮件检查… 😉