我想在 Ubuntu 20.04 机器上设置一个 Postfix 空客户端,即发送但不接收电子邮件的邮件服务器。我花了几天时间尝试来自教程、Postfix 文档、论坛讨论等的建议。其中许多都没有提供完整的图片,甚至相互矛盾。简而言之:系统没有按预期工作,我不知道哪些设置是正确的。
让我更具体地介绍一下当前的设置以及我遇到的一些更精确的问题。出于安全原因,我使用example.com
以及一些 IP 地址对域名进行匿名化。在 中/etc/postfix/main.cf
,我使用以下设置:
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.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_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mail.example.com
mydomain = mail.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.$mydomain, localhost, $myhostname
mynetworks = 127.0.0.0/8 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = ipv4
local_transport = error: local delivery disabled
其中/etc/aliases
列出[email protected]
为postmaster
并/etc/mailname
包含行mail.example.com
.
修改 Postfix 配置后,我使用 重新启动程序sudo systemctl restart postfix
。
外部 DNS 服务器使用以下设置:
@ IN A 123.456.789.01
mail IN A 123.456.789.01
www IN A 123.456.789.01
autoconfig IN CNAME mail.your-server.com.
@ IN TXT "v=spf1 +a +mx ?all"
@ IN MX 0 mail
_autodiscover._tcp IN SRV 0 100 443 mail.your-server.com.
_imaps._tcp IN SRV 0 100 993 mail.your-server.com.
_pop3s._tcp IN SRV 0 100 995 mail.your-server.com.
_submission._tcp IN SRV 0 100 587 mail.your-server.com.
安装Postfix的云服务器有PTR记录。
当尝试通过以下方式发送电子邮件时
sudo echo "Test" | mail -s "Test" [email protected]
系统尝试从 发送它current-user@hostname
,例如john@abc
,而不是[email protected]
。日志通过错误消息反映了这一点:Sender address rejected: need fully-qualified address (in reply to RCPT TO command)
。我尝试masquerade_domains = example.com
使用 和mail
的选项更改发件人地址r
。然而,这不起作用。如果我通过以下方式更改整个计算机的主机名,则电子邮件只会通过
sudo hostnamectl set-hostname mail.example.com
但是,我只想更改 Postfix 使用的主机名。此外,我想将发送地址中的用户名替换为noreply
,而不必设置名为 的新用户帐户noreply
。即电子邮件应从 发送[email protected]
。
托管提供商解锁了端口 25。因此,这应该不是问题。
我为 Nginx Web 服务器 ( example.com
) 和 Postfix 邮件服务器 ( mail.example.com
) 下载了单独的 Let's Encrypt 证书。
我的猜测是,,,,,,myhostname
(某些示例将此设置留空),(某些示例使用不同的地址),或(我不想接受任何传入电子邮件,所以我认为不需要设置中继主机mydomain
?) 在 Postfix 配置中,或者部分 DNS 配置未正确定义。我确信我的 A 记录是正确的,但我完全不确定其他 DNS 条目。有些教程建议设置 MX 记录,有些则不建议。如果我使用 直接从 shell 直接发送电子邮件,我是否需要 SRV 记录?alias_maps
alias_database
myorigin
mydestination
mynetworks
relayhost
mail
正如我所说,我已经研究了好几天的配置,并查看了文档、教程和大量论坛讨论。没有产生预期的结果。任务只是设置一个安全的邮件服务器,从命令行发送电子邮件,同时不允许传入电子邮件。上述哪些设置不正确或不适合此应用程序?
我是邮件服务器的新手,期待收到任何有用的评论和答案 - 除了“阅读文档”(我已经这样做了)或“阅读相关帖子”(我也这样做了)。
答案1
如何设置监听和发送是在/etc/postfix/master.cf
.
要禁用接收,请找到类似于以下内容的行:
<hostname>:smtp inet n - n - - smtpd -o smtpd_sasl_auth_enable=no -o syslog_name=smtpd -o smtp_helo_name=<hostname> -o myhostname=<hostname> -o smtpd_banner=$smtpd_banner_bgcomp
并将其注释掉。这将阻止它侦听 smtp 端口。这是smtpd
重要的一点。
您仍应具有以下任意一行或两行:
<socket relative pathname under in private queue directory> unix - - n - - smtpd -o smtpd_sasl_auth_enable=no -o syslog_name=smtp -o smtp_helo_name=<hostname> -o smtp_bind_address=<ip address> -o smtp_bind_address6=<ipv6 address>
<hostname>:submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=no
这些将允许您通过 unix 域套接字或通过提交端口在本地注入电子邮件以进行转发。这全部详细说明在man 5 master
您最好在 DNS 中设置一个指向源 IP 地址的 mx 主机,因为如果该主机不存在,许多系统将拒绝电子邮件。
我确信我有什么地方不对劲,我通常都是这样......
请记住,这些是特定于我的系统的,您的系统会略有不同。