在Ubuntu上安装Dovecot IMAP 服务器和开启TLS加密

邮局服务器基础  ·  2025-02-28

要使用第三方客户端如网易邮箱大师、Thunderbird等等,我们需要在postfix中启用submission服务,要在第三方客户端接受邮件,我们需要安装一个开源IMAP服务器(Dovecot),同时为了加密通信,我们需要一个TLS证书

在防火墙上打开端口

Ubuntu 默认不开启防火墙,如果你已经开启了UFW防火墙,那么你需要运行以下命令去打开跟email有关的端口

sudo ufw allow 80,443,587,465,143,993/tcp

使用 TLS 证书保护电子邮件服务器流量

当我们配置桌面电子邮件客户端时,应启用 TLS 加密以防止黑客窥探我们的电子邮件。我们可以很容易地从 Let's Encrypt 获得免费的 TLS 证书。从默认软件存储库在 Ubuntu 服务器上安装 Let's Encrypt 客户端(certbot),请发出以下命令。

sudo apt update
sudo apt dist-upgrade
sudo apt install certbot

如果你使用Nginx 服务器, 安装Nginx 插件(如果你没有安装,下面的命令会安装Nginx服务器)

sudo apt install python3-certbot-nginx

在Nginx服务器上获取TLS证书

在安装TLS证书之前你需要创建一个Nginx虚拟主机 mail.your-domain.com

sudo vi /etc/nginx/conf.d/mail.your-domain.com.conf

粘贴下面的内容到配置文件中。

server {
      listen 80;
      listen [::]:80;
      server_name mail.your-domain.com;

      root /usr/share/nginx/html/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

保存并关闭。

重新加载Nginx以使配置生效

sudo systemctl reload nginx

现在你就可以通过Nginx 插件获取TLS证书,运行下面命令:

sudo certbot certonly -a nginx --agree-tos --no-eff-email --staple-ocsp --email [email protected] -d mail.your-domain.com

参数解释:

  • -a nginx: 使用Nginx 插件进行权限验证
  • --agree-tos: 同意服务条款
  • --no-eff-email: 不接收来自 EFF基金的邮件
  • --staple-ocsp: 启用 OCSP 装订
  • --email: 可以输入你的个人邮箱地址,它会将一个些重要信息的通知给你
  • -d: 你邮件服务器的主机名

在Postfix 上启用 Submission 服务

在第三方邮件客户端(网易邮箱大师,thunderbird等等)发送邮件时,我们需要在Postfix上启用submission服务,编辑 master.cf 文件

sudo vi /etc/postfix/master.cf

默认submission 部分已经被注释掉了,你可以直接复制下面的内容

submission     inet     n    -    y    -    -    smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

添加上面的配置信息后,我们就可以在电子邮件客户端通过TLS加密方式提交,submission 守护进程 监听的是TCP 587 端口。STARTTLS 用于加密电子邮件客户端与提交守护进程之间的通信。

现在我们需要在postfix 配置文件中指定TLS证书和私钥的位置。

sudo vi /etc/postfix/main.cf

编辑下面TLS参数部分,将 mail.your-domain.com替换为你主机名

smtpd_tls_cert_file=/etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.your-domain.com/privkey.pem
smtpd_tls_security_level=may 
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

#Enable TLS Encryption when Postfix sends outgoing emails
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

#Enforce TLSv1.3 or TLSv1.2
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

你的 Let’s Encrypt 证书和私钥保存在/etc/letsencrypt/live/mail.your-domain.com/目录下。

保存并关闭后,需要再次重启Postfix。

sudo systemctl restart postfix

安装Dovecot IMAP 服务

在 Ubuntu 服务器上安装 Dovecot 核心软件包和 IMAP 守护进程软件包,执行以下命令

sudo apt install dovecot-core dovecot-imapd

开启 IMAP 协议

编辑配置文件

sudo vi /etc/dovecot/dovecot.conf

添加下面的配置

protocols = imap

保存并关闭。

配置邮箱位置

默认Postfix 和 Dovecot 使用mbox 格式保存邮件,每个用户的邮件会保存在 /var/mail/username。但是现在绝大部分都是使用Maildir 格式保存邮件。所以我们需要修改配置文件 /etc/dovecot/conf.d/10-mail.conf

sudo vi /etc/dovecot/conf.d/10-mail.conf

默认的配置是使用mbox 格式

mail_location = mbox:~/mail:INBOX=/var/mail/%u

现在我们需要修改它为 Maildir

mail_location = maildir:~/Maildir

同时我们需要在文件中添加以下行。(在 Ubuntu 18.04 和 20.04 中,这一行已经在文件中。)

mail_privileged_group = mail

保存并关闭。然后添加 dovecot 到mail 组中,这样可以使Dovecot读取收件箱

sudo adduser dovecot mail

虽然我们配置了Dovecot 使用Maildir格式保存邮件,但是默认Postfix使用内置的本地投递代理(LDA)来移动入站邮件并将邮件保存到收件箱,发件箱,等等,最后它将会保存为mbox格式。

所以我们需要配置 Postfix,将传入的电子邮件传递给 Dovecot。通过 LMTP 协议(它是 SMTP 的简化版本),因此传入的电子邮件将由 Dovecot 以Maildir格式保存。LMTP(本地邮件传输协议)允许构建一个高度可扩展且可靠的邮件系统。它还允许我们使用sieve插件将入站消息过滤到不同的文件夹。

安装 Dovecot LMTP 服务

sudo apt install dovecot-lmtpd

编辑 Dovecot 配置文件

sudo vi /etc/dovecot/dovecot.conf

添加lmtp 协议

protocols = imap lmtp

然后编辑Dovecot 10-master.conf 文件

sudo vi /etc/dovecot/conf.d/10-master.conf

改变 lmtp 服务定义

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}

然后编辑Postfix 的配置文件

sudo vi /etc/postfix/main.cf

添加下面两行,第一行是告诉Postfix 入站邮件是通过 dovecot-lmtp服务,第二行禁用 smtputf8,因为Dovecot-lmtp 不支持

mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no

最后保存并关闭。

配置身份验证机制

编辑验证配置文件

sudo vi /etc/dovecot/conf.d/10-auth.conf

取消下面的注释以使用SSL/TLS 加密

disable_plaintext_auth = yes

然后找到下面这行

#auth_username_format = %Lu

取消注释并更改它。默认情况下,当 Dovecot 尝试为用户查找或发送邮件时,它会使用完整的电子邮件地址。由于在这一部分中,我们仅设置了规范的邮箱用户(使用 OS 用户作为邮箱用户),因此 Dovecot 无法找到完整域格式([email protected] )的邮箱用户,因此我们需要设置auth_username_format = %n为删除域部分,然后 Dovecot 应该能够找到邮箱用户。这也使我们能够使用完整的电子邮件地址([email protected] )进行登录。

auth_username_format = %n

然后找到下面这行

auth_mechanisms = plain

增加LOGIN 身份验证机制,以支持较旧的电子邮件客户端。

auth_mechanisms = plain login

保存并关闭。

配置 SSL/TLS 加密

编辑 SSL/TLS 配置文件

sudo vi /etc/dovecot/conf.d/10-ssl.conf

将ssl=yes 改为ssl=required

sl = required

然后找到下面这两行

ssl_cert = </etc/dovecot/private/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.key

将它改为你Let's Encrypt TLS 证书和密钥保存的地方。

ssl_cert = </etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.your-domain.com/privkey.pem

添加下面配置,为了禁用不安全的协议SSLv3, TLSv1 and TLSv1.1

ssl_min_protocol = TLSv1.2

如果您正在使用 Dovecot 版本2.2.x(如在 Ubuntu 18.04 中),您应该添加以下行来禁用不安全的 TLS。

ssl_protocols = !SSLv3 !TLSv1 !TLSv1.1

保存并关闭。

在 Ubuntu 22.04 上禁用 OpenSSL 中的 FIPS 提供程序

Ubuntu 22.04附带 OpenSSL 3.0,它具有 FIPS 提供程序。但是,它无法与 Dovecot 配合使用。我们需要禁用 FIPS 提供程序。

sudo vi /etc/ssl/openssl.cnf

找到下面行

providers = provider_sect

给它添加注释

#providers = provider_sect

保存并关闭。

配置 SASL身份验证

编辑下面文件

sudo vi /etc/dovecot/conf.d/10-master.conf

将service auth中的部分更改为以下内容,以便 Postfix 可以找到 Dovecot 身份验证服务器。请注意语法。每个左括号都应以右括号结尾。

service auth {
    unix_listener /var/spool/postfix/private/auth {
      mode = 0660
      user = postfix
      group = postfix
    }
}

保存并关闭。最后重启Postfix 和Dovecot。

sudo systemctl restart postfix dovecot

Dovecot 将监听端口 143 (IMAP) 和 993 (IMAPS),你可以运行下面命令进行查看

sudo ss -lnpt | grep dovecot

现在你们就能使用SMTP在第三方客户端上进行登录了(账号密码是你们服务器的账号密码,不要用root账号,因为Dovecot不允许)。

【SMTP】

host: mail.your-domain.com
username: [email protected]
Password: your-password
SSL: STARTTLS
Authentication:  Normal password
port: 587

【IMAP】

host: mail.your-domain.com
username: [email protected]
Password: your-password
SSL: STARTTLS
Authentication:  Normal password
port: 143
 邮局
评论
火箭邮社 - RS. All Rights Reserved. Theme Jasmine by Kent Liao.