我正在测试 postfix 安装。我注意到,如果我尝试从另一个不属于我的域 ( [email protected]
) 上的虚构帐户向我的一个本地用户 ( [email protected]
) 发送邮件,该电子邮件仍会发送给我的用户。
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
我不确定这是正常现象还是会造成问题。例如,我担心用户可能会使用该服务器发送虚假电子邮件,而这些电子邮件实际上并非来自他们声称的电子邮件帐户。
PS 我仍处于学习 Postfix 的早期阶段,因此不确定我的问题是否有意义。
根据@DerfK的评论,我测试了一个开放中继(其中MAIL FROM
和RCPT TO
都不托管在此服务器上),这就是我得到的结果。出于某种原因,它接受了RCPT TO
,然后说再见后我输入了主题。这到底是好还是坏?
HELO test.mydomain.com
250 mail
MAIL FROM:<[email protected]>
250 2.1.0 Ok
RCPT TO:<[email protected]>
250 2.1.5 Ok
Subject: testing for open relay
221 2.7.0 Error: I can break rules, too. Goodbye.
Connection closed by foreign host.
答案1
你忘了数据!我正好遇到过这个问题。你必须先有命令数据,然后是主题。这样就解决了你的问题。如下所示:
HELO test.mydomain.com
250 mail
MAIL FROM:<[email protected]>
250 2.1.0 Ok
RCPT TO:<[email protected]>
250 2.1.5 Ok
Data
354 End data with <CR><LF>.<CR><LF>
subject: hello
i love you, oh my god! Why do i forget data
.
250 2.0.0 Ok: queued as E10601E09B1
quit
答案2
这是正常现象。其他 SMTP 服务器作为 SMTP 客户端连接到您的服务器,以将邮件发送到您的域。
为了解决这个欺骗问题,可以使用 SPF 和 DKIM。你应该检查一下。
答案3
关于您的第一种情况:SMTP 服务器接受其负责的帐户的邮件是正常的,基本上这就是它的工作方式,只需设置垃圾邮件检查软件,如 SpamAssassin(最广泛使用的免费解决方案,支持 SPF/DKIM 检查)。
由于您的问题可能出现在邮件服务器设置的早期阶段,这里有一些与处理虚假邮件相关的提示。
在大多数情况下,普通用户不会尝试伪造电子邮件。更常见的是,这是垃圾邮件发送者的行为,这就是为什么您可以根据邮件内容过滤此类邮件。更复杂的设置可以包括:
- RBL/DNSBL/RHSBL检查(可能会产生许多错误拒绝,因为许多甚至有效的邮件发件人都违反了一些 RFC)。
- 发件人地址验证(见地址验证自述文件对于 Postfix)。这也可能会拒绝一些有效的邮件(基本上还是由于配置错误,例如不允许带有空的邮件
MAIL FROM: <>
)。 - 灰名单就我个人经验而言,由于垃圾邮件发送者的不耐烦,这种方法可以拦截高达 90% 的垃圾邮件。但这会稍微减慢有效邮件的发送速度,但在大多数情况下这不是问题。
- SPF/DKIM 验证(尽管不是强制支持)。
- 各种自定义内容检查(包括已经提到的垃圾邮件检查器)。
如果我们谈论 Postfix,它提供了相当灵活的能力来限制哪些邮件是可以接受的。
关于您的更新:postfix 给您的错误消息只是表明您违反了 SMTP 规范(没有Subject:
SMTP 命令,请参阅SMTP 请求函数但Subject
您可能指的是标头是邮件正文的一部分,必须在DATA
SMTP 命令之后提供)。从您提供的记录中,我无法可靠地判断您的 postfix 是否用作开放中继,因为没有关于进行该 SMTP 会话的客户端的信息。
我记得,使用基本设置 postfix 可以中继邮件(这意味着您可以指定任何电子邮件地址,而不仅仅是 postfix 负责的域中的邮件):
- 本地主机
- 受信任的网络(通过 mynetworks 设置)
因此,如果您从运行 Postfix 的服务器远程登录 Postfix,那么可能没有问题。如果从 Internet 上的任何地方登录,那么情况就很糟糕。
你也可能需要仔细阅读SMTPD 继电器和门禁加深对 Postfix 中继访问主题的了解。
希望这可以帮助。
答案4
Postfix 必须接受来自它不负责的域的邮件。否则您只能收到本地电子邮件。
开放中继会接受来自不由它负责的域的邮件,并发往不由它负责的地址。下表中:Local 表示服务器负责的域;Remote 表示服务器不负责的域;None 表示发件人为空:
Source Destination Accepted
====== =========== ========
Local Local Yes
Local Remote Yes
Remote Local Yes
Remote Remote NO
None Local Yes
None Remote NO
有很多方法可以验证远程域,包括:标注、SPF、DMARC、白名单和黑名单。这些都依赖于 DNS。灰名单是一种确保发送邮件的是真实邮件服务器而不是垃圾邮件机器人的技术。垃圾邮件过滤器(如 Spamassassin)使用多种技术来验证邮件,通常包括对上述测试以及内容和标题进行评分。