IRC 服务器搭建完全指南 / 第 5 章:用户管理
第 5 章:用户管理
用户是 IRC 网络的核心。本章详解用户模式、身份认证、昵称注册和隐私保护等关键主题。
5.1 用户标识体系
5.1.1 完整用户标识
IRC 中一个用户的完整标识格式为:
昵称!用户名@主机名
[email protected]
| 部分 | 英文 | 说明 | 示例 |
|---|---|---|---|
| 昵称 | Nickname | 用户的显示名称 | alice |
| 用户名 | Username | 连接时的用户名(ident) | alice |
| 主机名 | Hostname | 用户的 IP 或掩码后主机名 | host.example.com |
5.1.2 三种标识来源
原始连接标识:
[email protected]
↑ ↑
~前缀 真实 IP
(无 ident)
有 ident 服务:
[email protected]
↑
无 ~ 前缀(已通过 ident 验证)
掩码后标识:
[email protected]
↑
Cloaking 后的主机名
SASL 登录后:
[email protected] (已认证为 alice)
5.1.3 用户信息查询
/* WHOIS 查询 */
/WHOIS alice
/* 输出示例 */
:irc.example.com 311 yournick alice alice host.example.com * :Alice Wonderland
:irc.example.com 312 yournick alice irc.example.com :My IRC Server
:irc.example.com 307 yournick alice :has identified for this nick
:irc.example.com 317 yournick alice 3600 1620000000 :seconds idle, signon time
:irc.example.com 318 yournick alice :End of /WHOIS list.
/* WHO 查询(获取频道中的用户列表) */
/WHO #channel
/* WHOWAS 查询(历史记录) */
/WHOWAS alice
5.2 用户模式详解
5.2.1 设置用户模式
/* 设置模式 */
/MODE yournick +<mode>
/* 取消模式 */
/MODE yournick -<mode>
/* 查看当前模式 */
/MODE yournick
5.2.2 用户模式参考表
| 模式 | 名称 | 说明 |
|---|---|---|
+i | Invisible | 不可见模式,不出现在 WHO 和 NAMES 中 |
+w | Wallops | 接收服务器管理员广播 |
+s | Server Notices | 接收服务器通知(Oper 专用) |
+g | Caller ID | 仅接受白名单用户的私信(UnrealIRCd) |
+R | Registered Only | 仅接受已注册用户的私信 |
+x | Cloaked | 启用主机掩码 |
+p | Private | WHOIS 时隐藏频道列表 |
+B | Bot | 标识为 Bot |
+z | Secure | 标识为 TLS 安全连接 |
+G | Censor | 启用内容过滤 |
+W | WHOIS | 接收 WHOIS 通知(Oper) |
+H | Hide Oper | 隐藏 Oper 状态 |
5.2.3 典型模式组合
/* 普通用户推荐设置 */
/MODE yournick +ix
/* 普通用户(高隐私) */
/MODE yournick +ixR
/* Bot 设置 */
/MODE yournick +Bix
/* Oper 设置 */
/MODE yournick +iwsgx
5.3 身份认证机制
5.3.1 认证方式总览
| 方式 | 说明 | 安全性 | IRCv3 支持 |
|---|---|---|---|
| NickServ 密码 | /NS IDENTIFY password | 中 | ❌ |
| SASL PLAIN | 用户名+密码 | 中高 | ✅ |
| SASL EXTERNAL | TLS 证书认证 | 高 | ✅ |
| SASL SCRAM-SHA-256 | 挑战-响应 | 高 | ✅ |
| CertFP | TLS 证书指纹 | 高 | ❌(传统方式) |
5.3.2 SASL 认证详解
SASL(Simple Authentication and Security Layer)是 IRCv3 标准化的认证机制。
SASL 认证流程:
┌──────────┐ ┌──────────┐
│ Client │ │ Server │
└────┬─────┘ └────┬─────┘
│ │
│ CAP LS 302 │
│──────────────────────────────►│
│ │
│ CAP * LS :sasl=PLAIN,EXTERNAL │
│◄──────────────────────────────│
│ │
│ CAP REQ :sasl=PLAIN │
│──────────────────────────────►│
│ │
│ CAP * ACK :sasl=PLAIN │
│◄──────────────────────────────│
│ │
│ AUTHENTICATE PLAIN │
│──────────────────────────────►│
│ │
│ AUTHENTICATE + │
│◄──────────────────────────────│
│ │
│ AUTHENTICATE <base64> │
│──────────────────────────────►│
│ │
│ 900 <nick> :You are now logged in
│◄──────────────────────────────│
│ │
│ 903 :SASL authentication successful
│◄──────────────────────────────│
│ │
│ CAP END │
│──────────────────────────────►│
5.3.3 SASL PLAIN 认证
SASL PLAIN 的认证数据格式:
\0username\0password
Base64 编码:
# 生成 SASL PLAIN 认证字符串
echo -ne '\0alice\0mypassword' | base64
# 输出: AGFsaWNlAG15cGFzc3dvcmQ=
客户端配置示例(Weechat):
# Weechat SASL 配置
/set irc.server.example.sasl_mechanism plain
/set irc.server.example.sasl_username "alice"
/set irc.server.example.sasl_password "mypassword"
/set irc.server.example.sasl_timeout 30
5.3.4 SASL EXTERNAL(证书认证)
SASL EXTERNAL 使用 TLS 客户端证书进行认证,无需密码:
步骤 1:生成客户端证书:
# 生成客户端私钥
openssl genrsa -out client.key 4096
# 生成证书签名请求(CSR)
openssl req -new -key client.key -out client.csr \
-subj "/CN=alice/O=MyIRCNet"
# 自签名生成证书
openssl x509 -req -in client.csr -signkey client.key \
-out client.crt -days 365
# 合并为 PEM 格式
cat client.key client.crt > client.pem
步骤 2:在 NickServ 中注册证书指纹:
/* 首先用其他方式登录 */
/NICK alice
/NS IDENTIFY mypassword
/* 添加当前 TLS 证书的指纹 */
/NS CERT ADD
/* 或者手动添加指纹 */
/NS CERT ADD <SHA-512 指纹>
步骤 3:配置客户端使用证书:
# Weechat 配置
/set irc.server.example.ssl_cert "%h/ssl/client.pem"
/set irc.server.example.sasl_mechanism external
5.3.5 CertFP(证书指纹认证)
CertFP 是传统(非 IRCv3 SASL)的证书认证方式:
/* 连接时自动使用证书 */
/* 服务器将你的证书指纹与 NickServ 中的记录比对 */
/* 在 NickServ 中添加证书 */
/NS CERT ADD <SHA-512 指纹>
/* 查看当前证书指纹 */
/NS CERT LIST
5.4 昵称注册(NickServ)
5.4.1 NickServ 基本命令
/* 注册昵称 */
/NS REGISTER <password> <email>
/* 示例 */
/NS REGISTER MySecurePass [email protected]
/* 登录(标识身份) */
/NS IDENTIFY <password>
/* 更改密码 */
/NS SET PASSWORD <new_password>
/* 设置邮箱 */
/NS SET EMAIL <new_email>
/* 释放昵称(放弃注册) */
/NS DROP <password>
/* 查看账户信息 */
/NS INFO <nick>
/* 获取验证码(某些服务包要求邮箱验证) */
/NS VERIFY REGISTER <nick> <code>
5.4.2 昵称保护策略
| 策略 | 说明 | 设置命令 |
|---|---|---|
| Kill | 强制占用者改名 | /NS SET KILL QUICK |
| Secure | 仅认证用户可使用 | /NS SET SECURE ON |
| NoExpire | 昵称永不过期 | /NS SET NOEXPIRE ON |
| Private | 隐藏在 INFO 中 | /NS SET PRIVATE ON |
| URL | 设置个人网站 | /NS SET URL https://example.com |
| 设置联系邮箱 | /NS SET EMAIL [email protected] |
5.4.3 昵称组(Group)
昵称组允许将多个昵称关联到同一账户:
/* 注册主昵称 */
/NICK alice
/NS REGISTER password [email protected]
/* 切换到关联昵称 */
/NICK alice_dev
/NS GROUP alice password
/* 现在 alice 和 alice_dev 共享同一账户 */
/* 查看组内所有昵称 */
/NS ALIST
/* 取消关联 */
/NS UNGROUP alice_dev
5.4.4 昵称找回
/* 发送找回邮件 */
/NS RECOVER <nick> <password>
/* 临时恢复昵称 */
/NS REGAIN <nick> <password>
/* 发送密码重置邮件 */
/NS SENDPASS <nick>
/* 通过验证码重置(某些服务包) */
/NS RESETPASS <nick>
5.5 主机掩码与隐私
5.5.1 主机掩码的作用
无掩码: [email protected] ← IP 暴露
有掩码: [email protected] ← IP 隐藏
5.5.2 虚拟主机(vhost)
Oper 可以为用户设置虚拟主机:
/* Oper 为用户设置 vhost */
/CHGHOST alice staff.example.com
/* 效果 */
/* 之前: [email protected] */
/* 之后: [email protected] */
5.5.3 HostServ
HostServ 是管理虚拟主机的服务:
/* 请求 vhost */
/HS REQUEST staff.example.com
/* Oper 批准 */
/HS APPROVE <nick>
/* 拒绝 */
/HS REJECT <nick> :原因
/* 激活已分配的 vhost */
/HS ON
/* 停用 vhost */
/HS OFF
/* 查看 vhost 状态 */
/HS STATUS <nick>
5.5.4 HostServ 配置
/* UnrealIRCd - 配置 HostServ */
/* 启用 HostServ */
set {
/* 允许的 vhost 前缀(需要 Anope 支持) */
}
/* 定义 vhost 掩码格式 */
/* 通常通过 Anope/Atheme 的 hostserv 模块配置 */
5.6 账户信息管理
5.6.1 账户设置
/* 设置个人 URL */
/NS SET URL https://example.com
/* 设置个人头像(IRCv3 标准中可能被弃用) */
/NS SET AVATAR https://example.com/avatar.png
/* 设置时区 */
/NS SET TIMEZONE Asia/Shanghai
/* 设置语言 */
/NS SET LANGUAGE zh-CN
/* 设置自动加入频道列表 */
/NS AJOIN ADD #welcome
/NS AJOIN ADD #general
/NS AJOIN DEL #welcome
/NS AJOIN LIST
/* 隐藏账户信息 */
/NS SET HIDE EMAIL ON
/NS SET HIDE USERMASK ON
5.6.2 账户关联
/* 将当前昵称关联到已有账户 */
/NS GROUP main_account password
/* 查看关联的昵称 */
/NS ALIST
/* 设置账户名(某些服务包) */
/NS SET ACCOUNTNAME myaccount
5.7 用户限制配置
5.7.1 服务器端限制
# Ergo 用户限制配置
limits:
max-nick-len: 32 # 昵称最大长度
ident-len: 20 # 用户名最大长度
away-len: 390 # 离开消息最大长度
kick-reason-len: 390 # 踢出原因最大长度
topic-len: 390 # 主题最大长度
away-count: 5 # 离开消息历史数
whowas-entries: 10 # WHOWAS 记录数
monitor-entries: 100 # 监控列表数
channels-per-client: 100 # 每用户最大频道数
accounts:
registration:
enabled: true
cooldown: "24h" # 注册冷却时间
max-name-length: 32 # 账户名最大长度
5.7.2 用户速率限制
/* UnrealIRCd 速率限制 */
set {
/* 消息速率限制 */
flood {
boot-delay 30; /* 启动后延迟 30 秒 */
message-rate 5; /* 每 5 秒最多 5 条消息 */
target-rate 3; /* 目标速率限制 */
}
}
5.8 用户监控与管理
5.8.1 WHO 查询
/* 查询频道中的所有用户 */
/WHO #channel
/* 按主机名查询 */
/WHO *.example.com
/* 按状态查询(已登录用户) */
/WHO * m
/* WHOX 格式(更详细的查询) */
/WHO #channel %uhnr
5.8.2 ISON / MONITOR
/* 检查用户是否在线(简单方式) */
/ISON alice bob charlie
/* 使用 MONITOR 服务(更强大) */
/MONITOR + alice bob charlie /* 添加监控 */
/MONITOR - alice /* 移除监控 */
/MONITOR S /* 查看监控列表 */
/MONITOR L /* 查看在线状态 */
5.8.3 用户管理操作
/* 踢出频道用户 */
/kick #channel bob :请遵守规则
/* 封禁频道用户 */
/mode #channel +b *!*@host.example.com
/* 服务器级封禁(需要 Oper 权限) */
/KLINE user@host :1d :违规行为 /* 临时封禁 */
/GLINE user@host :7d :严重违规 /* 全局封禁 */
/ZLINE *@192.168.1.100 :永久封禁 /* 按 IP 封禁 */
/SHUN user@host :静默忽略 /* 静默用户 */
/* 解封 */
/UNKLINE user@host
/UNGLINE user@host
/UNZLINE *@192.168.1.100
/UNSHUN user@host
5.9 ⚠️ 注意事项
| 事项 | 说明 |
|---|---|
| 昵称安全 | 使用强密码注册昵称,开启 Kill 和 Secure 保护 |
| SASL 优先 | 推荐使用 SASL 认证而非简单的 NickServ 密码 |
| 证书认证 | 生产环境建议使用 EXTERNAL(证书)认证 |
| 隐私保护 | 开启 +x 模式隐藏真实 IP |
| 昵称过期 | 注意 NickServ 的昵称过期策略,定期标识身份 |
| 多设备 | 使用昵称组管理多个设备上的身份 |
扩展阅读
下一章: 第 6 章:服务包集成 — Atheme/Anope 服务框架、NickServ/ChanServ/HostServ 详解。