我已安装并配置了 postfix,以便只有经过身份验证的用户才能中继。如果我用 telnet 测试它,这似乎有效
root@mx3:/var/log# telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx3.xxx.ch ESMTP Postfix (Debian/GNU)
ehlo xxx.ch
250-mx3.zoee.ch
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH DIGEST-MD5 NTLM CRAM-MD5 LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 <[email protected]>: Relay access denied
但是我仍然可以使用 mailx 而无需身份验证。php 的邮件也是如此
echo "test" | mailx -s test [email protected]
May 16 10:58:21 mx3 postfix/pickup[10232]: D9634C00B1: uid=0
from=<root> May 16 10:58:21 mx3 postfix/cleanup[10273]: D9634C00B1:
message-id=<[email protected]> May 16 10:58:21 mx3
postfix/qmgr[10233]: D9634C00B1: from=<[email protected]>, size=275, nrcpt=1
(queue active) May 16 10:58:22 mx3 postfix/smtp[10274]: D9634C00B1:
to=<[email protected]>, relay=mx.sanc.ch[80.219.217.116]:25, delay=0.68,
delays=0.11/0.01/0.48/0.08, dsn=2.0.0, status=sent (250 2.0.0 Ok:
queued as BCA917F9A7) May 16 10:58:22 mx3 postfix/qmgr[10233]:
D9634C00B1: removed
这是我的配置:
myhostname = mx3.xxx.ch
mydomain = xxx.ch
myorigin = $mydomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mx3.xxx.ch, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_sasl_authenticated,reject_unauth_destination,check_relay_domains
知道如何阻止人们在未经身份验证的情况下发送电子邮件吗?
答案1
您已将服务器设置为在使用 SMTP 发送邮件时需要身份验证。但是,当您使用 mailx 时,您将绕过 SMTP 并直接注入邮件。php 脚本也是如此 - 它不使用 SMTP,而是使用本地计算机上的本地邮件代理。通常您确实希望该代理能够发送邮件,因为它是 cron 等程序用来发送有关服务器上发生的问题的信息的程序。
据我所知,您不能要求使用 sendmail/postdrop/mailx 发送的邮件进行身份验证,但是你能使用 来限制谁可以使用它authorized_submit_users
。默认是“任何人”,你可以用用户名列表或查找来替换它。因此,如果你想让 root 能够发送邮件(当然建议这样做!),但其他人则不能,那么该行将是
authorized_submit_users = root
更多信息请访问Postfix 文档