我希望我的 postfix 服务器充当某些客户端的中继/智能主机,但希望将所有邮件发送到本地(Maildir 样式)邮箱,而不是发送给预期收件人。听起来有点奇怪,我知道,但这是为了在我们的测试环境中进行测试。
对于我们的现场环境,我希望正常传递邮件。
我现在的main.cf
样子是这样的:
myhostname = mymail.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = pcre:/etc/postfix/mydestinations
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.5.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = 192.168.5.43, 127.0.0.1
inet_protocols = all
virtual_alias_maps = hash:/etc/postfix/virtual
default_process_limit = 100
smtpd_client_connection_count_limit = 10
smtpd_client_connection_rate_limit = 30
queue_minfree = 20971520
header_size_limit = 51200
message_size_limit = 10485760
smtpd_recipient_limit = 100
smtpd_tls_cert_file=/etc/ssl/certs/mailcert.crt
smtpd_tls_key_file=/etc/ssl/private/mailcert.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_security_level=may
smtpd_tls_protocols = !SSLv2, !SSLv3
在 /etc/postfix/mydestinations 中:
/^mymail.mydomain.com$/ ACCEPT
/^localhost.localdomain$/ ACCEPT
/^localhost$/ ACCEPT
/^.*\.mydomain\.com$/ ACCEPT
在/etc/postfix/虚拟:
@mydomain.com catchall
有人告诉我这是可能的,但实际上找不到有关如何实现它的任何具体信息。
答案1
我发现您当前的配置存在两个不同的问题:
您的域名位于
mydestination
当你尝试使用以下方式实现你的万能地址时virtual_alias_maps
,这将要求域名位于virtual_alias_domains
。你只能
@example.com
在 中使用virtual_alias_maps
,而正则表达式^.*\.example\.com$/
表明你需要对每个 都使用这个 catch-all*.example.com
。为了做到这一点,你也需要能够在 上使用正则表达式virtual
。由于 无法做到这一点hash:
,因此你也需要pcre:
在这里使用。
您需要修改以下设置main.cf
:
mydestination = localhost
virtual_alias_domain = pcre:/etc/postfix/mydestinations
virtual_alias_maps = pcre:/etc/postfix/virtual
你/etc/postfix/virtual
会得到这个正则表达式:
/@((\w[\w\-]*)\.)+example\.com/ catchall
如果你使用,pcre:
请确保你的 Postfix 是使用PCRE 支持。您也可以选择使用regexp:
,,但您将无法使用 Perl 样式的正则表达式。请参阅Postfix 查找表概述:
聚合酶链反应(只读)
基于 Perl 兼容正则表达式的查找表。文件格式描述如下pcre_表(5)。中使用的查找表名称
pcre:table
是正则表达式文件的名称。正则表达式(只读)
基于正则表达式的查找表。文件格式描述如下正则表达式表(5)。中使用的查找表名称
regexp:table
是正则表达式文件的名称。
答案2
有人向我展示了一个可行的配置:
(缩写)/etc/postfix/main.cf:
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = mydomain.com, localhost, $myhostname
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.5.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = 192.168.5.43, 127.0.0.1
inet_protocols = all
recipient_canonical_maps = regexp:/etc/postfix/recipient_canonical_map
在/etc/postfix/recipient_canonical_map中:
/./ catchall
这将导致邮件传递的预期结果:
十二月 1 09:40:42 邮件服务器 postfix/qmgr[7943]: 58242139670: from=、size=703、nrcpt=1(队列处于活动状态) 十二月 1 09:40:42 mail-it-int postfix/smtpd[7944]: 断开与未知 [192.168.5.2] 的连接 ehlo=1 mail=1 rcpt=1 data=1 quit=1 command=5 十二月 1 09:40:42 mail-it-int postfix/local[7949]: 58242139670: to=、orig_to=、relay=local、delay=0.01、delays=0.01/0/0/0、dsn=2.0.0、status=sent(已送达邮箱)
...原本要路由到外部的邮件被转移到本地邮箱