这个服务器系统从那时起(我认为大约是 1997 年)就开始提供电子邮件服务Red Hat v 1.1
,现在在 Fedora Core 37 上;通过沿途的许多硬件和操作系统更新,它一直保持最新状态。而且,我们很早就选择了postfix
并且dovecot
仍在使用它们。而我一直都是系统破坏者。
一周前的明天,/var
由于备份脚本中的错误,我们的树被消灭了 - doah!并且它需要“从头开始”将操作系统完全重建为相同版本。Fedora Server 37
所有未包含在发行版中的软件都是通过dnf install
. 而且,我们从良好的备份中获得了完整的配置。
两天前的星期一,我注意到系统明显迟缓,但没有时间查看。我还注意到我们与互联网的链接似乎存在性能问题。那是一个线索...
然后,我决定spamassassin
重新开始工作——像这样配置一个成熟的环境需要时间!并且SA
在丢失之前已被禁用/var
,因此它不会重新启动。无论如何,当我去检查/etc/var/log/maillog
它是否正常工作时,我发现所有这些邮件都是中继消息?!威士忌探戈狐步舞?!
然后我检查了邮件队列——仅 Gmail 就有数十万!哇!
现在,我已经关闭了所有出站电子邮件:
default_transport = error: Sorry spammers, we're not sending your email! So sue us!
并开始试图找出问题所在。
我确实发现有些人声称自己是127.0.0.1
,所以我关闭了它。我有条不紊地检查了所有各种(和丰富的)postfix
配置选项,但找不到任何错误......
因此,我使用了其中一个脚本测试开放中继测试网站,这些网站尝试了十几种不同的黑客攻击,垃圾邮件发送者使用这些黑客攻击来说服配置良好的服务器中继他们的邮件,但我找不到任何 -上次我看的时候,有六个这样的网站!(他们怎么了?!如果你知道,请告诉我!)
所以我用了nmap
。它没有做全面的工作,或者如果可以,我不熟悉如何做。但我转身重新发送并进行了测试。在测试中,它说:
Host is up (0.00027s latency).
rDNS record for <ip-addr>: <reverse-lookup-map>
PORT STATE SERVICE
25/tcp open smtp
|_smtp-open-relay: Server doesn't seem to be an open relay, all tests failed
465/tcp filtered smtps
587/tcp open submission
|_smtp-open-relay: Server isn't an open relay, authentication needed
MAC Address: [its mac address] (controller's mfg name)
Nmap done: 1 IP address (1 host up) scanned in 22.03 seconds
我能找到的仅有的两个网站查看它并报告没有响应 - 一个加载但没有响应然后当我尝试重新加载页面时,它不会重新加载,第二个一直说它很忙,稍后再试。
所以......回到“手工”弄清楚。
好的,那么现在我们该怎么办?
所有对设置信息的请求都会很高兴地得到满足,但是配置文件首先是巨大的,其次它包含了很多我们不想要的私人信息。
更多信息- 应 anx 的要求,输出postconf -n
:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
compatibility_level = 3.6
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 10
debug_peer_list = <past-not-current-external-ip>
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
default_transport = error: <our-middle-finger-to-spammers>
disable_vrfy_command = yes
html_directory = no
inet_interfaces = all
inet_protocols = all
local_recipient_maps = unix:passwd.byname $alias_maps
mail_owner = postfix
mailbox_size_limit = 1073741824
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 536870912
meta_directory = /etc/postfix
milter_default_action = accept
mydestination = $myhostname, localhost.$mydomain, localhost, <list-of-60ish-domain-names>
mydomain = <primary-domain>
myhostname = mail.<primary-domain>
mynetworks = <list-of-5-internal-ips>
mynetworks_style = subnet
newaliases_path = /usr/bin/newaliases.postfix
proxy_interfaces = <a-non-extant-external-ip-we-used-to-have>
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix/README_FILES
relay_domains = $mydestination, <list-of-11-internal-ips-most-don't-exist-now>
sample_directory = /usr/share/doc/postfix/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
shlib_directory = /usr/lib64/postfix
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_security_level = may
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, check_helo_access hash:/etc/postfix/helo_access, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_sender_access hash:/etc/postfix/sender_access, check_client_access hash:/etc/postfix/pop-before-smtp, permit_mynetworks
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, check_client_access hash:/etc/postfix/pop-before-smtp, reject_non_fqdn_sender, reject_unknown_sender_domain
smtpd_tls_cert_file = /etc/letsencrypt/live/<primary-domain-name>/fullchain.pem
smtpd_tls_dh1024_param_file = $config_directory/dh2048.pem
smtpd_tls_dh512_param_file = $config_directory/dh512.pem
smtpd_tls_key_file = /etc/letsencrypt/live/<primary-domain-name>/privkey.pem
smtpd_tls_security_level = may
soft_bounce = no
strict_mailbox_ownership = no
unknown_local_recipient_reject_code = 550
更多信息- 大多数也是应 anx 的要求:
Postfix
使用端口 25 (smtp
) 和 587 (submission
或msa
)。Dovecot
使用端口 993 (imaps
) 和 995 (pop3s
),同时侦听被(多个)防火墙阻止的143 和 110 (imap
/ )。pop
postconf -M
smtp inet n - n - - smtpd
提交 inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes
拾取 unix n - n 60 1 拾取
清理 unix n - n - 0 清理
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000?1 tsmgr
重写 unix - - n - - trivial-rewrite
反弹 unix - - n - 0 反弹
延迟 unix - - n - 0 反弹
跟踪 unix - - n - 0 反弹
验证 unix - - n - 1 验证
刷新 unix n - n 1000?0同花顺
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - 名词 - - smtp
中继 unix - - n - - smtp -o syslog_name=postfix/$service_name
showq unix n - n - - showq
错误 unix - - n - - 错误
重试 unix - - n - - 错误
丢弃 unix - - n - - 丢弃
本地 unix - nn - - 本地
虚拟 unix - nn - - 虚拟
lmtp unix - - 名词 - - lmtp
铁砧 unix - - n - 1 铁砧
scache unix - - n - 1 scache
postlog unix-dgram n - n - 1 postlogd
尚未获取的信息:
- “本地添加的接收标头”中有什么。
- 分析给定队列 ID 的后缀日志“堆栈”。
保留程序!
只是想发送一些重要的电子邮件,但不想让垃圾邮件发送者单独使用我们的系统,我决定尝试关闭......dovecot
我发现关闭dovecot
并恢复default_transport
设置允许出站正常工作并且Postfix
没有不要成为开放中继!耶!
当然,它不适用于我们的非本地用户(数量 > 1 且 < 100),但是,嘿,“你必须做你必须做的……”
我认为这大大转移了注意力;dovecot
是问题。
我现在确信这不是
Postfix
问题而是Dovecot
问题。但是,这个答案很可能对其他人有帮助。特别是,如何确定它可能不是
Postfix
问题是一个比我预期的学习曲线更大的学习曲线,对于一个使用同一个系统(作为系统管理员)已经使用了 20 年甚至更长时间的人来说。我没有意识到的是,通过这种配置,
Postfix
它自己“放弃了权限控制”给Dovecot
. 而且,在这一点上,Dovecot
除了我们在现场之外,从我们这些不在内部网络中的人那里接收有效连接的能力已经成为我们运作的一个重要特征。值得庆幸的是,它对我们来说不如对许多其他组织那么重要,因为我们有其他选择,但现实是大多数人不想费心通过命令行登录只是为了处理邮件——我怀疑这是最受欢迎的位置!——在这种情况下!但这并没有让我认识到我没有认识到什么:
你不能只是停止
Dovecot
,一旦配置,并期望能够发送 WITHOUT 重新配置Postfix
不使用Dovecot
。Dovecot
而且,您甚至不能从外部屏蔽端口,因为无论如何Postfix
都会Dovecot
直接调用!最终,根据我的理解(很高兴被证明是错误的!)一旦配置,
Postfix
放弃所有伪装成有效用户的连接的所有安全权限Dovecot
,尽管所有“内部”发送和接收功能正常Dovecot
运行和Postfix
阻止从发送(如问题中所述)。我认为用这个问题来询问 about
Dovecot
的问题既徒劳又不合适,虽然我认为这些评论构成了一个有效的答案,但我需要问另一个问题因为Dovecot
“如果我能找到问题所在,我会被诅咒!”我强烈怀疑我正在制作一个(可能并不少见)错误或者,我们现在的版本中有一个错误,重建后,因为重新加载之前的配置没有发送垃圾邮件,这就是我们已经使用了几天的在垃圾邮件发送者开始使用我们的系统之前!值得注意的是,当我们没有停止
Postfix
发送时,我们发现/用于测试我们系统的外部系统都没有认为我们的系统是一个开放的邮件中继,但不可否认它不正确地中继了数十万封电子邮件!此外,及时打开备份(允许 Postfix 发送)在这里值得一提的是,我已经检查了日志,并且在有限的时间里,考虑到目前对我的所有要求,我有 90% 以上的把握确认没有“被盗凭据”,但这还没有确定证明。我肯定没有在日志中看到证据,但我并不热衷于使用新的日志记录配置再次向垃圾邮件发送者开放以获取更多数据。也许正是因为这个原因,始终拥有最大授权日志记录是值得的!