Eggdrop 1.10.2 配置参数详解
逐域讲清 Eggdrop 1.10.2 主配置文件 eggdrop.conf 的参数体系:30 个配置域逐项释义、默认值、.rehash 热加载与 .set 运行时调整实测,附生产最小模板。
Eggdrop 1.10.2 配置参数详解
目标:逐域讲清 Eggdrop 1.10.2 主配置文件(
eggdrop.conf,约 1700 行、30 个配置域)的参数体系,给出每一项的含义、默认值与实测生效方式,并附一份可直接投产的最小配置模板。全文配置原文与热加载回显均在 Ubuntu 22.04.5 LTS + Eggdrop 1.10.2 源码编译实例上实测。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(Jammy),x86_64
- 软件版本:Eggdrop 1.10.2(2026-09-06 稳定版,源码编译安装于
/opt/eggdrop) - 配置文件:Tcl 格式的单一文本文件(示例
eggdrop.conf67KB,工作配置testbot.conf) - 验证手段:partyline
.rehash热加载、.set <变量>运行时查询、grep定位原文
二、前置条件
- 已按《Ubuntu 22.04 安装 Eggdrop 1.10.2 指南》完成安装并成功首启(拿到 owner 账号)。
- 能通过 telnet 登录 partyline(
.rehash、.set等命令在其中执行)。 - 具备基础 Tcl 语法常识:配置文件本质是 Tcl 脚本,
set 变量 值赋值,#注释,#开头的配置项即「未启用、用编译内置默认值」。
三、配置体系总览
Eggdrop 的全部行为由单个配置文件驱动。1.10.2 官方示例 eggdrop.conf 按 #####/#### 标题划分为 30 个配置域(实测 grep -n '####' eggdrop.conf 提取):
| # | 配置域 | 作用 | 本篇章节 |
|---|---|---|---|
| 1 | BASIC SETTINGS | ident 用户名、管理员、时区 | 5.1 |
| 2 | LOG FILES | 日志分级、logfile 定义、轮转 | 5.2 |
| 3 | CONSOLE | partyline 默认控制台模式 | 5.3 |
| 4 | FILES AND DIRECTORIES | 用户库/pid/帮助/文本路径 | 5.4 |
| 5 | BOTNET/DCC/TELNET | 监听端口、botnet、防洪水 | 5.5 |
| 6 | SSL SETTINGS | 证书、协议、验证策略 | 5.6 |
| 7 | MORE ADVANCED SETTINGS | owner、must-be-owner、die 防呆 | 5.7 |
| 8 | PBKDF2 / BLOWFISH / PYTHON | 口令哈希与脚本扩展模块 | 5.8 |
| 9 | CHANNELS MODULE | 频道默认值与 channel add | 5.9 |
| 10 | SERVER MODULE | 网络类型、昵称、server add | 5.10 |
| 11 | CAP Features | IRCv3 能力与 SASL 认证 | 5.11 |
| 12 | CTCP / IRC / TWITCH | CTCP 应答、IRC 行为、Twitch | 5.12 |
| 13 | TRANSFER / SHARE / COMPRESS / FILESYSTEM | DCC 传输、用户库共享、文件服务 | 5.13 |
| 14 | NOTES / CONSOLE / WOOBIE / SEEN / ASSOC / UPTIME / IDENT | 便签、控制台保存、杂项模块 | 5.14 |
| 15 | WEBUI / AUTOSCRIPTS / TCL / PYTHON SCRIPTS | Web 界面与脚本加载 | 5.15 |
两个「防呆」拦截行(不改配置直接启动会被它们拦下退出):
grep -n '^die' eggdrop.conf
592:die "Please make sure you edit your config file completely."
1564:die "You didn't edit your config file completely like you were told, did you?"
⚠️ 注意:完成配置后必须删除这两行
die,否则机器人拒绝启动。这是官方刻意设计,强制你通读配置。
四、参数修改与生效方式
Eggdrop 参数有三个层级,生效方式不同:
| 方式 | 操作 | 生效范围 |
|---|---|---|
改配置文件 + .rehash | 编辑 conf 后在 partyline 执行 .rehash | 绝大多数参数热生效,无需重启 |
.set <变量> <值> | partyline 直接改运行时变量 | 立即生效,但不写回配置文件,重启后丢失 |
| 重启进程 | 部分结构性参数(如 max-logs 调小、listen 端口在某些场景) | 需完整重启 |
.rehash 热加载实测回显:
.rehash
[05:14:24] #admin# rehash
Rehashing.
[05:14:24] Writing user file...
[05:14:24] Writing channel file...
[05:14:24] Rehashing ...
[05:14:24] Listening for telnet connections on 0.0.0.0 port 3333 (all).
[05:14:24] Loading dccwhois.tcl...
[05:14:24] Loaded dccwhois.tcl
[05:14:24] Userfile loaded, unpacking...
运行时查询参数当前值(.set 只带变量名即查询):
.set must-be-owner
[05:14:33] #admin# set must-be-owner
Currently: 1
五、核心参数分类详解
5.1 BASIC SETTINGS(基础身份)
| 参数 | 默认值 | 说明 |
|---|---|---|
set username | "lamest" | 机器人 IRC ident 用户名;若系统跑了 identd 则以 identd 为准 |
set admin | "Lamer <email: lamer@lamest.lame.org>" | 管理员联系信息,展示在 .status、/msg help 等处 |
set network | "I.didn't.edit.my.config.file.net" | 所属 IRC 网络名,供 botnet 内展示 |
set timezone | "America/New_York" | 时区,影响日志时间戳与脚本;国内建议 Asia/Shanghai |
set env(TZ) | 注释状态 | 取消注释后让时区在脚本之外也处处生效 |
5.2 LOG FILES(日志体系)
Eggdrop 按「事件类别字母」分流日志,每个 logfile 绑定一个频道(* 表示全部频道)。
事件类别字母(照抄官方注释):b botnet 链接与用户库共享、c 命令、d 调试、g/h 出站/入站共享流量、j 进出频道/断网、k 踢人/封禁/模式、l 已链接机器人消息、m 私信/notice/ctcp、o 杂项与错误(重要)、p 频道公开发言、r/v 入站/出站服务器原始流量、s 服务器连接事件、t/u 入站/出站 botnet 原始流量、w wallops、x 文件传输。另有 1-8 八个自定义级别供 Tcl 脚本用。
| 参数 | 默认值 | 说明 |
|---|---|---|
set max-logs | 20 | 并发日志文件上限;调小需重启(rehash 不够),且不得低于 5 |
set max-logsize | 0 | 单文件上限(KB),0 不限制;仅在 keep-all-logs 0 时生效 |
set raw-log | 0 | 允许 r/v/t/u/g/h 原始流量日志。安全提示:可能泄露用户口令,仅 +n 用户可用 |
logfile mco * "logs/eggdrop.log" | 启用 | 主日志:私信+命令+杂项,全频道 |
set log-time | 1 | 日志带时间戳 |
set timestamp-format | {[%H:%M:%S]} | 时间戳格式(strftime 语法,32 字符内) |
set keep-all-logs | 0 | 1 则永久保留日志并按 logfile-suffix 滚动命名 |
set switch-logfiles-at | 300 | 每日切日志时间(军用时间,300=凌晨 3 点) |
set quiet-save | 0 | 1 不再记录 "Writing user file...";2 连备份也不记;3 再连切日志也不记 |
💡 说明:d/h/r/t/v 五类原始流量日志会快速撑爆磁盘配额,仅排障时临时开启。
5.3 CONSOLE(全局默认控制台)
| 参数 | 默认值 | 说明 |
|---|---|---|
set console | "mkcoblxs" | 用户登录 partyline 后的默认控制台事件模式(字母含义同日志);个人可用 .console 命令自改 |
5.4 FILES AND DIRECTORIES(文件与路径)
| 参数 | 默认值 | 说明 |
|---|---|---|
set userfile | "LamestBot.user" | 用户库存档文件名 |
set pidfile | 注释状态 | 不设置时默认 pid.<botnet-nick>;systemd 托管建议显式指定 |
set help-path | "help/" | 帮助文件目录 |
set text-path | "text/" | 文本文件目录(MOTD、banner 等) |
set motd | "text/motd" | DCC/telnet 登录后展示的欢迎信息 |
set telnet-banner | "text/banner" | telnet 连接建立时展示的横幅 |
set userfile-perm | 0600 | 用户库/频道库/便签文件的八进制权限;默认 0600 最安全 |
5.5 BOTNET/DCC/TELNET(监听与 botnet)
这是安全敏感区,核心语法是 listen:
listen 3333 all # 单端口同时服务用户与机器人
listen 3333 bots # 分端口:仅机器人
listen 4444 users # 仅用户
listen +5555 all # 端口前加 + = SSL 监听
listen 1.2.3.4 3333 all # 绑定指定本机 IP(替代 1.9 前的 listen-addr)
| 参数 | 默认值 | 说明 |
|---|---|---|
#listen 3333 all | 注释状态 | 默认不监听!必须取消注释并改掉 3333 这个众人皆知的端口 |
set botnet-nick | 注释状态 | botnet 上用与 IRC 不同的昵称时设置 |
set remote-boots | 2 | 是否允许 botnet 内其他机器人踢本机用户:0 全禁/1 仅共享机器人/2 任意 |
set share-unlinks | 1 | 允许远程机器人让本机与共享机器人断链 |
set protect-telnet | 0 | 1 则拒绝主机名不匹配的 telnet 连接 |
set dcc-sanitycheck | 0 | 1 则忽略信息可疑的 DCC chat 请求 |
set ident-timeout | 5 | ident 查询超时秒数,0 完全禁用 |
set require-p | 1 | +o 用户是否还需 +p 标志才能 DCC 连接 |
set open-telnets | 0 | 1 则允许任何人 telnet 后输入 NEW 自助注册(类似 hello 命令) |
set stealth-telnets | 0 | 1 则 telnet 横幅不暴露 eggdrop 身份 |
set use-telnet-banner | 0 | 1 则 telnet 时展示 telnet-banner 文件内容 |
set connect-timeout | 15 | DCC chat/telnet/relay 建立超时秒数 |
set dcc-flood-thr | 3 | partyline 每秒超过 N 行判为洪水并踢出 |
set telnet-flood | 16:60 | 同一主机 60 秒内 16 次 telnet 尝试即判洪水(格式 次数:秒) |
set paranoid-telnet-flood | 1 | 1 则 telnet-flood 对 +f 用户也生效 |
set resolve-timeout | 注释状态 | 主机名解析超时秒数,慢网络可调大 |
⚠️ 同机多开机器人时,telnet 端口至少间隔 5,最好间隔 10(官方注释原文要求)。
5.6 SSL SETTINGS(编译时启用 TLS 后生效)
| 参数 | 默认值 | 说明 |
|---|---|---|
set ssl-privatekey | 注释状态 | SSL 私钥(PEM)。做 SSL hub/SSL 监听/NickServ 证书认证时必须设置 |
set ssl-certificate | 注释状态 | SSL 证书(PEM)。不设则无法充当 SSL 服务端 |
set ssl-verify-depth | 9 | 证书链验证最大深度 |
set ssl-capath | "/etc/ssl/" | CA 证书目录;不设则证书验证不可用 |
set ssl-protocols | 注释状态 | 允许协议列表,如 "TLSv1.2 TLSv1.3" |
set ssl-ciphers | 注释状态 | 加密套件列表(如 "DEFAULT ADH"),设置后覆盖 OpenSSL 默认 |
set ssl-dhparam | 注释状态 | DH 参数文件(DH 密钥交换时需要) |
set ssl-cert-auth | 0 | 1 允许证书指纹自动登录;2 强制指纹登录(指纹用 .fprint/.chfinger 预录) |
set ssl-verify-dcc/bots/clients | 0 | 分别控制 DCC、botnet 链接、SSL 监听端口的证书验证,0 关闭 |
证书自签名生成一条命令(官方注释给出):make install 后在安装目录执行 make sslcert 即可同时得到 key 与 crt。
5.7 MORE ADVANCED SETTINGS(高级与 owner 声明)
| 参数 | 默认值 | 说明 |
|---|---|---|
set owner | 注释状态 | 声明永久 owner 句柄列表,如 "MrLame, MrsLame"。强烈建议设置,否则 .tcl/.set 无人可用 |
set must-be-owner | 1 | 1:.tcl/.set/.python 仅永久 owner 可用;2:连 .dump 也仅限永久 owner。设为 0 等于把宿主机 shell 交出去,官方明确警告不要这么做 |
set notify-newusers | "$owner" | 新用户注册时发便签通知谁 |
set default-flags | "hp" | hello 命令自助注册用户的默认标志 |
set whois-fields | "url birthday" | .whois 额外展示的自定义字段 |
set ignore-time | 15 | 临时 ignore 的分钟数 |
set hourly-updates | 00 | 每小时的第 N 分钟执行「每小时任务」(存用户库、便签提醒等) |
set max-socks | 100 | 套接字连接上限;只能调大不能调到低于当前用量 |
set allow-dk-cmds | 1 | 允许 +d/+k 用户使用绑定为 -|- 的命令 |
set dupwait-timeout | 5 | botnet 重名机器人复检等待秒数 |
set cidr-support | 0 | 1 启用 CIDR 记法 b/e/I 模式;网络不支持时不要开 |
set show-uname | 1 | 0 则不在 motd 等处展示操作系统信息 |
set firewall / set nat-ip | 注释状态 | 代理/NAT 环境的外联地址与对外 IP |
set reserved-portrange | 注释状态 | 限定 DCC 文件传输端口范围,如 2010:2020 |
另外两条安全相关的 unbind(默认状态值得知道):
#unbind dcc n tcl *dcc:tcl # 取消注释可彻底禁用 .tcl
#unbind dcc n set *dcc:set # 取消注释可彻底禁用 .set
unbind dcc n simul *dcc:simul # 默认已禁用 .simul(操纵他人 partyline 会话)
5.8 加密与脚本扩展模块(PBKDF2 / BLOWFISH / PYTHON)
Eggdrop 没有加密模块会拒绝启动(用户库口令要哈希存储)。
| 参数 | 默认值 | 说明 |
|---|---|---|
loadmodule pbkdf2 | 启用 | 1.9.0 起的主力哈希模块;新机器人只加载它即可 |
set pbkdf2-method | "SHA256" | 哈希算法(openssl list -digest-algorithms 可查可选值) |
set pbkdf2-rounds | 16000 | 迭代轮数,越高越抗暴破也越耗时 |
set remove-pass | 0 | 迁移完成后是否删除旧 blowfish 哈希。官方警告:不懂不要动,2026 年路线图拟在 2.0 默认开启 |
loadmodule blowfish | 启用 | 旧加密模块(2.0 拟移除);1.8 及更早的用户库迁移期要与 pbkdf2 并存,用户首次登录后哈希自动升级为 PBKDF2 |
set blowfish-use-mode | cbc | Tcl encrypt/decrypt 命令用 CBC(1.9 前默认不安全的 ECB) |
#loadmodule python | 注释状态 | Python 脚本扩展(需 Python ≥ 3.8),加载后用 pysource 引入 .py |
⚠️ botnet 内所有机器人的加密模块配置必须一致,否则链接时出现口令问题(官方注释原文)。
5.9 CHANNELS MODULE(频道体系)
loadmodule channels 是机器人进频道的前提;set chanfile 指定频道动态数据落盘文件。
新频道(.+chan)默认值一组:
| 参数 | 默认值 | 说明 |
|---|---|---|
set default-chanmode | "nt" | 强制频道模式(+n 禁止外部消息、+t 仅 op 改主题) |
set default-flood-chan | 15:60 | 频道消息洪水阈值(条数:秒),0 或 0:X 关闭防护 |
set default-flood-deop/kick | 3:10 | deop/kick 洪水阈值 |
set default-flood-join | 5:60 | 加入洪水阈值 |
set default-flood-ctcp | 3:60 | CTCP 洪水阈值 |
set default-flood-nick | 5:60 | 改名洪水阈值 |
set default-aop-delay | 5:30 | 自动 op/voice 随机延迟(秒区间,防模式刷屏) |
set default-idle-kick | 0 | 闲置踢出分钟数,0 不踢 |
set default-ban-type | 3 | 封禁掩码类型 3 = *!*user@*.host(0-39 共 40 种掩码模板) |
set default-ban-time | 120 | 临时封禁分钟数,0 永不解封 |
set default-exempt-time / default-invite-time | 60 | 临时豁免/邀请分钟数(IRCnet 特性) |
set default-stopnethack-mode | 0 | 对带 serverop 进频道者的处置(0 关闭,共 7 档) |
set default-revenge-mode | 0 | 报复模式惩罚力度:0 仅 deop → 3 deop+标记+踢+封 |
set default-chanset | 一长串 | 新频道开关模板,如 +greet +cycle +protectops +dynamicbans -autoop ... |
配置文件里直接登记频道(官方更推荐 partyline .+chan,会写入 chanfile 持久化):
#channel add #lamest
.chaninfo 实测可查看某频道全部生效项(节选):
Settings for dynamic channel #eggdrop-test:
Protect modes (chanmode): +tn
ban-type: 3
ban-time: 120
Other modes:
+greet +cycle +dontkickops +protectops
+dynamicbans +userbans ...
flood settings: chan ctcp join kick deop nick
number: 15 3 5 3 3 5
time : 60 60 60 10 10 60
5.10 SERVER MODULE(IRC 服务器接入)
| 参数 | 默认值 | 说明 |
|---|---|---|
loadmodule server | 启用 | 不加载等于完全不上 IRC(旧 NO_IRC) |
set net-type | "EFnet" | 网络类型:EFnet/IRCnet/Undernet/DALnet/Libera/freenode/QuakeNet/Rizon/Twitch/Other;影响 IRC 模块若干行为 |
set nick | "Lamestbot" | 机器人 IRC 昵称(也是 botnet 昵称,除非另设 botnet-nick) |
set altnick | "Llamab?t" | 昵称被占时的备选,? 替换为随机数字 |
set realname | "/msg LamestBot hello" | realname 字段,不能为空 |
set default-port | 6667 | server add 未写端口时的默认 |
server add <host> [port [password]] | 示例地址 | 服务器列表,断线按序轮询;端口前加 + 走 SSL,如 server add ssl.example.net +7000;1.9.0 起的新语法,旧 set servers {} 已废弃 |
set ssl-verify-server | 0 | IRC 服务器证书验证(取值同 5.6 验证策略) |
连接后自动执行的初始化脚本(NickServ 认证在这取消注释):
bind evnt - init-server evnt:init_server
proc evnt:init_server {type} {
global botnick
putquick "MODE $botnick +i-ws"
# putserv "PRIVMSG NickServ :identify <password>"
}
5.11 CAP Features(IRCv3 与 SASL)
Eggdrop 原生支持的 IRCv3 能力:account-notify, account-tag, away-notify, chghost, echo-message, extended-join, invite-notify, message-tags, server-time, sasl, setname, +typing(服务器支持情况可用 partyline .tcl cap ls 查询)。
| 参数 | 默认值 | 说明 |
|---|---|---|
set sasl | 注释状态 | 1 则在注册阶段即向 NickServ 做 SASL 认证,省去事后 /msg identify |
set sasl-mechanism | 0 | 0 PLAIN / 1 ECDSA-NIST256P-CHALLENGE / 2 EXTERNAL / 3 SCRAM-SHA-256 / 4 SCRAM-SHA-512 |
set sasl-username / sasl-password | 注释状态 | NickServ 账号口令 |
set sasl-continue | 1 | SASL 失败后:0 断开重试直到成功;1 不带认证继续连 |
set sasl-timeout | 15 | SASL 认证超时秒数 |
set account-notify | 1 | 默认已开:跟踪他人账号登录状态 |
set extended-join | 1 | 默认已开:join 消息携带账号与真实名 |
set cap-request | 注释状态 | 额外 CAP 能力,空格分隔 |
5.12 CTCP / IRC / TWITCH
CTCP 模块:
| 参数 | 默认值 | 说明 |
|---|---|---|
loadmodule ctcp | 启用 | 不加载则 CTCP CHAT 不可用 |
set ctcp-mode | 0 | 0 正常应答;1 仅应答 +o 用户的 CHAT/PING;2 正常但按 flood-ctcp 限流 |
ctcp-version 等 | 脚本变量 | 可自定义 CTCP VERSION/FINGER/USERINFO 应答,降低机器人辨识度 |
IRC 模块关键项:
| 参数 | 默认值 | 说明 |
|---|---|---|
set learn-users | 0 | 1 允许用户 /msg bot hello 自助注册 |
set wait-split | 600 | 等 netsplit 对方回归的秒数(IRCnet 建议 1500) |
set wait-info | 180 | 用户离频道多久后重新展示其 info 行 |
set mode-buf-length | 200 | 发给服务器的 mode 参数最大字节数 |
set opchars | "@" | 识别为 op 的前缀字符;UnrealIRCd 类网络用 "@&~" |
set no-chanrec-info | 0 | 1 则对无频道记录用户也展示 info 行 |
set prevent-mixing | 1 | 仅 net-type=IRCnet 用:b/o/v 与 e/I 模式不混发 |
set bounce-bans/exempts/invites/modes | 0 | 是否反弹服务器下发的对应模式 |
unbind msg - ident *msg:ident | 启用 | 默认解绑私信 ident/addhost 命令,防暴破口令 |
TWITCH 模块(#loadmodule twitch,默认关):仅在连接 Twitch 平台时加载,Twitch 的 IRC 网关不遵循 RFC。
5.13 TRANSFER / SHARE / COMPRESS / FILESYSTEM
| 参数 | 默认值 | 说明 |
|---|---|---|
#loadmodule transfer | 注释状态 | DCC SEND/GET 与用户库传输支持 |
set max-dloads | 3 | 每用户并发下载上限 |
set dcc-block | 0 | DCC 块大小,0 = turbo-dcc(官方推荐) |
set xfer-timeout | 30 | 传输闲置超时秒数 |
#loadmodule share | 注释状态 | 两台直连机器人间共享用户库(botnet 核心) |
set private-global / private-globals / private-user | 注释状态 | 共享时拒收对端哪些改动;hub 上建议开 private-user |
#loadmodule compress | 注释状态 | 用户库共享压缩(依赖 share 模块) |
set share-compressed | 1 | 压缩传输开关 |
#loadmodule filesys | 注释状态 | 把机器人变成文件服务器 |
set files-path / incoming-path | 示例路径 | 文件区根目录 / 上传目录(空串禁上传) |
set max-filesize | 1024 | 接收文件上限 KB,0 不限 |
5.14 NOTES / CONSOLE / 杂项模块
| 模块/参数 | 默认值 | 说明 |
|---|---|---|
loadmodule notes | 启用 | 用户间离线便签 |
set notefile | "LamestBot.notes" | 便签存储文件 |
set max-notes | 50 | 每用户便签上限(防洪水) |
set note-life | 60 | 便签保留天数 |
set notify-onjoin | 1 | 用户进频道时提醒有未读便签 |
loadmodule console | 启用 | 退出时保存各人控制台设置 |
set console-autosave | 1 | 自动保存,否则需手动 .store |
#loadmodule woobie | 注释状态 | 模块编写示范,无实际用途 |
#loadmodule seen | 注释状态 | seen 查询(更强大的替代品是第三方 gseen.mod) |
#loadmodule assoc | 注释状态 | 给 botnet 频道命名 |
loadmodule uptime | 启用 | 向 eggheads.org 上报在线时长;介意隐私就注释掉 |
#loadmodule ident | 注释状态 | 对接 oidentd(ident-method 0)或内置 identd(ident-method 1,需绑定 113 端口权限) |
第二个防呆 die 就在 NOTES 段末尾(1564 行),紧随其后的还有一行源码目录检测:在编译目录里直接运行会被 die {You are attempting to run Eggdrop from the source directory...} 拦下。
5.15 WEBUI / AUTOSCRIPTS / 脚本加载
#### WEBUI MODULE ####
#loadmodule webui
#listen 8080 webui # http
#listen +8443 webui # https(需先配 ssl-certificate)
WebUI 是 1.10 新增的 Web 管理界面,默认关闭;开启方式即加载模块 + 一条专用 listen。
##### AUTOSCRIPTS #####
source scripts/autoscripts.tcl
##### TCL SCRIPTS #####
source scripts/alltools.tcl
source scripts/action.fix.tcl
source scripts/dccwhois.tcl
source scripts/userinfo.tcl
loadhelp userinfo.help
#source scripts/compat.tcl # 老脚本兼容层,可能与新脚本冲突
##### PYTHON SCRIPTS #####
# pysource scripts/mypythonscript.py
⚠️ 实测提示:Autoscripts 依赖 Tcl 的 json 包(Ubuntu 由
tcllib提供),缺失时启动日志报json is not installed. Autoscripts cannot load,不影响核心功能,apt-get install -y tcllib后重启消除。
六、生产配置最小模板
把「能安全跑起来」的最小改动集汇总如下(基于 1.10.2 官方 eggdrop.conf,改动项即安装篇 5.6 表格的扩展):
##### 基础 #####
set username "mybot"
set admin "admin <email: admin@example.com>"
set network "ExampleNet"
set timezone "Asia/Shanghai"
set env(TZ) "$timezone"
##### 文件 #####
set userfile "mybot.user"
set chanfile "mybot.chan"
set pidfile "pid.mybot"
##### 监听(务必改掉 3333) #####
listen 3333 all
##### 安全 #####
set owner "admin"
set must-be-owner 1
set telnet-flood 5:60
##### 服务器与频道 #####
set nick "mybot"
set altnick "mybot?"
set realname "Example IRC bot"
set net-type "Other"
server add irc.example.com 6667
channel add #mychannel
##### 两个 die 防呆行:删除 #####
改完保存,partyline 执行 .rehash 热加载(或首次直接启动)。
七、常见问题
Q1:改完配置不重启能生效吗?
绝大多数能。partyline 执行 .rehash 即可(实测回显见第四节)。例外:max-logs 调小、部分结构性变更需完整重启。
Q2:.set 改的参数重启后丢了?
.set 只改运行时内存,不回写配置文件。要持久化必须编辑 conf 文件。
Q3:telnet 连 3333 被拒/无监听?
listen 行默认是注释的(#listen 3333 all),必须取消注释;改完 .rehash,用 ss -ltn | grep 3333 验证。生产环境同时把 3333 改成冷门端口并收紧 telnet-flood。
Q4:.tcl 提示 What? You need '.help'?
must-be-owner 1(默认)下 .tcl 仅永久 owner 可用,而永久 owner 必须在配置文件里用 set owner "admin" 显式声明(telnet NEW 注册的 owner 不算)。加配置 + .rehash 后实测 .tcl expr {2+3} 返回 Tcl: 5。
Q5:SSL 端口(listen +5555 all)起不来?
ssl-privatekey 与 ssl-certificate 两个都必须设置(官方原文标注 MUST be uncommented)。安装目录执行 make sslcert 可一键生成自签名对。
Q6:.rehash 后报 json is not installed. Autoscripts cannot load?
非错误。Autoscripts 自动脚本机制依赖 tcllib;需要它时 apt-get install -y tcllib 并重启,否则忽略。
Q7:pbkdf2 和 blowfish 两个模块都要加载吗? 全新机器人:只加载 pbkdf2 即可。从 1.8 及更早迁移用户库:两个都加载,用户首次登录后哈希自动升级为 PBKDF2,最终可移除 blowfish。botnet 内各机器人此项配置必须一致。
八、参考链接
- Eggdrop 官方文档站(配置手册):https://docs.eggheads.org/
- Eggdrop 官方仓库(含完整 eggdrop.conf 源文件):https://github.com/eggheads/eggdrop
- IRCv3 能力各网络支持矩阵:https://ircv3.net/support/networks.html