建立-IRC-服务器
介绍
这里用 UnrealIRCd 来搭建.
UnrealIRCd 是一个开源的 IRC Server 软件, 其模块化以及安全做得比较好, 可以用配置文件深度配置.
安装
从源码编译安装
至少需要编译器以及 OpenSSL library, 以 Ubuntu 为例:
1 |
|
注意不要用 root 编译和运行 IRCd.
具体步骤如下:
1 |
|
也可以用 git
拉取:
1 |
|
包管理器
比如在 Archlinux 上可直接用 pacman
安装:
1 |
|
Docker 安装
1 |
|
配置
创建配置文件
1 |
|
(~/unrealircd
为前面编译的目录)
配置语法
官方配置语法文档
UnrealIRCd 都使用 block-based-format (也就是基于 “块”), 比如:
1 |
|
<block-value>
有些不需要设置<block-directive>
行需要以;
结尾<directive-value>
也可以是一个 block
比如:
1 |
|
上述的定义可以用一种特殊的 notation 来引用, 比如第一个 block 中的 name, 可以记为 me::name
注释可以为:
1 |
|
基本使用
启动服务
1 |
|
特性
模块化
比如一些 channel modes, user modes 都在模块里可以自己添加.
加载模块
在 unrealircd.conf
中添加:
1 |
|
查找可用的模块
可以查看 modules.default.conf
文件, 其他的可以查看下面链接:
第三方模块, 可在 这里查找.
如何使用第三方模块可查看 How to install 3rd party modules.
认证
比如可以限制连接的 IP, 具体可以看 这里.
SSL/TLS
几乎所有 IRC 客户端都支持 SSL/TLS, 但需要在连接时指定启用了 SSL 的端口 (具体配置可见 官方文档), 默认是 6697
.
比如用 irssi
连接时:
1 |
|
默认情况, UnrealIRCd 会创建一个自签名证书, 但大多情况下 client 会将其标记为 untrusted 导致 refuse to connect. 可以用 Let's Encrypt
自己申请.
Oper block
可以在 oper block 中定义 IRC Operator 账号. 之后则可以用 /OPER
切换到 IRCOp 账号.
定义语法为:
1 |
|
<name>
和<password>
用于切换到 OPER 用户时的认证, 如/OPER name password
mask
指定哪些 host/IP 可以登录到 OPER, 比如mask *;
表示允许所有,mask { 192.168.0.0/16; *.example.net; }
指定 host/IPclass
, 用于管理用户权限, 定义class
的语法后头讲operclass
, 用于配置 IRCOp 权限, 默认 list of operclasses 可以在 这里查看, 权限最高的为netadmin
和netadmin-with-override
auto-login
, 对于满足 mask 的 host/IP 可以免密登录maxlogins
, 限制同时从 host/IP 登录的用户数vhost
, “virtual host”, 在登录成功后会设置成 hostnameswhois
, 添加信息到/WHOIS
的输出, 比如swhois "a Network Administrator";
modes
, 用于设置 user modessnomask
, “server notice mask”, 即设置一个 mask, 控制给用户的通知信息, 默认使用set::snomask-on-oper
设置的值auto-join
, 设置登录到 OPER 时加入的 channel, 如auto-join "#opers,#staff";
. 默认情况下登录到set::oper-auto-join
的值
示例:
1 |
|
IRC Operator Guide
IRC Operator 的一些权限包括:
- 可以加入任何 channel
- 可以获取任何 channel 的管理员权限
- 可以 kick or ban a user
踢出一个 user
即让一个 user 断开连接:
1 |
|
(用户可以尝试重新连接)
Ban 掉一个用户
可以指定 ban 的时间, 即这段时间内无法连接上当前服务器:
1 |
|
也可以让用户无法连接到整个网络中的所有服务器, 如:
1 |
|
若用 /ZLINE
和 /GZLINE
, 可以让用户不产生 handshake.
解除一个用户的 ban 状态
用 /ELINE
如:
1 |
|
也可以用 /KLINE
:
1 |
|
之后用户就可以重新连接到服务器.
防止部分用户被 ban 掉
1 |
|
这样来自 198.51.100.1
的所有主机都不会被 ban.
查看信息
用户列表
1 |
|
可以查看连接到 network 的所有用户.
1 |
|
可以查看所有 real hosts.
1 |
|
可以查看所有 IP addresses.
查看用户详细信息
1 |
|
查看 channel 列表
1 |
|
查看 ban list
1 |
|
查看 channel members
1 |
|
或:
1 |
|
加入本不可加入的 channel
如果加入一个 channel 时报错 Channel is invite only (+i)
, 则可:
1 |
|
若有 override 权限, 则可用:
1 |
|
更换 modes
如果有 override 权限, 则可改变 channel 的权限:
1 |
|
让自己无法被 ban
1 |
|
Linking Servers
如果想让 IRC network 跑在多个 server 上, 则需要 “link”.
负载均衡
可见 官网.
永久设置选项
默认情况下对 channel 的设置是临时的, 需要加上 +P
“Permanent” 选项 (会写入数据库文件).
网页管理页面
UnrealIRCd 提供了一个网页可查看服务, 用户信息. (需要额外配置和安装)
JSON-RPC
JSON-RPC 提供了一些 API 与 UnrealIRCd 交互, 可获取/修改/添加, 包括 user/channel/severs/bans 等信息. (需要额外配置)