Dovecot 2.3.16 Ubuntu 22.04 安装指南

在 Ubuntu 22.04 上从零通过 apt 安装 Dovecot 2.3.16 邮件服务器,完成 Maildir 存储配置、systemd 托管、IMAP/POP3 四端口验证与 openssl s_client 真实登录,并覆盖离线 deb 安装、版本锁定与卸载清理的完整闭环。

Dovecot2026/10/17

Dovecot 2.3.16 Ubuntu 22.04 安装指南

目标:在 Ubuntu 22.04 服务器上从零安装并运行 Dovecot IMAP/POP3 邮件服务器,完成 Maildir 存储配置、测试用户创建、systemd 托管、IMAP/POP3 端口验证与真实 TLS 登录测试。全部命令与回显已在 Ubuntu 22.04.5 LTS(x86_64,Dovecot 2.3.16)实测通过。

一、环境信息

本篇所有命令均在以下环境中逐条实测,读者复现时应保持相近版本:

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64,内核 6.8.0-138-generic)
  • 软件版本:Dovecot 2.3.16 (7e2e900c1a),包名 1:2.3.16+dfsg1-3ubuntu2.9,Pigeonhole 0.5.16
  • 服务器主机名:mail.example.com
  • 监听端口:143(IMAP)、993(IMAPS)、110(POP3)、995(POP3S)
  • 配置目录:/etc/dovecot/(主配置 /etc/dovecot/dovecot.conf,分片配置 /etc/dovecot/conf.d/*.conf)
  • 邮件存储:maildir:~/Maildir(用户家目录下 Maildir)
  • 服务管理:systemd(dovecot.service)

二、软件概览与版本选型

2.1 Dovecot 是什么

Dovecot 是一款以安全著称的开源 IMAP/POP3 邮件服务器,采用 C 语言编写,最早发布于 2002 年。它的定位是「邮件投递之后」的服务:由 Postfix、Exim 等 MTA 把邮件送进用户邮箱,Dovecot 负责让用户通过 IMAP/POP3 协议读取这些邮件。Dovecot 同时提供 LDA/LMTP 投递代理、Sieve 过滤(Pigeonhole)、配额管理、加密同步(dsync)等配套能力,是 Linux 邮件系统里与 Postfix 搭配使用最广泛的组合。

先在本机确认 apt 仓库可提供的版本:

apt-cache policy dovecot-core

实测输出:

dovecot-core:
  Installed: (none)
  Candidate: 1:2.3.16+dfsg1-3ubuntu2.9
  Version table:

💡 说明:Ubuntu 22.04(jammy)仓库自带 Dovecot 2.3.16,这是 2.3 系列的稳定版本,+dfsg1 是 Debian/Ubuntu 对源码包的再打包标记,3ubuntu2.9 是安全与缺陷修补号。直接使用仓库版本即可,无需第三方源。

2.2 安装包组件说明

Dovecot 在 Ubuntu 中按功能拆分为多个包,按需安装:

包名作用本篇是否安装
dovecot-core核心服务与配置(含 POP3 支持)是
dovecot-imapdIMAP 协议支持(143/993)是
dovecot-pop3dPOP3 协议支持(110/995)是
dovecot-lmtpdLMTP 投递代理(供 Postfix 投递用)否(见《Dovecot 2.3.16 快速入门与 Postfix 集成示例》)
dovecot-mysql / dovecot-pgsql / dovecot-ldap虚拟用户后端否
dovecot-sieve / dovecot-solr过滤脚本、全文检索扩展否

关键差异:只装 dovecot-core 时仅 110/995(POP3)可用;IMAP 端口 143/993 需要 dovecot-imapd。生产邮件系统通常 IMAP 为主、POP3 为辅,本篇三个包全部安装。

2.3 邮件存储格式选型

💡 技术拓展:Linux 邮件存储不止本篇采用的 Maildir 一种,常见格式对比——

格式原理/特点适用场景
mbox所有邮件拼接进一个文件,靠空行加 From 行分隔用户少、邮件量小;/var/mail 传统格式
Maildir每封邮件一个独立文件,分 cur/new/tmp 三个子目录绝大多数现代部署;防损坏、可被多个进程安全并发访问
dbox(mdbox/sdbox)多邮件打包进 dbox 文件 + 索引,空间效率最高大规模存储优化;配合 dsync 迁移方便

本文采用 Maildir(mail_location = maildir:~/Maildir),理由:单文件单邮件不存在 mbox 的"一损俱损"问题,且与 Postfix、配额插件(maildir 后端)的兼容性最好,是 Dovecot 官方文档推荐的主流通用格式。

三、方案 A:apt 在线安装(推荐)

3.1 方案说明

在线安装从 Ubuntu 官方仓库获取软件包,自动解析依赖并注册 systemd 服务,是最简单可靠的安装方式,适合所有能访问公网或内网镜像源的服务器。整个过程分为:更新索引 → 安装组件 → 核对产物。

3.2 更新软件包索引

apt-get update

实测输出(节选首尾):

Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:4 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [2,974 kB]
...
Reading package lists... Done

3.3 安装 Dovecot 组件

DEBIAN_FRONTEND=noninteractive apt-get install -y dovecot-core dovecot-imapd dovecot-pop3d

实测输出(节选):

Creating config file /etc/dovecot/conf.d/auth-system.conf.ext with new version
Created symlink /etc/systemd/system/multi-user.target.wants/dovecot.service → /lib/systemd/system/dovecot.service.
Setting up dovecot-imapd (1:2.3.16+dfsg1-3ubuntu2.9) ...
Creating config file /etc/dovecot/conf.d/20-imap.conf with new version
Setting up dovecot-pop3d (1:2.3.16+dfsg1-3ubuntu2.9) ...
Creating config file /etc/dovecot/conf.d/20-pop3.conf with new version
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...

💡 说明:安装器完成了三件关键事情——写入全套配置文件到 /etc/dovecot/conf.d/、注册 dovecot.service 到 systemd(Created symlink ... multi-user.target.wants,即安装即开机自启)、创建自签名证书(见 3.4)。DEBIAN_FRONTEND=noninteractive 用于避免安装过程中的交互式提问(如是否允许 auth-system 等旧配置覆盖),无人值守环境必加。

3.4 核对安装产物

确认版本与包列表:

dovecot --version

实测输出:

2.3.16 (7e2e900c1a)
dpkg -l | grep dovecot

实测输出:

ii  dovecot-core                1:2.3.16+dfsg1-3ubuntu2.9               amd64        secure POP3/IMAP server - core files
ii  dovecot-imapd               1:2.3.16+dfsg1-3ubuntu2.9               amd64        secure POP3/IMAP server - IMAP daemon
ii  dovecot-pop3d               1:2.3.16+dfsg1-3ubuntu2.9               amd64        secure POP3/IMAP server - POP3 daemon

确认配置目录结构:

ls /etc/dovecot/ /etc/dovecot/conf.d/

实测输出:

/etc/dovecot/:
conf.d
dovecot-dict-auth.conf.ext
dovecot-dict-sql.conf.ext
dovecot-sql.conf.ext
dovecot.conf
private

/etc/dovecot/conf.d/:
10-auth.conf
10-director.conf
10-logging.conf
10-mail.conf
10-master.conf
10-ssl.conf
10-tcpwrapper.conf
15-lda.conf
15-mailboxes.conf
20-imap.conf
20-pop3.conf
90-acl.conf
90-plugin.conf
90-quota.conf
auth-checkpassword.conf.ext
auth-deny.conf.ext
auth-dict.conf.ext
auth-master.conf.ext
auth-passwdfile.conf.ext
auth-sql.conf.ext
auth-static.conf.ext
auth-system.conf.ext

💡 说明:dovecot.conf 是入口配置,通过 !include conf.d/*.conf 把 conf.d/ 下的分片配置全部引入。文件名前缀数字代表加载顺序,10- 是基础(邮件/认证/SSL/进程),15- 是投递,20- 是协议,90- 是插件。安装时自动生成的自签名证书在 /etc/dovecot/private/ 下(符号链接指向 ssl-cert 包的 snakeoil 证书):

ls -l /etc/dovecot/private/

实测输出:

total 0
lrwxrwxrwx 1 root root 38 Oct 16 15:19 dovecot.key -> /etc/ssl/private/ssl-cert-snakeoil.key
lrwxrwxrwx 1 root root 36 Oct 16 15:19 dovecot.pem -> /etc/ssl/certs/ssl-cert-snakeoil.pem

四、方案 B:deb 离线安装(断网/内网环境)

4.1 方案说明

当目标服务器无法访问 apt 仓库时,可在另一台同架构、同发行版联网机器上把 deb 包下载下来,拷贝到目标机用 dpkg -i 安装。适用前提:两台机器均为 Ubuntu 22.04 amd64,且目标机已具备基本依赖库。若目标机缺依赖,可参照 4.2 的方法把依赖一并下载。

4.2 在联网机器下载离线包

mkdir -p /tmp/dovecot-deb && cd /tmp/dovecot-deb
apt-get download dovecot-core dovecot-imapd dovecot-pop3d

实测输出(节选):

Get:3 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 dovecot-pop3d amd64 1:2.3.16+dfsg1-3ubuntu2.9 [37.7 kB]
Fetched 3550 kB in 7s (514 kB/s)
ls -l dovecot*.deb

实测输出:

-rw-r--r-- 1 root root 3319370 Jun  2 12:30 dovecot-core_1%3a2.3.16+dfsg1-3ubuntu2.9_amd64.deb
-rw-r--r-- 1 root root  192898 Jun  2 12:30 dovecot-imapd_1%3a2.3.16+dfsg1-3ubuntu2.9_amd64.deb
-rw-r--r-- 1 root root   37734 Jun  2 12:30 dovecot-pop3d_1%3a2.3.16+dfsg1-3ubuntu2.9_amd64.deb

💡 说明:若目标机连基础依赖(如 ucf、ssl-cert)都不具备,需把依赖一并下载。用 apt-cache depends --recurse --no-recommends --no-suggests dovecot-core | grep "^\w" | sort -u 列出完整依赖树后,将其作为 apt-get download 的参数一并下载。更省事的替代做法:目标机 /etc/apt/sources.list 指向同版本内网镜像源,仍走方案 A。

4.3 在目标机安装离线包

把上一步的 deb 文件拷贝到目标机(如 /tmp/dovecot-deb/),执行:

cd /tmp/dovecot-deb
dpkg -i dovecot-core_*.deb dovecot-imapd_*.deb dovecot-pop3d_*.deb

实测输出(节选首尾):

Selecting previously unselected package dovecot-core.
Preparing to unpack ... dovecot-core_1%3a2.3.16+dfsg1-3ubuntu2.9_amd64.deb ...
Unpacking dovecot-core (1:2.3.16+dfsg1-3ubuntu2.9) ...
...
Processing triggers for dovecot-core (1:2.3.16+dfsg1-3ubuntu2.9) ...

4.4 验证离线安装结果

dovecot --version && dpkg -l | grep -c dovecot

实测输出:

2.3.16 (7e2e900c1a)
3

⚠️ 注意:dpkg -i 不会自动安装缺失依赖。若输出中出现 dependency problems 字样,记录缺失的包名(如 ucf、ssl-cert),回到联网机器把这些包加入 apt-get download 的参数一并下载后重新 dpkg -i;不要在断网机器上运行 apt-get install -f(它会尝试联网下载)。

五、多方案对比与选择建议

维度方案 A:apt 在线方案 B:deb 离线
版本仓库最新(2.3.16+dfsg1-3ubuntu2.9)与下载机一致
是否需联网安装时需要安装时不需要
依赖处理自动解析安装手工补齐或依赖树整体下载
systemd 服务注册自动(安装即开机自启)自动(dpkg 同样执行 postinst)
适用场景常规服务器内网隔离、批量分发

选择建议:能联网一律走方案 A;批量分发到同规格内网机器时用方案 B,且务必带上完整依赖树。

六、基础配置

6.1 配置邮件存储位置

默认配置使用 mbox 存储(mail_location = mbox:~/mail:INBOX=/var/mail/%u)。按 2.3 节的选型改为 Maildir。编辑 /etc/dovecot/conf.d/10-mail.conf,找到第 30 行:

sed -i 's|^mail_location = mbox:~/mail:INBOX=/var/mail/%u|mail_location = maildir:~/Maildir|' /etc/dovecot/conf.d/10-mail.conf
grep -n '^mail_location' /etc/dovecot/conf.d/10-mail.conf

实测输出:

30:mail_location = maildir:~/Maildir

💡 说明:mail_location 中的变量——~ 表示用户家目录;%u 是完整用户名;%d 是域名(虚拟域场景用)。maildir:~/Maildir 表示每个用户的邮件存到其家目录的 Maildir 子目录。改完立即用 doveconf -n 核对生效值:

doveconf -n

实测输出:

# 2.3.16 (7e2e900c1a): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.16 (09c29328)
# OS: Linux 6.8.0-138-generic x86_64 Ubuntu 22.04.5 LTS
# Hostname: mail.example.com
mail_location = maildir:~/Maildir
mail_privileged_group = mail
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  driver = pam
}
protocols = " imap pop3"
ssl_cert = </etc/dovecot/private/dovecot.pem
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
userdb {
  driver = passwd
}

💡 说明:doveconf -n 只输出「与默认值不同」的配置,是检查配置变更的标准姿势(排障时请把它的输出发给支持方而不是贴整个配置文件)。当前可见:认证走 PAM 系统用户(passdb pam)+ passwd 用户库(userdb passwd),协议为 imap + pop3,密钥值被隐藏(需 -P 参数才显示)。

6.2 创建测试用户

Dovecot 默认认证方式(PAM + /etc/passwd)直接使用系统用户。创建一个收信测试用户并设置密码:

useradd -m -s /bin/bash mailuser
echo 'mailuser:q1w2e3r4' | chpasswd
id mailuser

实测输出:

uid=1000(mailuser) gid=1000(mailuser) groups=1000(mailuser)

⚠️ 注意:q1w2e3r4 仅为演示用固定测试口令,生产环境必须换成强密码策略管理的口令。-m 参数保证创建家目录 /home/mailuser——首次 IMAP 登录后 Dovecot 会自动在其下创建 Maildir/ 结构。

七、启动服务与验证

7.1 systemd 启动与开机自启

systemctl enable dovecot

实测输出:

Synchronizing state of dovecot.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable dovecot
systemctl start dovecot
systemctl status dovecot --no-pager

实测输出(节选):

● dovecot.service - Dovecot IMAP/POP3 email server
     Loaded: loaded (/lib/systemd/system/dovecot.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2026-10-16 15:20:45 UTC; 3ms ago
       Docs: man:dovecot(1)
             https://doc.dovecot.org/
   Main PID: 3315 (dovecot)
     Status: "v2.3.16 (7e2e900c1a) running"
     Memory: 2.9M

确认服务当前状态:

systemctl is-active dovecot

实测输出:

active

7.2 验证监听端口

ss -tlnp | grep dovecot

实测输出:

LISTEN 0      100          0.0.0.0:993       0.0.0.0:*    users:(("dovecot",pid=3315,fd=40))
LISTEN 0      100          0.0.0.0:995       0.0.0.0:*    users:(("dovecot",pid=3315,fd=23))
LISTEN 0      100          0.0.0.0:143       0.0.0.0:*    users:(("dovecot",pid=3315,fd=38))
LISTEN 0      100          0.0.0.0:110       0.0.0.0:*    users:(("dovecot",pid=3315,fd=21))
LISTEN 0      100             [::]:993          [::]:*    users:(("dovecot",pid=3315,fd=41))
LISTEN 0      100             [::]:995          [::]:*    users:(("dovecot",pid=3315,fd=24))
LISTEN 0      100             [::]:143          [::]:*    users:(("dovecot",pid=3315,fd=39))
LISTEN 0      100             [::]:110          [::]:*    users:(("dovecot",pid=3315,fd=22))

💡 说明:四个端口全部监听在 IPv4(0.0.0.0)与 IPv6([::])双栈——143/993 是 IMAP/IMAPS,110/995 是 POP3/POP3S。若防火墙开启,需放行这些端口(ufw allow 143,993,110,995/tcp)。

7.3 IMAPS 真实登录测试

用 openssl s_client 建立 TLS 连接并执行真实 IMAP 会话(登录 → 列邮箱 → 查状态 → 登出):

printf 'a1 LOGIN mailuser q1w2e3r4\r\na2 LIST "" *\r\na3 STATUS INBOX (MESSAGES UNSEEN)\r\na4 LOGOUT\r\n' | openssl s_client -connect localhost:993 -quiet

实测输出:

* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN] Dovecot (Ubuntu) ready.
a1 OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LITERAL+ NOTIFY SPECIAL-USE] Logged in
* LIST (\HasNoChildren) "." INBOX
a2 OK List completed (0.001 + 0.000 + 0.001 secs).
* STATUS INBOX (MESSAGES 0 UNSEEN 0)
a3 OK Status completed (0.003 + 0.000 + 0.002 secs).
* BYE Logging out
a4 OK Logout completed (0.000 + 0.000 secs).

💡 说明:a1~a4 是 IMAP 协议要求客户端给每条命令加的标签(tag),服务器原样回应。a1 OK ... Logged in 即认证成功;首次登录同时触发了 /home/mailuser/Maildir/ 的自动创建:

ls -la /home/mailuser/Maildir/

实测输出:

total 36
drwx------ 5 mailuser mailuser 4096 Oct 16 15:21 .
drwxr-x--- 3 mailuser mailuser 4096 Oct 16 15:21 ..
drwx------ 2 mailuser mailuser 4096 Oct 16 15:21 cur
-rw------- 1 mailuser mailuser   51 Oct 16 15:21 dovecot-uidlist
-rw------- 1 mailuser mailuser    8 Oct 16 15:21 dovecot-uidvalidity
-r--r--r-- 1 mailuser mailuser    0 Oct 16 15:21 dovecot-uidvalidity.6ad240e8
-rw------- 1 mailuser mailuser  320 Oct 16 15:21 dovecot.index.log
-rw------- 1 mailuser mailuser  400 Oct 16 15:21 dovecot.list.index.log
drwx------ 2 mailuser mailuser 4096 Oct 16 15:21 new
drwx------ 2 mailuser mailuser 4096 Oct 16 15:21 tmp

7.4 POP3S 真实登录测试

printf 'user mailuser\r\npass q1w2e3r4\r\nlist\r\nquit\r\n' | openssl s_client -connect localhost:995 -quiet

实测输出:

+OK Dovecot (Ubuntu) ready.
+OK
+OK Logged in.
+OK 0 messages:
.
+OK Logging out.

7.5 明文端口的 TLS 要求验证(143 端口安全行为)

Dovecot 默认 disable_plaintext_auth = yes(用 doveconf -h disable_plaintext_auth 可查得 yes),即非 TLS 连接拒绝明文密码。从另一台机器(非本机地址)连接 143 端口时 capability 中会出现 LOGINDISABLED,明文 LOGIN 会被拒绝:

printf 'a1 LOGIN mailuser q1w2e3r4\r\na2 LOGOUT\r\n' | nc mail.example.com 143

实测输出(从远程机器连接):

* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS LOGINDISABLED] Dovecot (Ubuntu) ready.
* BAD [ALERT] Plaintext authentication not allowed without SSL/TLS, but your client did it anyway. If anyone was listening, the password was exposed.
a1 NO [PRIVACYREQUIRED] Plaintext authentication disallowed on non-secure (SSL/TLS) connections.
* BYE Logging out
a2 OK Logout completed.

💡 说明:PRIVACYREQUIRED 是预期行为,不是故障——远程明文密码登录被安全策略拦截,客户端应改用 993(IMAPS)或先发 STARTTLS 升级加密。而本机(localhost)发起的连接被 Dovecot 视为安全连接,明文 LOGIN 允许通过,这是同一配置下两种结果的原因。

7.6 doveadm 用户查询

doveadm user mailuser

实测输出:

field   value
uid     1000
gid     1000
home    /home/mailuser
mail    maildir:~/Maildir
system_groups_user      mailuser

💡 说明:doveadm user 显示 Dovecot 从用户库解析出的最终投递属性(uid/gid/home/mail 位置),是排查「邮件投到了哪」的第一工具。不带 -u 全列出则用 doveadm user '*'(passwd 用户库支持通配)。

八、升级与版本管理

8.1 常规升级

apt 仓库版本的升级随系统更新自动完成:

apt-get update && apt-get upgrade -y dovecot-core dovecot-imapd dovecot-pop3d

升级后核对版本与服务状态:

dovecot --version && systemctl is-active dovecot

8.2 锁定版本(防止自动升级)

某些环境要求固定 Dovecot 版本(如与集群其他节点一致),用 apt-mark hold 锁定:

apt-mark hold dovecot-core
apt-mark showhold

实测输出:

dovecot-core set on hold.
dovecot-core

解除锁定:

apt-mark unhold dovecot-core

实测输出:

Canceled hold on dovecot-core.

💡 说明:hold 只对 dovecot-core 锁定。dovecot-imapd/dovecot-pop3d 与 core 是同源包,锁 core 后升级时 apt 会因版本依赖关系提示冲突,三个包建议同时 hold。

8.3 查询可用版本

apt-cache policy dovecot-core

Installed 行显示当前版本,Candidate 行显示可升级到的版本;两行一致即为最新。

九、常见问题(FAQ)

Q1:IMAP 登录报 NO [PRIVACYREQUIRED] Plaintext authentication disallowed? 这是远程明文连接触发 disable_plaintext_auth = yes 的正常拦截(见 7.5 节实测)。客户端改连 993 端口走 IMAPS,或在 143 端口先发 STARTTLS。若确需内网明文(不推荐),在 /etc/dovecot/conf.d/10-auth.conf 设置 disable_plaintext_auth = no 并重启服务,同时用 login_trusted_networks = 10.0.0.0/8 把受信网段标为安全。

Q2:邮件客户端连接 993 时提示证书不受信任? 安装时自动生成的是自签名证书(/etc/dovecot/private/dovecot.pem 链到 ssl-cert-snakeoil),客户端会提示无法验证。测试环境可直接接受;生产环境应替换为受信 CA 签发的证书并改 10-ssl.conf 的 ssl_cert/ssl_key 指向,参见《Dovecot 2.3.16 进阶实战与运维》SSL 一节。

Q3:systemctl start dovecot 失败,如何定位? 依次执行三步:systemctl status dovecot --no-pager -l 看退出码;journalctl -u dovecot --no-pager -n 50 看启动日志,Dovecot 的配置错误会直接打印 Fatal 行(如 Fatal: Error in configuration file ... line N);再用 doveconf -n 核对改动过的参数是否拼写正确。配置修正后 systemctl restart dovecot。

Q4:ss -tlnp 里看不到 993/995 端口? 说明 dovecot-imapd/dovecot-pop3d 没装或 protocols 被改。用 dpkg -l | grep dovecot 核对包,doveconf -h protocols 核对生效协议(本篇实测值为 " imap pop3")。补装包或恢复 protocols 后 systemctl restart dovecot。

Q5:远程客户端完全连不上 143/993? 在服务器本机 ss -tlnp | grep dovecot 确认监听存在,然后依次排查:ufw status / iptables -L -n 防火墙规则、云平台安全组是否放行对应 TCP 端口。本机监听正常 + 远程超时,九成是安全组。

十、卸载与清理

10.1 停止服务并卸载软件包

systemctl stop dovecot
DEBIAN_FRONTEND=noninteractive apt-get purge -y dovecot-core dovecot-imapd dovecot-pop3d

实测输出(节选):

Purging configuration files for dovecot-pop3d (1:2.3.16+dfsg1-3ubuntu2.9) ...
Purging configuration files for dovecot-core (1:2.3.16+dfsg1-3ubuntu2.9) ...
dpkg: warning: while removing dovecot-core, directory '/var/lib/dovecot' not empty so not removed
dpkg: warning: while removing dovecot-core, directory '/etc/dovecot/conf.d' not empty so not removed
Purging configuration files for dovecot-imapd (1:2.3.16+dfsg1-3ubuntu2.9) ...
Removing ucf (3.0043) ...
DEBIAN_FRONTEND=noninteractive apt-get autoremove -y

10.2 验证卸载结果

dpkg -l | grep dovecot
which dovecot dovecadm
systemctl is-active dovecot

实测输出(dpkg -l 无输出、which 无输出,说明二进制与包已删除):

inactive

10.3 清理残留目录

purge 后会残留两个空目录(dpkg 因目录非空而保留,见 10.1 的 warning):

ls -la /etc/dovecot/conf.d/ /var/lib/dovecot/

实测输出:

/etc/dovecot/conf.d/:
total 8
drwxr-xr-x 2 root root 4096 Oct 16 15:23 .
drwxr-xr-x 3 root root 4096 Oct 16 15:23 ..

/var/lib/dovecot/:
total 16
drwxr-xr-x 2 root root   58 Oct 16 15:23 instances
...

确认无需保留配置后手工删除:

rm -rf /etc/dovecot /var/lib/dovecot
ls /etc/dovecot

实测输出:

ls: cannot access '/etc/dovecot': No such file or directory

⚠️ 注意:用户邮箱数据 /home/mailuser/Maildir(及各用户的家目录)不在卸载范围内,实测确认卸载后仍在。若要连同用户一起清理,先 userdel -r mailuser 删除用户及其家目录,再删除 /var/mail/mailuser(如存在)。

十一、参考链接