Dovecot

讓roundcube與dovecot、postfix和letsencrypt一起工作

  • December 11, 2018

我正在嘗試從letsencrypt獲得roundcube、dovecot、postfix和證書,以便在Debian 9上協同工作。

我使用 apt-get 命令安裝了 roundcube。

嘗試登錄圓形立方體時,它需要很長時間才能顯示“正在載入…”,但隨後並沒有讓我登錄。螢幕上的錯誤顯示Connection to storage server failed。查看圓形立方體錯誤日誌,我收到以下錯誤:

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,我還應​​該在哪裡檢查以查明我的問題?

為了使它工作,我必須更改以下內容:

$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安裝目錄中。

TL;DR:您無法進行自定義埠配置和預期的標準客戶端設置工作

解釋

通過設置以下配置,您已將 dovecot 配置為在 IMAP 埠上使用 IMAPS 協議進行偵聽:

我的 10-master.conf 文件中還有以下內容:

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

=> 此塊禁用明文(和 TLS 可升級)“imap”協議(埠 = 0)並啟用“imap”埠,在埠 143 上強制初始 SSL/TLS 握手。

然而,埠 143 是 IMAP 協議的 IANA 分配的埠,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 與證書一起使用,而這些證書與主機名一起使用,因此您無法通過 localhost 進行 SSL 連接而不會出現一些證書問題。

建議:

雖然可以為每個應用程序調整埠,但許多系統(防火牆、預設設置等)依賴於每個應用程序都分配了一個特定埠這一事實。

使用 IMAPS 在埠 143 上使用 imap 伺服器是可能的,但您會遇到各種問題,具體取決於客戶端/網路。

就我個人而言,我建議不要修改 dovecot 的預設操作模式並刪除對10-master.conf.

要為 imap/pop 啟用安全通信,預設 dovecot 配置中唯一需要的更改是您所做的更改10-ssl.conf(ssl = required + cert/key)。

參考:https ://wiki.dovecot.org/SSL/DovecotConfiguration

此外,環回通道 (localhost) 上的 SSL 通信並不是很有用,這就是為什麼預設情況下,即使“ssl=required”或“disable_plaintext_auth”處於活動狀態,dovecot 也會考慮環回網路上的任何連接(ip 127.0.0.1 或客戶端 ip與伺服器 ip 相同)即使沒有 ssl/tls 也是安全的。

因此,如果您的 roundcube 服務與 dovecot 伺服器位於同一主機上,則配置只需:

$config['default_host'] = 'localhost'

引用自:https://serverfault.com/questions/915342