Назад | Перейти на главную страницу

Получение roundcube для работы с dovecot, postfix и letsencrypt

Я пытаюсь получить roundcube, dovecot, postfix и сертификаты от letsencrypt для совместной работы на Debian 9.

Я установил roundcube с помощью команды apt-get.

Когда я пытаюсь войти в roundcube, в течение длительного времени появляется сообщение «Загрузка ...», но затем я не регистрируюсь. На экране отображается сообщение об ошибке Connection to storage server failed. Просматривая журналы ошибок roundcube, я получаю следующую ошибку:

IMAP Error: Login failed for user@example.com from 192.0.2.10. Empty startup greeting (localhost:143) in /usr/share/roundcube/program/lib/Roundcube/rcube_imap.php on line 193 (POST /?_task=login&_action=login)

Бег /etc/init.d/dovecot status Получаю следующее:

dovecot[29431]: imap-login: Disconnected (no auth attempts in 60 secs): user=<>, rip=::1, lip=::1, TLS handshaking: SSL_accept() syscall failed: Success, session=<azgn6uptGtgAAAAAAAAAAAAAAAAAAAAB>

В моем config.inc.php есть следующее:

$config['default_host'] = 'tls://localhost';

и

$config['imap_conn_options'] = array(
   'ssl'         => array(
     'verify_peer'  => false,
     'verify_peer_name' => false,
    ),
);

$config['username_domain'] = '%d';

и следующее, указанное в моем файле dovecot 10-ssl.conf:

ssl = required

ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem

В моем файле 10-master.conf также есть следующее:

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 143
    ssl = yes
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

Если я сделаю telnet localhost 143 Я получил:

Trying ::1...
Connected to localhost.
Escape character is '^]'.

Я не уверен, должен ли я получать что-то большее, чем это.

Честно говоря, я не уверен, в чем моя проблема и что еще нужно изучить. Почему я не могу войти в Roundcube и где еще я должен проверить, чтобы определить мою проблему?

TL; DR: вы не можете настроить индивидуальную конфигурацию порта и ожидаемые стандартные настройки клиента для работы

Объяснения

Установив следующую конфигурацию, вы настроили dovecot для прослушивания с использованием протокола IMAPS на порту IMAP:

В моем файле 10-master.conf также есть следующее:

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 143
    ssl = yes
  }
}

=> этот блок отключает открытый текст (и обновляемый TLS) протокол imap (порт = 0) и включает порт imaps с принудительным начальным подтверждением SSL / TLS на порту 143.

Однако порт 143 является портом, назначенным IANA для протокола IMAP, IMAPS должен быть на 993 (см. /etc/services для ссылок на порты).

Должно быть возможно сохранить эту конфигурацию и сделать dovecot счастливой, но вам нужно будет настроить все конфигурации своих клиентов, поскольку этого никто не ожидает, настройки по умолчанию для порта IMAP (143) - разрешить обмен данными в открытом виде и дополнительное обновление TLS при объявлении.

Чтобы roundcube работал с этим, вам понадобится что-то вроде этого:

$config['default_host'] = 'ssl://fqdn.of.server:143'

или

$config['default_host'] = 'tls://fqdn.of.server:143'

Это проинструктирует roundcube, что ваша служба imap ожидает предварительно зашифрованного соединения через стандартный порт обычного текста (143).

Что касается telnet localhost 143 ну, вы не можете использовать это для проверки SSL-соединения, вам понадобится что-то вроде openssl s_client -servername fqdn.of.server -connect localhost:143

Обратите внимание, что SSL / TLS работает с сертификатами, а эти сертификаты работают с именами хостов, поэтому вы не можете установить SSL-соединение через localhost без некоторых проблем с сертификатами.

Рекомендации:

Хотя можно настроить порт для каждого приложения, многие системы (брандмауэры, настройки по умолчанию и т. Д.) Полагаются на тот факт, что каждому приложению был назначен определенный порт.

Возможна работа с сервером imap с использованием IMAPS на порту 143, но вы столкнетесь с различными проблемами в зависимости от клиентов / сетей.

Лично я бы рекомендовал не изменять режим работы dovecot по умолчанию и удалять любые настройки в конфигурации inet listener по умолчанию в 10-master.conf.

Чтобы включить безопасную связь для imap / pop, единственные необходимые изменения в конфигурации dovecot по умолчанию - это те, которые вы внесли 10-ssl.conf (ssl = требуется + сертификат / ключ).

Ссылка: https://wiki.dovecot.org/SSL/DovecotConfiguration

Кроме того, связь SSL по каналам обратной связи (localhost) не очень полезна, поэтому по умолчанию, даже при активном «ssl = required» или «disable_plaintext_auth», dovecot учитывает любое соединение в сети loopback (ip 127.0.0.1 или ip клиента идентичен IP-адресу сервера) для обеспечения безопасности даже без ssl / tls.

Итак, если ваша служба roundcube находится на том же хосте, что и ваш сервер dovecot, конфигурация должна быть только такой:

$config['default_host'] = 'localhost'

Чтобы это заработало, мне пришлось изменить следующее:

$config['default_host'] = 'tls://localhost';

к

$config['default_host'] = 'imaps://localhost';

Однако я не уверен, почему это работает, поскольку это нигде не задокументировано.

Если это поможет кому-то другому, это остальная часть моей конфигурации:

/etc/dovecot/conf.d/10-master.conf:

service imap-login {
  inet_listener imap {
    #port = 143
    port = 0
  }
  inet_listener imaps {
    #port = 993
    #ssl = yes
  }

}

service pop3-login {
  inet_listener pop3 {
    #port = 110
    port = 0
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
  }
}

В моем roundcube / config / config.inc.php у меня есть:

$config['default_host'] = 'imaps://localhost';
$config['username_domain'] = '%d';


$config['imap_conn_options'] = array(
     'ssl' => array(
       'verify_peer'       => true,
       'allow_self_signed' => false,
       'ssl_cert' => '/etc/letsencrypt/live/example.com/fullchain.pem',
       'ssl_key'  => '/etc/letsencrypt/live/example.com/privkey.pem',
       'ciphers' => 'TLSv1+HIGH:!aNull:@STRENGTH',
       'peer_name'         => 'mail.example.com',
     ),
);

$config['smtp_conn_options'] = array(
     'ssl' => array(
       'verify_peer'       => true,
       'allow_self_signed' => false,
       'ssl_cert' => '/etc/letsencrypt/live/example.com/fullchain.pem',
       'ssl_key'  => '/etc/letsencrypt/live/example.com/privkey.pem',
       'ciphers' => 'TLSv1+HIGH:!aNull:@STRENGTH',
       'peer_name'         => 'mail.example.com',
     ),
);

Чтобы помочь диагностировать это, я также включил ведение журнала в моем файле roundcube / config / config.inc.php:

// Log successful/failed logins to <log_dir>/userlogins or to syslog
$config['log_logins'] = true;

// Log session authentication errors to <log_dir>/session or to syslog
$config['log_session'] = true;

// Log SQL queries to <log_dir>/sql or to syslog
$config['sql_debug'] = true;

// Log IMAP conversation to <log_dir>/imap or to syslog
$config['imap_debug'] = true;

// Log LDAP conversation to <log_dir>/ldap or to syslog
$config['ldap_debug'] = true;

// Log SMTP conversation to <log_dir>/smtp or to syslog
$config['smtp_debug'] = true;

Журналы были сохранены в roundcube/logs каталог установки.