讓roundcube與dovecot、postfix和letsencrypt一起工作
我正在嘗試從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'