Я работаю с установкой Postfix / Dovecot / Roundcube, стремясь создать виртуальную почтовую систему пользователя, которая может отправлять почту через Интернет, как описано в документации. Вот.
Вроде все работает хорошо; Dovecote не показывает проблем, я могу подключиться по telnet ко всем своим портам; однако всякий раз, когда я пытаюсь отправить почту через Roundcube, я получаю сообщение об ошибке:
SMTP Error (220): Authentication failed.
И из логов:
[17-Jan-2015 05:27:31 +0000]: SMTP Error: SMTP error: Authentication failure: STARTTLS failed (Code: ) in /usr/share/webapps/roundcubemail/program/lib/Roundcube/rcube.php on line 1505 (POST /roundcube/?_task=mail&_unlock=loading1421472451594&_lang=en_US&_framed=1?_task=mail&_action=send)
Я подумал, поскольку Postfix отвечает за SMTP, он должен быть виновником. В моих журналах Postfix я вижу:
Jan 16 21:14:35 steelhorse postfix/smtpd[18426]: disconnect from localhost.localdomain[127.0.0.1]
Jan 16 21:14:35 steelhorse postfix/smtpd[18426]: lost connection after STARTTLS from localhost.localdomain[127.0.0.1]
Jan 16 21:14:35 steelhorse postfix/smtpd[18426]: warning: TLS library problem: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1293:SSL alert number
Jan 16 21:14:35 steelhorse postfix/smtpd[18426]: SSL_accept error from localhost.localdomain[127.0.0.1]: 0
Мой сертификат SSL подписан с localhost в качестве CN, поскольку это устранило другую проблему, с которой я столкнулся. Postfix был установлен с параметром $ myhostname как mail. [Mydomain], а с помощью Afraid DynDNS я установил запись A для mail.mydomain, а также запись MX, которая имеет вид 1: mail. [Mydomain]. Я попытался установить все это только на [mydomain], но это не сработало. Сеансы Telnet выглядят так:
telnet [mydomain] 587
Trying [myip]...
Connected to [mydomain].
Escape character is '^]'.
220 [mydomain] ESMTP Postfix
ehlo [mydomain]
250-[mydomain]
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
Мой Postfix main.cf (не включая большинство строк по умолчанию):
#soft_bounce = no
queue_directory = /var/spool/postfix
command_directory = /usr/bin
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
#default_privs = nobody
myhostname = [mydomain]
#myhostname = virtual.domain.tld
mydomain = [mydomain]
#myorigin = $myhostname
myorigin = $mydomain
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#proxy_interfaces =
#proxy_interfaces = 1.2.3.4
#mydestination = $myhostname, localhost.$mydomain, localhost
...
#local_recipient_maps = unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
#mynetworks_style = class
#mynetworks_style = subnet
mynetworks_style = host
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
#relay_domains = $mydestination
#relayhost = $mydomain
...
relay_domains = *
virtual_alias_maps = proxy:mysql:/etc/postfix/virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/virtual_mailbox_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/virtual_mailbox_maps.cf
virtual_mailbox_base = /home/vmail
virtual_mailbox_limit = 512000000
virtual_minimum_uid = 5000
virtual_transport = virtual
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
local_transport = virtual
local_recipient_maps = $virtual_mailbox_maps
transport_maps = hash:/etc/postfix/transport
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/private/server.crt
smtpd_tls_key_file = /etc/ssl/private/server.key
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes
smtpd_tls_loglevel = 1
Я также попытался установить для Roundcube smtp_conn_options значение null в соответствии с Вот. Я действительно не уверен, что проблема заключается в записях DNS, сертификате SSL или чем-то еще. Любая помощь будет оценена!
ОБНОВИТЬ
После установки моего Roundcube conf.inc.php на verify_peer (_name) = false
/* Local configuration for Roundcube Webmail */
$config['db_dsnw'] = 'mysql://roundcube_user:steelcube@localhost/roundcube_db';
$config['default_host'] = 'ssl://localhost/';
$config['default_port'] = 993;
$config['smtp_server'] = 'tls://localhost/';
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['smtp_auth_type'] = 'LOGIN';
$config['smtp_conn_options'] = null;
$config['imap_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'verfify_peer_name' => false,
),
);
$config['smtp_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
),
);
$config['smtp_port'] = 587;
$config['support_url'] = '';
$config['des_key'] = '[secret]';
$config['plugins'] = array('archive', 'zipdownload');
$config['mime_types'] = '/etc/httpd/conf/mime.types';
Это дает мне новую ошибку SMTP Error (535): Authentication failed
при отправке электронной почты. Здесь содержимое ошибки roundcube
[18-Jan-2015 02:58:06 UTC] PHP Deprecated: Non-static method PEAR::raiseError() should not be called statically, assuming $this from incompatible context in /usr/share/webapps/roundcubemail/program/lib/Net/SMTP.php on line 371
[18-Jan-2015 02:58:06 UTC] PHP Deprecated: Non-static method PEAR::raiseError() should not be called statically, assuming $this from incompatible context in /usr/share/webapps//roundcubemail/program/lib/Net/SMTP.php on line 371
[18-Jan-2015 02:58:06 +0000]: SMTP Error: SMTP error: Failed to set sender /roundcubemail/program/lib/Net/SMTP.php on line 371'[username]@[mydomain]' in /usr/share/webapps/roundcubemail/program/lib/Roundcube/rcube.php on line 1505 (POST /roundcube/?_task=mail&_unlock=loading1421549886598&_lang=en_US&_framed=1?_task=mail&_action=send)
И запись в почтовом журнале
Jan 18 20:18:21 steelhorse postfix/smtpd[1942]: connect from localhost.localdomain[127.0.0.1]
Jan 18 20:18:21 steelhorse postfix/smtpd[1942]: Anonymous TLS connection established from localhost.localdomain[127.0.0.1]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128
Jan 18 20:18:21 steelhorse postfix/smtpd[1942]: warning: localhost.localdomain[127.0.0.1]: SASL LOGIN authentication failed: Invalid authentication mechanism
Jan 18 20:18:21 steelhorse postfix/smtpd[1942]: disconnect from localhost.localdomain[127.0.0.1]
По запросу в болтать, это результат dovecot -a | grep auth_mechanism
auth_mechanisms = plain
Хорошо, похоже, что в вашей конфигурации postfix, roundcube и dovecot слишком много несоответствий. Давайте разберемся по порядку.
Эта строка журнала
warning: TLS library problem: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1293:SSL alert number
указывает, что PHP не может проверить сертификат узла из-за неизвестного CA. Это точная дублирующая проблема с этим вопросом: Roundcube и Postfix SMTP: подпрограммы SSL: SSL3_READ_BYTES: tlsv1 alert unknown ca: s3_pkt.c. И из вопроса, который вы уже решаете, добавляя эти строки в roundcube
$config['smtp_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
),
);
Для этого мы должны посмотреть журналы postfix и roundcube, чтобы определить проблему. Настоящее сообщение было записано в файл журнала postfix
Jan 18 20:18:21 steelhorse postfix/smtpd[1942]: warning: localhost.localdomain[127.0.0.1]: SASL LOGIN authentication failed: Invalid authentication mechanism
Теперь, поскольку механизм postfix SASL был предоставлен dovecot, вы должны проверить механизм, который предлагает dovecot, запустив dovecot -a | grep auth_mechanism
.
Посмотрев на roundcube $config['smtp_auth_type']
и голубятня auth_mechanisms
config, вы можете увидеть несоответствие между этими двумя. Dovecot предлагает только ОБЫЧНЫЙ механизм. Но roundcube был настроен на использование механизма LOGIN.
Решение может быть одним или обоими
Предлагая механизм LOGIN со стороны голубятни, добавив
auth_mechanisms = plain login
в конфигурации dovecot.
Установите обычную учетную запись на стороне круглого куба изменив параметр на
$config['smtp_auth_type'] = 'PLAIN';