如何开启 SMTP 身份验证?
当我尝试从我的邮件服务器中注册的电子邮件发送电子邮件时([电子邮件保护]) 到我的 icloud 电子邮件 (@icloud.com) 我收到以下回复:
来自 IP (my.ip.rigth.here) 的邮件因列入 Spamhaus
PBL 而被拒绝。有关详细信息,请参阅
http://www.spamhaus.org/query/bl?ip=my.ip.rigth.here
当我访问该链接时,我看到的是红色的内容:
来自 IP(my.ip.rigth.here)的邮件由于在 Spamhaus 项目的 Spamhaus 出站电子邮件政策中列出了此 IP 范围而被拒绝:
Spamhaus 已将此 IP 地址范围确定为不符合我们允许向 PBL 用户发送未经身份验证的“直接到 mx”电子邮件的 IP 地址政策。重要提示:如果您正在使用任何普通电子邮件软件(例如 Outlook、Entourage、Thunderbird、Apple Mail 等),并且在尝试发送电子邮件时被此 Spamhaus PBL 列表阻止,原因很简单,您需要在电子邮件程序设置中打开“SMTP 身份验证”。如需有关 SMTP 身份验证的帮助或快速修复此问题的方法,请单击此处。
另请参阅:(此处链接有关 Spamhaus PBL)
我如何打开 SMTP 身份验证?我完全按照本教程进行操作:https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql
我尝试关闭 ISP 路由器上的 25 端口,但这样一来,我就无法接收邮件,除非是来自接收该邮件的同一邮箱([电子邮件保护])
在我的 MAC 邮件客户端中,我看到仅使用端口 587 用于 SMTP 和 993 用于 IMAP。
我的问题是我如何才能启用 SMTP 身份验证?或者绕过 Spamhaus?
答案1
不久前,我写了一篇关于 Postfix 上的 SMTP 身份验证的教程。源代码可以在http://blog.mtak.nl/2013/04/simple-smtp-auth-on-postfix/。
TLS
每当您通过网络发送密码时,它都应该被加密。将以下参数添加到您的main.cf
以启用 TLS:
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
当然,您需要确保 cert_file 选项指向有效证书。默认的 snakeoil 证书对于大多数用户来说应该足够安全,但您始终可以购买一些 CA 签名的证书。
您可以使用 OpenSSL 实用程序测试 TLS
$ openssl s_client -starttls smtp -crlf -connect 127.0.0.1:25
CONNECTED(00000003)
[output truncated]
SSL handshake has read 1646 bytes and written 354 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 17C511889EDC11109C9F71C16F7F70AB9B8868129C4B796F96B2F0A68E581A8E
Session-ID-ctx:
Master-Key: E391BF9B8940CD36D5E98BC5FAF05860E86AAE4667D5E8E87081AD4A98A7EA91F770790C053A2ECCA42AD2937AD83F90
Key-Arg : None
Start Time: 1365632805
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
250 DSN
quit
221 2.0.0 Bye
closed
$
SAS 连接层
SMTP 不具备任何内置身份验证功能,但可以使用 SASL 框架进行扩展。SASL 在 RFC4422 中进行了描述。为简单起见,我们将使用 PAM 作为身份验证后端。有关身份验证后端的更多信息,请参阅 saslauthd(8)。
要设置 SASL:安装 SASL 所需的所有软件包:
$ sudo apt-get install libsasl2-2 sasl2-bin libsasl2-modules
编辑/etc/default/saslauthd
。您可以保留默认设置,但请确保以下设置匹配:
[...]
START=yes
MECHANISMS="pam"
THREADS=1
[...]
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
创造/etc/postfix/sasl/smtpd.conf
:
saslauthd_version: 2
pwcheck_method: saslauthd
mech_list: plain login
调整/etc/postfix/main.cf
:
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
check_relay_domains
将 postfix 用户添加到 sasl Unix 组:
$ adduser postfix sasl
Start the SASL daemon and restart Postfix:
$ /etc/init.d/saslauthd start
$ /etc/init.d/postfix restart
您可以通过创建密码的 base64 哈希并使用它来登录来测试 SMTP AUTH 功能:
$ printf '\0%s\0%s' 'username' 'password' | openssl base64
AHVzZXJuYW1lAHBhc3N3b3Jk
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.gallische-dorp.net ESMTP Postfix
EHLO localhost
250-mail.gallische-dorp.net
250-PIPELINING
250-SIZE 20480000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk
235 2.7.0 Authentication successful
quit
221 2.0.0 Bye
Connection closed by foreign host.