Mailcow 安全加固指南

Mailcow 安全加固指南:管理面 2FA 与强制双因素实测、API 最小暴露、TLS 强制与明文端口禁登录回显、Rspamd 欺诈防护符号链、登录延迟与 netfilter 自动封禁机制、端口暴露面收敛清单与验证命令,全部基于 2026-09a 实测。

Mailcow邮件服务器2026/10/19

Mailcow 安全加固指南

适用:Mailcow 2026-09a(部署与入门见本专栏前篇)。邮件服务器是互联网上被爆破与滥用最频繁的服务之一,本文按"管理面 → 协议面 → 策略面 → 暴露面"四层给出加固清单,全部条目在 2026-10-19 实测验证。

一、环境信息

  • Mailcow 2026-09a 降配运行(SKIP_CLAMD/SOGO/FTS=y),Web 入口 HTTP 8126 / HTTPS 8130
  • 管理端与 API 同源(/admin 与 /api/v1),演示域 example.com
  • 涉及组件:nginx/php-fpm(管理面)、postfix/dovecot(协议面)、rspamd/netfilter(策略面)

二、管理面加固

2.1 强制改密:首登向导已内置

初始管理员 admin/moohoo 必须立即更换。管理端对账号提供 "Force password update at next login" 开关(force_pw_update 属性),置位后该账号下次登录被 pending 动作拦截,实测 302 落在 /admin 并弹出改密向导(changePWModalForm,提交目标 POST /api/v1/edit/admin,敏感值服务端脱敏回显 "password":"*")。多管理员环境建议为每个管理员开启此开关,确保初始口令不落地。

2.2 双因素认证(2FA)与强制 2FA

管理端 System → Configuration → 管理员编辑页提供 TFA 配置,支持三种认证器:TOTP(动态口令)、WebAuthn、FIDO2(实测向导 Modal 含 tfa_method 选择与 tfa-qr-img 二维码,供 TOTP 认证器扫码绑定)。

2026-03 版本起提供 forced 2FA(管理员属性 force_tfa):置位后登录同样被 pending 拦截,实测页面直接渲染 TFA 绑定向导——即管理员在完成双因素绑定前无法进入管理面。这是多人共管环境的强基线。实测触发回显:

login -> HTTP 302 Location: /admin      # pending_tfa_setup 拦截
GET /admin/ -> 200(页面含 TFAModal / tfa_method / tfa-qr-img)

绑定的认证器在登录时进入二次确认流程(awaiting_tfa_confirmation,账号会话置 pending,凭据正确但未过 TFA 不发会话)。

2.3 REST API 最小暴露

API 密钥三要素的最小化配置(mailcow.conf):

变量加固取值说明
API_KEY随机长串(实测 48 位 hex)读写密钥,仅自动化系统需要时才配
API_KEY_READ_ONLY只读场景单独发监控/报表只给只读密钥
API_ALLOW_FROM明确 CIDR 列表实测必须包含真实来源网段(含编排网关地址),白名单外一律 authentication failed

运维红线:读写密钥不出管理网;来源白名单不写 0.0.0.0/0;API 暴露面与管理面同端口,公网不可达管理面的前提下 API 同样不可达(见第五章)。

2.4 角色最小化

超级管理员(superadmin)只保留 1–2 个;日常运维建 domain admin 角色账号(仅管所辖域名/邮箱)。内置 ACL 体系(ACL_ANYONE=disallow 默认值保持)避免 "anyone" 伪用户组扩权。会话层面,管理面与邮箱代管(dual-login)都会在日志留下角色痕迹,定期审计管理员列表。

三、协议面:TLS 强制

3.1 明文端口禁登录(默认即安全)

实测 143 明文口 banner:

$ timeout 4 bash -c 'exec 3<>/dev/tcp/127.0.0.1/143 && cat <&3'
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS LOGINDISABLED] Dovecot ready.

关键在 LOGINDISABLED:明文会话禁止 LOGIN,客户端必须先 STARTTLS 升级。587 提交口同理为 smtpd_tls_auth_only 默认(明文 EHLO 无 AUTH 行,实测 swaks 不带 --tls 报 Host did not advertise authentication)。465 为隐式 TLS。三端口行为实测汇总:

端口明文能力凭据传输
143 IMAPSTARTTLS + LOGINDISABLED仅 TLS 内
587 submissionSTARTTLS 后广播 AUTH仅 TLS 内
465 submissions隐式 TLS全程加密

3.2 逐邮箱 TLS 策略

每个邮箱属性含 tls_enforce_in / tls_enforce_out(创建邮箱 API 参数实测可见)。对高敏感账号置位后,与未加密对端的收发会被策略拒绝——适合财务/高管邮箱。对外强制层面,postfix-tlspol 组件(官方镜像 ghcr.io/mailcow/postfix-tlspol:1.14.0)维护 TLS 策略缓存,确保发往支持 TLS 的域不出明文。

3.3 证书

公网域用 ACME 自动签发(HTTP-01 或 DNS-01,DNS-01 适配管理面不暴露 80/443 的收敛部署);内网/演示环境用 snake-oil 自签时,客户端侧应固定指纹分发而非放宽校验。

四、策略面:Rspamd 与爆破防护

4.1 入站欺诈防护符号链

每封入站信由 Rspamd 给出可审计的符号明细(实测回显,见快速入门篇 5.2):SPF/DKIM_TRACE/DMARC(身份三件套)、HFILTER_*(HELO/发件人合理性)、RCVD_COUNT_ZERO、MID_RHS_NOTFQDN 等,总分 15 分为拒收线(default: False [0.90 / 15.00])。加固动作在管理端 Rspamd 面板完成:调全局分值线、启用灰名单(对首次发件方延迟重试)、维护域名黑/白名单。

4.2 登录爆破:递增延迟 + F2B 自动封禁

Mailcow 内置两层防护,均可实测观测:

  1. UI 登录递增延迟:认证失败后 $_SESSION['ldelay'] 从 0 每次累加 0.5 秒并 sleep(源码级实测),脚本爆破被线性减速;
  2. F2B 事件通道:每次失败认证向 Redis F2B_CHANNEL 发布事件,netfilter 组件订阅后对源地址 iptables 封禁。实测启动日志:
2026-10-19 21:30:26 INFO: Clearing all bans
2026-10-19 21:30:28 INFO: Watching Redis channel F2B_CHANNEL

netfilter 封禁带到期自动解封与白名单(/opt/data/mailcow-dockerized/data/conf/netfilter/bans.conf 的 WHITELIST 加入运维跳板网段,避免把自己锁在门外)。UI 失败事件的日志原文形如 mailcow UI: Invalid password for <user> by <ip>,即 F2B 事件源。

4.3 出站滥用防护

被入侵邮箱是最常见的滥用源。实测可见每邮箱创建时自动初始化限速对象(回执 rl_saved);在管理端 E-Mail → Configuration → Rate Limit 按邮箱/域设置发送配额;Rspamd 侧对出站同样过符号评分。配合 2.4 的角色最小化与 3.2 的 TLS 策略,构成出站防线。

4.4 弱口令防线

邮箱/管理员密码保存为 BLF-CRYPT 哈希(MAILCOW_PASS_SCHEME,实测库中前缀 {BLF-CRYPT}$2y$10$);前端集成 Have I Been Pwned 口令库查询(页面资源实测含 hibp_ok 文案),已泄露口令在设置时即被提示拒绝。

五、暴露面收敛

5.1 端口清单与收敛基线

部署后实测宿主监听(ss -ltn):

0.0.0.0:8126  0.0.0.0:8130            # 管理面(建议仅内网/VPN 可达)
0.0.0.0:25    0.0.0.0:465   0.0.0.0:587    # SMTP:必须公网
0.0.0.0:143   0.0.0.0:993             # IMAP:按需公网(993 优先)
0.0.0.0:110   0.0.0.0:995             # POP3:基本可关
0.0.0.0:4190                          # ManageSieve:客户端配置过滤规则才需要
127.0.0.1:13306  127.0.0.1:7654  127.0.0.1:19991   # SQL/Redis/Doveadm:仅回环

收敛清单(按收益排序):

  1. 管理面 8126/8130 不对公网开放(防火墙/安全组仅放内网与 VPN 网段)——管理面承载全部管理动作与 API;
  2. POP3(110/995)默认关闭:现代客户端走 IMAP;若保留也仅对内网;
  3. 4190 ManageSieve 按需开放;
  4. SMTP 三口中,若无需从公网收信(纯出站/内部系统发信),25 亦可收敛为内网;
  5. SQL/Redis/Doveadm 默认仅绑 127.0.0.1(实测保持),不要改绑 0.0.0.0。

5.2 HTTP 明文入口

非标端口部署时 HTTP_REDIRECT=y 会 301 到 HTTPS(标准端口假设,见部署指南篇 4.3)。收敛视角两种等价安全形态:HTTP_REDIRECT=y 让明文口仅做跳转,或直接不映射 8126 只留 HTTPS 入口。本演示环境为浏览器便利设 n,生产建议保持 y 并只放行 HTTPS。

5.3 内部服务通信

各组件间流量限制在自定义内部网络(本文 10.89.54.0/24),Unbound 为全栈统一递归出口(Rspamd 的 DNSBL/SPF 查询不直连外网解析器),降低 DNS 污染与泄露面。IPv6 不用时保持 ENABLE_IPV6=false,避免未规划的 v6 暴露面。

六、加固自检清单

  • admin/moohoo 已改强密码,force_pw_update 对全部管理员开启
  • 全部管理员启用 2FA(或 force_tfa=1 强制)
  • API_ALLOW_FROM 为精确网段,只读/读写密钥分离
  • 管理员列表仅剩必要账号,域管理已委派给 domain admin
  • 143/587 banner 含 LOGINDISABLED/AUTH 需 TLS(实测命令见 3.1)
  • 高敏邮箱 tls_enforce_in/out 置位
  • Rspamd 灰名单与分值线已按业务调整,X-Spamd-Result 符号抽查无异常放行
  • netfilter WHITELIST 含运维网段,F2B_CHANNEL 在订阅(日志见 4.2)
  • 管理面端口不对公网,POP3/Sieve 按需收敛(5.1 清单)
  • postqueue -p 定期巡查无异常出站积压(滥用征兆)

七、参考链接

  1. 官方安全与反垃圾文档:https://docs.mailcow.email/post_installation/firststeps-rspamd_settings/
  2. netfilter(F2B)说明:https://docs.mailcow.email/manual/u_e-netfilter/
  3. 强制 2FA 功能发布:https://github.com/mailcow/mailcow-dockerized/releases/tag/2026-03b(Moorch 2026)
  4. 站内同族加固:《docker-mailserver 安全加固指南》、《iRedMail 1.7.4 配置参数详解》