最近呢,心血来潮了一下,想搭一个irc的服务器玩。于是在vps上试着用unrealircd搭了一个irc服务器。在此把步骤记一下。

unrealircd的安装

第一步,当然是安装了?因为vps是debian,默认软件包仓库没有unrealircd软件,所以这里就用编译安装了。

获取源代码

首先,下载源代码。执行:

1
wget --trust-server-names https://www.unrealircd.org/downloads/unrealircd-latest.tar.gz

或者点击这里以下载源码。然后,执行 tar -xzvf unrealircd-*.tar.gz 解压之前下载的源码包

编译

现在,移动到解压后的目录。

1
cd unrealircd

执行该目录下的./Config脚本,进行编译前的配置。配置完成后,执行

1
2
make
make install

完成unrealircd的安装。

此节参考该网页

配置

创建配置文件

移动至unrealircd安装目录。默认是/home/username/unrealircd

1
cd ~/unrealircd

将预定义的配置文件conf/examples/example.conf复制至conf目录中,并重命名为unrealircd.conf

1
cp conf/examples/example.conf conf/unrealircd.conf

使用习惯的文本编辑器打开conf/unrealircd.conf,这里用nano作为示例。

1
nano conf/unrealircd.conf

服务器描述信息

me{}块定义irc服务器的名称,一些描述信息还有一个服务器sid。找到配置文件中以"me"开头的块,按照下面编辑。一个me块示例:

1
2
3
4
5
me {
      name "此处更改为服务器名称,如“irc.ggwwff.ml”";
      info "服务器的描述信息";
      sid "服务器的id,如“001”(如果使用多台服务器构建irc服务器网络,sid需要保证唯一)";
};

管理员信息

admin{}块定义用户输入 /admin 时显示的内容,这里通常包含如何与管理员联系的信息。一个admin块示例:

1
2
3
4
admin {
    "第一行,比如说管理员名称";
    "第二行,比如说管理员邮箱";
};

连接控制

class块用于定义属于该类的用户的连接频率和次数,默认定义了3个块,分别是"clients"“opers"“servers”,默认够用,这里就不改了。一个class块示例配置:

1
2
3
4
5
6
7
8
class <类名称> { //描述性名称,用于从其他块引用此类
      pingfreq <秒数>;  //pingfreq指定了服务器ping用户间隔的秒数(建议90-180)
      connfreq <秒数>;  //connfreq仅用于服务器,指定了启用自动连接后,两次连接间隔的秒数
      maxclients <最大客户端数>; //maxclients指定了此类中在线最大客户端/服务器的数量。
      sendq <数据量>;   //sendq指定了发送队列的最大数据量
      recvq <数据量>;   //recvq指定里接受队列中的最大数据量(默认值8000)
      //options { nofakelag; };
};

参考:https://www.unrealircd.org/docs/Class%5Fblock

限制访问

allow块决定哪些设备能够访问irc服务器,一般来说,默认能用。一个allow块示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
allow {
      /* 注意,必须指定ip或hostname,但是你不能同时指定 */
      ip <user@ip-connection-mask>;  /*  指定允许访问的ip */
      hostname <user@host-connection-mask>;

      /* 其他必选项 */
      class <类名称>;  //上面定义的类的名称
      maxperip <每个ip的最大连接数>;

      /* 可选项 */
      password <connection-password> { <auth-type>; }; /* OPTIONAL */
      ipv6-clone-mask <number-of-bits>; /* OPTIONAL */
      redirect-server <server-to-forward-to>; /* OPTIONAL */
      redirect-port <port-to-forward-to>; /* OPTIONAL */
      options {
	  <option>;
	  <option>;
      };
};

参考:https://www.unrealircd.org/docs/Allow%5Fblock

irc管理员配置

oper块能够配置服务器管理员帐号和密码。虽然说默认的也能用,不过……我想你不会希望随便谁登陆进来后就能拿默认管理员账户(bobsmith)和密码(test)就登到管理员权限吧。(而且几乎是最高权限……)
一个oper块示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
oper <名称> {
      /* 必填 Required items: */
      mask <hostmask>;
      password <密码>;
      class <类名>;
      operclass <权限类>;
      /* 可选项目 */
      require-modes <modes>
      maxlogins <次数>;
      vhost <新的虚拟主机名>;
      swhois <whois信息>;
      modes <modes>;
      snomask <snomask>;
};

该块的各个必选选项的参数,请按照自己的需求配置:

  • 名称 : 账户名称,应该避免使用ASCII以外的字符,否则因为字符集差异而可能出现问题。
  • passwd : 密码,用于设置密码。但是官方不推荐明文编码在配置。关于具体可用的身份验证类型,可以参阅(EN)https://www.unrealircd.org/docs/Authentication_types
  • operclass : 决定了该管理员权限使用的操作员类别(operclass块),
    operclass块定义了可用权限。关于操作员类别块可以参阅(EN)https://www.unrealircd.org/docs/Operclass_block
    另外,unrealircd默认提供了以下操作员类别operclass块:
    • locop:最小特权,该类别大部分功能仅仅限制于本地服务器。比如,该权限可以/KILL或/KLINK本地用户,但不能是远程用户。
    • globop:具有良好的特权。例如,可以在所有服务器/KILL和/GLINK用户,可以获取一些额外的信息,比如/LIST和/WHOLS中的秘密频道。
    • admin:与globop相似,但能使用一些功能强大但具有潜在危险的命令(例如/SPAMFILTER)。
    • *services-admin:此级别增加了使用/SAJOIN,/SAPART和/SAMODE命令的权限。
    • netadmin:这是最高级别权限。默认配置提供了该级别权限。与services-admin相比,它还具有破坏或杀死服务bot以及一些其他事件的权限。
  • mask : 用于设置许可登陆该管理员账户的地址。(”*“为无限制)
  • class : 变更登陆的用户类。

该块可选选项的参数:

  • require-modes 指定一种在允许用户进行管理员操作之前必须获取的模式。
  • maxlogins 这允许限制从该主机进行的并发操作员登录的次数。例如,如果将其设置为1,则随时可以通过此块登陆1个人。
  • vhost 成功操作后,将原有主机名设置为此主机名(虚拟主机)?
  • swhois 别人/whois你的时候,设置显示的额外的行。
  • modes 操作成功后,设置指定的用户模式
  • snomask 设置服务器通知掩码。以控制将收到的服务器通知。详情可参阅(EN)https://www.unrealircd.org/docs/Snomasks

配置完成,进入irc服务器后,可以通过 /oper <账户> <密码> 来获取管理员权限。

配置侦听端口

listen块能够指定irc服务器侦听的端口,默认侦听三个端口,分别是6667(无加密),6697(ssl),6690(ssl,只允许其他服务器连接)。默认能用。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
listen {
      ip <ip>;  //指定允许访问此端口的ip( *是通配)
      port <port>;  //指定开放的端口
      options {  //选项块(可选)
	  ssl;   //启用ssl加密
	  clientsonly;  //端口只适用于客户端
	  serversonly;  //端口只适用于服务端
      };
    ssl-options {  //在此端口单独设置的ssl选项(可选)
      certificate <证书路径>; //指定此端口使用的证书文件
      key <证书密钥路径>;  //指定此端口使用的密钥文件
      };
};

如需要了解更多信息,可以访问这里

结束语

到这里,配置基本上就结束了。其他的配置,默认就好?执行 ./unrealircd configtest,测试通过的话,就可以启动服务器了。

运行

启动服务器

在unrealircd安装路径执行 ./unrealircd start 运行服务器。

重启服务器

在unrealircd安装路径执行 ./unrealircd restart 以重启服务器。

结束语

这个博客写了好几天天来着,大概就是这样子(虽然只是摘抄官方文档)。嗯……如果有人看就好了。大概。