postfix - 充当中继但不传递

postfix - 充当中继但不传递

我希望我的 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(已送达邮箱)

...原本要路由到外部的邮件被转移到本地邮箱

相关内容