Schleuder 5.0.0 配置参数详解:schleuder.yml 与 list-defaults.yml 逐项解析

逐项解析 Schleuder 全局配置 schleuder.yml 与列表模板 list-defaults.yml 的全部参数:三层生效规则、收发加密门槛组合、API 安全段、SMTP/数据库接线,附 4.0 与 5.0 配置差异实测 diff 与生产最小安全基线。

Schleuder邮件列表端到端加密Ruby隐私安全2026/10/26

Schleuder 5.0.0 配置参数详解:schleuder.yml 与 list-defaults.yml 逐项解析

目标:把 Schleuder 的两个 YAML 配置文件——全局主配置 schleuder.yml 与新建列表默认值模板 list-defaults.yml——逐项讲透:每个参数管什么、默认值是什么、改了影响什么、生产上建议怎么配。全部参数取自 5.0.0 与 4.0.3 实机安装生成的配置文件本体(官方第一手注释),并标注两个大版本间的差异。安装过程见本专栏《Schleuder 5.0.0 安装指南》。

一、配置体系全景:三层结构

Schleuder 的配置分三层,理解层级关系比记住每个参数更重要:

/etc/schleuder/schleuder.yml        ← 全局层:服务器级(路径/SMTP/数据库/API),改动即时生效(重启 API daemon)
/etc/schleuder/list-defaults.yml    ← 模板层:只对「之后新建」的列表生效
数据库(列表级 options)             ← 实际层:每个列表自己的参数副本,运行时真正读的是这一层

三条关键生效规则(官方注释原文明确 + 实测确认):

  1. 模板层是快照不是引用:list-defaults.yml 的注释开宗明义——"Once a list is created it is not affected by these settings but has its own set of options in the database"(列表一旦创建就不受这些设置影响,它有自己的数据库选项集)。改模板不会波及存量列表;
  2. 改存量列表要走 API/CLI:用 schleuder-cli lists save 系命令改单个列表属性(详见 D1 篇);
  3. 全局层立即生效但需重启:schleuder.yml 属于 daemon 进程的启动参数,改后需重启 schleuder-api-daemon(systemd 环境下 systemctl restart schleuder-api-daemon)。

二、schleuder.yml 逐项解析(全局层)

2.1 路径与目录段

参数5.0.0 默认值作用与要点
lists_dir/var/lib/schleuder/lists列表目录根,存每个列表的 GnuPG 密钥环与日志。备份系统时这是核心目录
listlogs_dir/var/lib/schleuder/lists列表日志根。实际日志路径为 <listlogs_dir>/<hostname>/<listname>/list.log。注意:Debian 包打的 4.0.3 把它改成了 /var/log/schleuder/lists(符合 FHS),gem 装的 5.0.0 默认与 lists_dir 同根
keyword_handlers_dir/usr/local/lib/schleuder/keyword_handlers自定义关键词处理器(邮件命令的扩展点)加载目录
filters_dir/usr/local/lib/schleuder/filters自定义过滤器目录,须有 pre_decryption/post_decryption 子目录;文件名约定 \d+_a_name.rb(数字决定顺序,方法名须与 a_name 一致;内置过滤器用 10 的倍数占位)

💡 运维要点:lists_dir 里是密钥环,umask 与属主错一个字符都可能造成「列表无法解密」级别的事故,变更前先备份。

2.2 日志与杂项

参数默认值作用与要点
log_levelwarn全局 syslog 级别(列表专属消息写进各列表自己的日志文件)。可选 error/warn/info/debug
superadminroot@localhost全局维护者邮箱:发生严重列表故障时的通知地址,同时是管理员通知信的信封发件人。官方注释特别强调:别填成另一个 Schleuder 列表(会形成通知回路),应该像一个 postmaster 账号
umask0077建文件/目录的权限掩码,默认仅属主可读写。官方注释警告:别改,改也必须保持数字类型且以 0 开头(不能加引号)

2.3 公钥检索段(4.0 → 5.0 的最大配置差异)

Schleuder 需要按需从公钥服务器拉取订阅者公钥。两个版本模型不同:

4.0.3(Debian 12 包)——单一 keyserver 参数:

#keyserver: hkps://hkps.pool.sks-keyservers.net   # gnupg 2.1 建议 hkps
#keyserver: hkp://jirk5u4osbsr34t5.onion          # 本机有 Tor 时的 onion 服务
keyserver:                                        # Debian 打包者注释:交由系统级 gpg 配置

5.0.0(官方 gem)——拆分为 VKS/SKS 双服务器 + 代理:

参数5.0.0 默认值作用与要点
vks_keyserverhttps://keys.openpgp.org验证型密钥服务器(VKS API),优先查询。VKS 只收录经过邮件验证的密钥,可信度高于传统池。留空即禁用
sks_keyserver(空)传统 SKS 池,仅当 VKS 没有该密钥时兜底。官方注释连用两个警告:SKS 不校验上传内容,拿到的密钥不能盲目信任;且多数 SKS 节点没有像样的 TLS 证书,除非确认,别写 https
http_proxy(注释未启用)拉取公钥的 HTTP 请求走代理。官方给出 Tor 示例:socks5h://127.0.0.1:9050。对匿名通讯场景这是关键参数

💡 升级提示:从 4.x 迁移到 5.x 时,旧的 keyserver: 参数会被静默忽略,必须改写成 vks_keyserver/sks_keyserver 成对的新格式。

2.4 出站邮件段:smtp_settings

传给 Ruby ActionMailer 的 SMTP 参数,5.0.0 默认只启用两行,其余注释待用:

smtp_settings:
  address: localhost   # 出站 SMTP 服务器地址
  port: 25             # 端口
  #domain: / #enable_starttls_auto: / #openssl_verify_mode:
  #authentication: / #user_name: / #password:
参数要点
address + portSchleuder 重加密后的所有出站信都从这里交给 MTA。B1 篇实测环境把 address 指向 MailHog 容器即在此改
enable_starttls_auto对端支持 STARTTLS 就加密传输。生产若走内网明文 25 端口,务必确认对端是本机或可信内网
openssl_verify_mode校验对端证书的模式(如 peer)。对接自签名内网 MTA 时常需调整
authentication / user_name / password出站 SMTP 需要认证时启用(plain/login/cram_md5)

2.5 数据库段:database

database:
  production:
    adapter:  'sqlite3'
    database: /var/lib/schleuder/db.sqlite
    timeout:  5000
  • 默认 SQLite,单文件 /var/lib/schleuder/db.sqlite,timeout: 5000(毫秒,SQLite 锁等待上限);
  • 只需维护 production 段(development/test 段仅测试用);
  • 换 MySQL/MariaDB:改 adapter、建库、gem install mysql2(或发行版对应包)后重跑 schleuder install 建表(B1 篇实测输出原文也提示了这条路径)。

2.6 API 段:api(服务端核心安全参数)

api:
  host: localhost
  port: 4443
  tls_cert_file: /etc/schleuder/schleuder-certificate.pem
  tls_key_file:  /etc/schleuder/schleuder-private-key.pem
  valid_api_keys:
    - q1w2e3r4-QWERTY-key-0001
参数要点
host监听地址。默认 localhost——CLI 与 daemon 同机即可不改;需要远程管理时改成对外地址,并同步评估防火墙与证书分发
port默认 4443
tls_cert_file / tls_key_file自签名证书对,schleuder cert generate 可重新生成(B1 篇 schleuder install 实测已生成,并输出指纹要求所有客户端校验)
valid_api_keysAPI 访问凭据白名单,列表内的任意字符串。所有 schleuder-cli 调用都必须持其中之一。实测:不配 key 时 CLI 全部 401;配好后 curl -H "X-API-Key: ..." https://localhost:4443/status.json 返回 {"status":"ok"}

三、list-defaults.yml 逐项解析(模板层)

以下参数构成每个新建列表的初始选项集。按功能分组讲解(默认值均为 5.0.0 实机值)。

3.1 收发加密门槛(安全核心组)

参数默认含义
send_encrypted_onlytrue出站只发密文(对订阅者的重加密出站;不影响 resend 转发件)
receive_encrypted_onlyfalse入站必须密文,否则退信。闭合加密列表的开关
receive_signed_onlyfalse入站必须有效签名
receive_authenticated_onlyfalse入站必须由订阅者密钥有效签名(最强身份门)
receive_from_subscribed_emailaddresses_onlyfalse入站 From 必须是已订阅地址。官方注释罕见地写下长警告:这是弱机制,发件人极易伪造,别依赖它;真正要关门请用 receive_authenticated_only。此选项仅为「还没普及 GPG 的封闭列表」过渡用
receive_admin_onlyfalse入站必须由列表管理员密钥签名。公告/通知型列表专用(配合仅管理员可发)
deliver_selfsenttrue发件人自己也在订阅者中时,是否给他自己也回投一份

💡 组合心法:send_encrypted_only: true(默认)保证出站永远密文;入站三开关(encrypted/signed/authenticated)是逐级收紧的三道门。社群秘密列表的常见基线是只开 receive_authenticated_only: true——既能进能出又不拒收「忘加密但验签通过」的内部信。

3.2 邮件头与线程处理(隐私权衡组)

参数默认含义
headers_to_meta[from, to, cc, date, sig, enc]转发时保留原信哪些头。sig/enc 是 Schleuder 造的标记头,向接收者声明原信是否签名/加密
keep_msgidtrue保留 Message-ID 系(In-Reply-To/References)以维持线程。官方注释明确警告隐私代价:窃听者可借回复链把密文串成线索。高敏列表可关
include_autocrypt_headertrue出站加 Autocrypt 头(现代客户端可据此自动互换密钥)
include_list_headerstrue加 RFC 2369 List-* 头(List-Id 等,客户端退订/归档按钮依赖它)
include_openpgp_headertrue加 OpenPGP 头声明本列表偏好
openpgp_header_preferencesignencryptOpenPGP 头里声明的偏好:sign/encrypt/signencrypt/unprotected/none
set_reply_to_to_senderfalse把出站 Reply-To 指回原发件人(避免「回复全列表」误伤),可用性向导
munge_fromfalse改写 From 为 "sender@x.org via list@l.org" <list@l.org>——用列表地址当信封、原发件人进显示名,专治 DMARC 拒信

3.3 关键词权限组(邮件命令的管控面)

参数默认含义
keywords_admin_only[subscribe, unsubscribe, delete-key]仅列表管理员可触发的邮件命令。默认把「订阅/退订/删钥」这三个人口操作锁给管理员
keywords_admin_notify[add-key]这些命令每次被触发都给管理员发通知。默认盯「添加密钥」——因为往列表密钥环塞公钥是敏感动作

3.4 主题前缀与页脚(版面组)

参数默认含义
subject_prefix(空)加在「订阅者有效签名」邮件主题前的前缀(如 [lists])
subject_prefix_in(空)非(订阅者有效)签名邮件的前缀——三个前缀分开,让成员一眼区分「可信来件」与「来路存疑件」
subject_prefix_out(空)resend 转发给非订阅者时的前缀
internal_footer(空)附给订阅者信件的页脚
public_footer(空)附给非订阅者信件的页脚(通常放「如何联系管理员」)

3.5 退信与容量防护组

参数默认含义
bounces_drop_allfalse静默丢弃所有未过 receive_*_only 门槛的来信
bounces_drop_on_headersx-spam-flag: yes按头匹配丢弃(键值不区分大小写的哈希)。默认盯 Spam 标记
bounces_notify_adminstrue有人被退信/丢弃时通知管理员
max_message_size_kb10240单信上限 10 MB,超限退信
log_level(列表级)warn列表日志详细度(error/warn/info/debug)
logfiles_to_keep2保留几份列表日志(日志按天轮转,2 = 只留昨天+今天)

3.6 行为杂项组

参数默认含义
languageen自动回复与报错文案语言,可选 en、de
forward_all_incoming_to_adminsfalse所有来信原始副本转发管理员——排障利器,平时别开
key_auto_import_from_emailfalse5.0 新增:解析来信 Autocrypt 头与附件中的密钥并按规则自动导入(须 UID 匹配 From、且与密钥环现状不冲突才导入)。官方注释同时点出风险:伪造 From 可能把「不是订阅者本人」的钥匙塞进来,但它不会被自动用于该订阅者的出站加密,除非人工指派

四、4.0 vs 5.0 配置差异对照(实测 diff 摘要)

差异点4.0.3(Debian 包)5.0.0(官方 gem)
密钥服务器单参数 keyserver:(HKPS/SKS/Tor onion 示例)拆为 vks_keyserver(默认 keys.openpgp.org)+ sks_keyserver + http_proxy
列表日志目录/var/log/schleuder/lists(打包者按 FHS 调整)默认与列表同根 /var/lib/schleuder/lists
Autocrypt 自动导钥无新增 key_auto_import_from_email(默认 false)

五、生产最小安全基线(可直接抄)

# schleuder.yml 建议落点(在默认值基础上)
superadmin: admin@example.org          # 换成真实 postmaster 邮箱
umask: 0077                            # 保持不动
api:
  host: localhost                      # 管理面不对网,远程管理走 SSH 隧道
  valid_api_keys:
    - <长随机串>                        # 别用示例值
smtp_settings:
  address: 127.0.0.1                   # 出站交给本机 MTA
  port: 25

# list-defaults.yml 建议落点(新列表继承)
send_encrypted_only: true              # 默认即 true,确认未放松
receive_authenticated_only: true       # 入站验签门(最强身份机制)
bounces_drop_on_headers:
  x-spam-flag: yes
max_message_size_kb: 10240
forward_all_incoming_to_admins: false  # 排障时才临时开

配套纪律:valid_api_keys 用密码管理器生成 ≥32 位随机串;TLS 指纹分发到每台运行 schleuder-cli 的客户端(schleuder-cli 的对应校验配置见 D1 篇);lists_dir 与数据库纳入加密备份。

六、常见配置错误速查

错误症状修正
改了 list-defaults.yml 以为存量列表会变「新列表有新行为,老列表没有」模板只影响新建;存量列表用 CLI 逐个改
改了 schleuder.yml 不重启 daemon新 API key / 新 SMTP 不生效systemctl restart schleuder-api-daemon
umask 写成带引号字符串或漏前导零列表目录权限异常保持裸数字 0077
4.x 升 5.x 留着旧 keyserver:拉不到公钥且无报错指向参数改写为 vks_keyserver/sks_keyserver
superadmin 填了另一个 Schleuder 列表故障通知回路/丢失填普通 postmaster 邮箱
valid_api_keys 为空CLI 全部 401配 key 后重启 daemon(B1 篇实测复现并解决)
远程 CLI 连不上 APIhost: localhost 只听回环评估后改 host 并配防火墙与证书校验

七、下一篇

参数就位后,真正的高频操作都发生在「邮件关键词命令」与 schleuder-cli 里。下一篇《常用 CLI 命令详解》以实测输出逐条演示列表创建、订阅管理、密钥操作与 API 探活的完整命令链。