安全运行清单
账号与认证
- 管理员使用独立账号,不多人共用。
- 管理员和高权限用户启用 TOTP 两步验证。
- 开放注册时同时启用认证邮箱、来源 IP 限速和 Turnstile。
- Turnstile 的环境变量强制关闭只用于管理员被锁在门外时救援;完成修复后立即移除并重启服务。
- 密码修改、密码找回、管理员重置密码、重置 2FA 和强制下线后,旧令牌应立即失效。
- OAuth 请求设置连接/读取超时与响应大小上限,不把提供方原始错误正文返回浏览器。
- 管理员代入登录只用于排障;代入会话不能修改密码、绑定身份、创建客户端密码或 API Key。
密钥与配置
JWT_SECRET、POSTGRES_PASSWORD、SENDCHANNEL_KEK_HEX使用随机独立值。.env、SMTP 密码、OAuth Secret、支付密钥、Telegram Token、S3 密钥和 TLS 私钥不进入 Git、聊天、截图或工单。SENDCHANNEL_KEK_HEX上线后保持稳定;丢失会导致已有加密配置无法解密。- 密钥疑似泄露时立即在服务商处轮换,删除 Git 历史或聊天记录不能替代轮换。
网络边界
- PostgreSQL
5432、Redis6379、后端内部端口和本机反代端口只允许内网或回环访问。 - 公网只开放实际需要的 25、587、993、995、80 和 443。
- 外层代理覆盖
X-Real-IP、X-Forwarded-For和协议头,不能信任访客自己提交的代理头。 - 使用 Cloudflare 时只信任官方边缘 IP 段提供的
CF-Connecting-IP,并阻止绕过 CDN 直连网页源站。 - 邮件主机记录保持 DNS only;Cloudflare 普通代理不转发 SMTP、IMAP 或 POP3。
邮件与内容
- 发信域名配置 PTR/rDNS、MX、SPF、DKIM 和 DMARC,并持续检查到期或漂移。
- 先让 rspamd 高风险邮件进入垃圾箱,观察误判后再启用安全隔离;隔离原文计入存储并按保留策略清理。
- 隔离预览禁用远程图片、链接、样式和交互属性;放行前仍要核对发件人、认证结果与内容。
- 外部转发使用正常发信策略、配额与能量,并阻止自转发和自动邮件循环;定期检查邮件流转中的转发失败。
- 自动回复同样使用正常发信配额与能量;启用“只回复一次”并监控发送记录,避免多实例或重试向同一发件人重复回复。
- 全局白名单只加可信且范围最小的邮箱、域名、IP 或 CIDR。
- 组织 Logo 只允许经过内容检查的 PNG、JPEG、WebP 或 GIF;不要允许 SVG 上传。
- 邮件正文、原文、附件和缩略图都必须经过邮箱所有权或只读共享范围检查。
数据与并发
- 升级前验证备份可恢复,再在数据副本运行所有迁移。
- 邮箱转让、发信额度、通道额度、存储额度、订单和订阅依赖数据库事务与约束;不要通过手工改计数绕过。
- SMTP 重试可能发生在客户端未收到成功响应时;系统使用短窗口指纹降低同一上游重试造成的重复入站邮件。
- 邮箱共享当前只读。发现旧的未知权限字符串时应停止并核对,不要自动扩大为可写权限。
日志与隐私
- Web 访问日志不要记录完整查询参数、Cookie、验证码、令牌或 OAuth code。
- 安全敏感路径的
5xx返回概括性错误,数据库、凭据和第三方响应详情留在受限服务端日志;持续审查新接口,避免把内部错误原样暴露。 - 删除用户时保留必要审计记录,并将已删除操作者引用置空。
- 定期检查登录失败、身份绑定冲突、SMTP 认证失败、支付回调异常和管理员高风险操作。
定期验证
每次发布至少执行:后端单元与集成测试、静态检查、前端与官网构建、依赖审计、数据库迁移副本测试、Nginx 与 rspamd 配置检查,以及 HTTPS、SMTP STARTTLS、IMAPS、POP3S 的真实握手验证。