我正在使用 Dovecot 获取 Imap 对我的邮件服务器的访问权限(在 Raspbian 上)。我正在使用系统用户,并且能够成功测试登录(doveadm auth test ...
)。但我无法通过 telnet 获取身份验证选项:
sudo telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mail.mydomain.org ESMTP Postfix
sudo telnet localhost 143
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
我缺少[AUTH=PLAIN]
状态,在维基百科。我没有收到有关 systemctl status 的任何错误。我不知道还能尝试什么!您能帮助我吗?
谢谢!!
我的 dovecot 配置dovecot -n
# 2.2.27 (c0f36b0): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.16 (fed8554)
# OS: Linux 4.19.42-v7+ armv7l Debian 9.9
auth_debug_passwords = yes
auth_mechanisms = plain login
auth_username_format = %Ln
auth_verbose = yes
auth_verbose_passwords = yes
debug_log_path = /etc/dovecot/log/debug.txt
info_log_path = /etc/dovecot/log/info.txt
mail_debug = yes
mail_location = mbox:~/mail:INBOX=/var/mail/%u
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext
passdb {
driver = shadow
}
plugin {
sieve = file:~/sieve;active=~/.dovecot.sieve
}
protocols = imap lmtp sieve
service auth-worker {
name = auth-worker
}
service {
unix_listener {
group = postfix
mode = 0660
user = postfix
path = /var/spool/postfix/private/auth
}
name = auth
}
service {
inet_listener {
port = 143
name = imap
}
inet_listener {
port = 993
ssl = yes
name = imaps
}
name = imap-login
}
service {
unix_listener {
group = postfix
mode = 0600
user = postfix
path = /var/spool/postfix/private/dovecot-lmtp
}
name = lmtp
}
ssl_cert = /etc/letsencrypt/live/mail.mydomain.org/cert.pem
ssl_key = # hidden, use -P to show it
userdb {
driver = passwd
}
verbose_ssl = yes
protocol lmtp {
mail_plugins = quota sieve
postmaster_address = [email protected]
}
protocol lda {
...
}
protocol imap {
...
}
protocol sieve {
...
}
我的 Postfix/etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
myhostname = mail.mydomain.org
mydomain = mydomain.org
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
#relay_domains =
#home_mailbox = Maildir/
inet_protocols = ipv4, ipv6
# TLS
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_tls_security_level = yes
smtpd_tls_security_level = may
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.mydomain.org/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.mydomain.org/privkey.pem
# Authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_local_domain = $mydomain
# when mail location = maildir:~/.maildir
mailbox_transport = lmtp:unix:private/dovecot-lmtp
# Virtual user scenario
virtual_transport = lmtp:unix:private/dovecot-lmtp
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
readme_directory = no
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2
我的 Postfix/etc/postfix/master.cf
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
#smtp inet n - y - 1 postscreen
#smtpd pass - - y - - smtpd
#dnsblog unix - - y - 0 dnsblog
#tlsproxy unix - - y - 0 tlsproxy
submission inet n - y - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
网络状态sudo netstat -tulpn | grep LISTEN
:
tcp 0 0 0.0.0.0:4190 0.0.0.0:* LISTEN 7055/dovecot
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 7055/dovecot
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 6999/master
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 7055/dovecot
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 6999/master
tcp6 0 0 :::443 :::* LISTEN 657/apache2
tcp6 0 0 :::4190 :::* LISTEN 7055/dovecot
tcp6 0 0 :::993 :::* LISTEN 7055/dovecot
tcp6 0 0 :::587 :::* LISTEN 6999/master
tcp6 0 0 :::143 :::* LISTEN 7055/dovecot
tcp6 0 0 :::80 :::* LISTEN 657/apache2
tcp6 0 0 :::25 :::* LISTEN 6999/master
编辑1:
我收到此命令错误openssl s_client -connect localhost:imaps
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 198 bytes
Verification: OK
---
但事实证明我忘记了and路径<
之前的内容。ssl_cert
ssl_key
答案1
按设计工作。
smtpd_sasl_security_options=noplaintext
这正是postfix 和disable_plaintext_auth=yes
dovecot的目的。这些选项可防止(提供)通过不安全通道进行身份验证。您可以通过启动安全 SMTP 连接来验证您的服务器是否通过安全通道提供身份验证:
$ (echo EHLO localhost; sleep 1) | openssl s_client -starttls smtp -connect localhost:submission
..
220 example.com ESMTP Postfix
..
250-AUTH PLAIN LOGIN
对于安全的 IMAP 连接也是一样:
$ sleep 1 | openssl s_client -connect localhost:imaps
..
* OK [CAPABILITY IMAP4rev1 .. AUTH=PLAIN AUTH=LOGIN]
禁用纯文本身份验证绝对没有错。只需将所有邮件客户端配置为通过 TLS 访问邮件即可。您甚至可能想要禁用纯文本 IMAP 以防止错误。