如何为 Google Workspace(gmail)设置 postfix 中继服务器?

如何为 Google Workspace(gmail)设置 postfix 中继服务器?

需要为公司的企业邮件创建一个中继服务器。由于垃圾邮件列表中存在一些 google ip,因此需要这样做,有时这会导致信件最终成为垃圾邮件。到底需要什么?您希望 gmail 通过此中继服务器发送所有外发邮件。但是,我没有在 Google Workspace 控制面板中找到在服务器上指定授权数据的可能性,只有主机和端口。需要限制仅当信件从公司域发送时才进行中继的可能性。请告诉我,如何做到这一点?

hetzner 上有一个 VPS(Ubuntu 22.04)服务器,其后缀已提升(v 3.6.4)。

配置主文件

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# See www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 3.6
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem
smtpd_tls_security_level=may
smtp_use_tls=yes
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
myhostname = mail.example.com
mydomain = mail.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localhost.$mydomain, localhost, $myhostname
relayhost =
#relay_domains = gmail.com, google.com, mail.example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

使用这些设置,我收到一条错误消息,提示“拒绝中继访问”。可以通过将 Google 邮件服务的子网添加到“mynetworks =”行来解决此问题,但使用此配置,它就像一个开放的中继服务器,并且会有很多来自 Google 邮件的垃圾邮件(感谢您在帖子中向我解释这一点:Postfix 阻止垃圾邮件地址)。

Jun 20 08:49:19 mail postfix/smtpd[1444537]: NOQUEUE: reject: RCPT from mail-qk1-f200.google.com[209.85.222.200]: 554 5.7.1 : Relay access denied; from= to= proto=ESMTP helo=
Jun 20 08:49:19 mail postfix/smtpd[1444537]: disconnect from mail-qk1-f200.google.com[209.85.222.200] ehlo=2 starttls=1 mail=1 rcpt=0/1 bdat=0/1 quit=1 commands=5/7

答案1

主要问题是,当您配置 Google Workspace 所称的出站网关您无法提供任何“高级”身份验证。

出站网关(邮件中继)可用的唯一机制是基于 IP 的访问控制。

这意味着您必须配置 Postfix 接受和转发来自所有 Google Workspace 邮件服务器 IP 地址的电子邮件。

这需要您按照以下步骤检索(并可能定期更新)Google 用于电子邮件转发的 IP 地址列表:https://support.google.com/a/answer/60764

检索域 _spf.google.com 的 SPF 记录:

nslookup -q=TXT _spf.google.com 8.8.8.8

这将返回 Google SPF 记录中包含的域列表,例如:

_netblocks.google.com, _netblocks2.google.com, _netblocks3.google.com

逐个查找与这些域关联的 DNS 记录:

nslookup -q=TXT _netblocks.google.com 8.8.8.8
nslookup -q=TXT _netblocks2.google.com 8.8.8.8
nslookup -q=TXT _netblocks3.google.com 8.8.8.8

结果应该是这样的:

on-authoritative answer:
_netblocks3.google.com    text = "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"

这些是您需要授予中继功能访问权限的 IP 地址范围。
是的,那将会有大量的 IP 地址范围和地址。
,与对您其他帖子的评论建议,这不会使您的服务器成为开放中继。

对于后缀,这通常意味着将它们添加到您的mynetworks =条目中main.cf并使用默认或其他适当的smtpd_relay_restrictions

mynetworks = 127.0.0.0/8 81.171.2.0/24 [::1]/128 [fe80::]/64 172.217.0.0/19  172.217.32.0/20 ... etc. etc. 
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination

强制仅当邮件的发件人/发件人为您自己的域 example.com 和 example.co.uk 时才中继/转发邮件:需要进行额外的细化:

设置一个访问地图

 #/etc/postfix/access

 example.com OK
 example.co.uk OK 

跑步postmap /etc/postfix/access

并添加check_sender_access hash:/etc/postfix/accesssmtpd_relay_restrictions

     smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, check_sender_access hash:/etc/postfix/access, defer_unauth_destination

相关内容