Schleuder 5.0.0 配置参数详解:schleuder.yml 与 list-defaults.yml 逐项解析
逐项解析 Schleuder 全局配置 schleuder.yml 与列表模板 list-defaults.yml 的全部参数:三层生效规则、收发加密门槛组合、API 安全段、SMTP/数据库接线,附 4.0 与 5.0 配置差异实测 diff 与生产最小安全基线。
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) ← 实际层:每个列表自己的参数副本,运行时真正读的是这一层
三条关键生效规则(官方注释原文明确 + 实测确认):
- 模板层是快照不是引用:
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"(列表一旦创建就不受这些设置影响,它有自己的数据库选项集)。改模板不会波及存量列表; - 改存量列表要走 API/CLI:用
schleuder-cli lists save系命令改单个列表属性(详见 D1 篇); - 全局层立即生效但需重启:
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_level | warn | 全局 syslog 级别(列表专属消息写进各列表自己的日志文件)。可选 error/warn/info/debug |
superadmin | root@localhost | 全局维护者邮箱:发生严重列表故障时的通知地址,同时是管理员通知信的信封发件人。官方注释特别强调:别填成另一个 Schleuder 列表(会形成通知回路),应该像一个 postmaster 账号 |
umask | 0077 | 建文件/目录的权限掩码,默认仅属主可读写。官方注释警告:别改,改也必须保持数字类型且以 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_keyserver | https://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 + port | Schleuder 重加密后的所有出站信都从这里交给 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_keys | API 访问凭据白名单,列表内的任意字符串。所有 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_only | true | 出站只发密文(对订阅者的重加密出站;不影响 resend 转发件) |
receive_encrypted_only | false | 入站必须密文,否则退信。闭合加密列表的开关 |
receive_signed_only | false | 入站必须有效签名 |
receive_authenticated_only | false | 入站必须由订阅者密钥有效签名(最强身份门) |
receive_from_subscribed_emailaddresses_only | false | 入站 From 必须是已订阅地址。官方注释罕见地写下长警告:这是弱机制,发件人极易伪造,别依赖它;真正要关门请用 receive_authenticated_only。此选项仅为「还没普及 GPG 的封闭列表」过渡用 |
receive_admin_only | false | 入站必须由列表管理员密钥签名。公告/通知型列表专用(配合仅管理员可发) |
deliver_selfsent | true | 发件人自己也在订阅者中时,是否给他自己也回投一份 |
💡 组合心法:
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_msgid | true | 保留 Message-ID 系(In-Reply-To/References)以维持线程。官方注释明确警告隐私代价:窃听者可借回复链把密文串成线索。高敏列表可关 |
include_autocrypt_header | true | 出站加 Autocrypt 头(现代客户端可据此自动互换密钥) |
include_list_headers | true | 加 RFC 2369 List-* 头(List-Id 等,客户端退订/归档按钮依赖它) |
include_openpgp_header | true | 加 OpenPGP 头声明本列表偏好 |
openpgp_header_preference | signencrypt | OpenPGP 头里声明的偏好:sign/encrypt/signencrypt/unprotected/none |
set_reply_to_to_sender | false | 把出站 Reply-To 指回原发件人(避免「回复全列表」误伤),可用性向导 |
munge_from | false | 改写 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_all | false | 静默丢弃所有未过 receive_*_only 门槛的来信 |
bounces_drop_on_headers | x-spam-flag: yes | 按头匹配丢弃(键值不区分大小写的哈希)。默认盯 Spam 标记 |
bounces_notify_admins | true | 有人被退信/丢弃时通知管理员 |
max_message_size_kb | 10240 | 单信上限 10 MB,超限退信 |
log_level(列表级) | warn | 列表日志详细度(error/warn/info/debug) |
logfiles_to_keep | 2 | 保留几份列表日志(日志按天轮转,2 = 只留昨天+今天) |
3.6 行为杂项组
| 参数 | 默认 | 含义 |
|---|---|---|
language | en | 自动回复与报错文案语言,可选 en、de |
forward_all_incoming_to_admins | false | 所有来信原始副本转发管理员——排障利器,平时别开 |
key_auto_import_from_email | false | 5.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 连不上 API | host: localhost 只听回环 | 评估后改 host 并配防火墙与证书校验 |
七、下一篇
参数就位后,真正的高频操作都发生在「邮件关键词命令」与 schleuder-cli 里。下一篇《常用 CLI 命令详解》以实测输出逐条演示列表创建、订阅管理、密钥操作与 API 探活的完整命令链。