如何在Debian7上运行UnrealIRCd聊天服务器

来自菜鸟教程
跳转至:导航、​搜索

介绍

在本文中,我们将学习如何使用 Unreal IRC 守护程序 (IRCd) 构建、安装和配置 IRC 服务器:该服务允许用户通过 IRC(Internet 中继聊天)进行连接。 IRC 是一种允许用户通过网络发送的消息实时聊天的协议。

特别是,我们将在本教程中使用 Debian 7 x64 Droplet。

第一步——创建一个 ircd 用户

我们假设您刚刚启动了一个新的 Debian 7 x64 Droplet 并且您以 root 身份登录。 如果您当前不是 root 用户,请使用以下命令切换到 root:

su

与用户可以看到的任何守护程序或服务一样,出于安全和性能原因,最好不要以 root 身份运行 UnrealIRCd。 因此,我们将首先创建一个专门用于运行守护程序的用户。

adduser ircd

在提示符处为用户创建一个新密码。 我推荐使用 XKCD 创建密码的方法 创建的密码——也就是说,将 3-5 个相当常见的字典单词组合成一个令人难忘的组合,其长度将为密码增加足够的熵(强度),使其难以计算机可以猜测,但人类很容易记住。

如果系统未提示您创建密码,只需键入:

passwd ircd

然后将提示您创建密码。

赋予用户权限

我们现在需要确保服务器带有 sudo,这是一个用于基于 UNIX 的系统(例如 Linux)的流行实用程序。 对于那些不熟悉的人,sudo 命令允许用户以 root(susuperuser)权限执行命令,因此得名 — s uperuser do — 我们在设置必备库时需要它。

Debian 7 默认安装了 sudo。 如果您需要安装它,请键入:

apt-get install sudo

现在我们知道 sudo 已安装,您需要将我们之前创建的 ircd 用户添加到 sudo 组,以允许它访问 sudo 命令。

为此,请运行以下命令:

adduser ircd sudo

这就是用户创建步骤的全部内容! 现在我们可以简单地切换到新用户:

su ircd

切换到 ircd 用户的主目录。

cd ~

第二步 - 安装先决条件

在我们可以安装 UnrealIRCd 之前,我们缺少一些库。 其中包括用于安全连接的库以及构建 UnrealIRCd 所需的编译器和库。

这些包是 make, gcc, build-essential, openssl, libcurl4-openssl-dev, [ X123X]zlib1g、zlib1g-devzlibclibgcrypt11libgcrypt11-dev

我们将使用 APT 在 Debian 中安装这些。 运行以下命令以使您的包管理器保持最新:

sudo apt-get update

运行以下命令以安装先决条件。 出现提示时输入 yes。 您可能会发现其中一些软件包已经安装——在撰写本文时,zlib1g 和 openssl 已经包含在 Debian 中——但为了完整起见,它们在此处列出。

sudo apt-get install make gcc build-essential openssl libcurl4-openssl-dev zlib1g zlib1g-dev zlibc libgcrypt11 libgcrypt11-dev

现在是吃零食的好时机,因为包管理器可能需要一段时间才能下载并安装所有包。

完成后,我们可以下载并安装 UnrealIRCd 并开始构建过程。

第三步——安装 UnrealIRCd

UnrealIRCd 在 Debian 或任何主要发行版上默认不作为软件包提供,因此我们将手动下载并从源代码构建它。

我们将使用 Debian 内置的 wget 实用程序下载 UnrealIRCd 的源代码包。 如果您需要下载 wget,请运行以下命令:

sudo apt-get install wget

您需要从 UnrealIRCd 的网站获取下载链接才能继续安装。 前往 官方 UnrealIRCd 下载页面 并下载最新的稳定源分支。

当下载页面呈现给您时,您可能会看到一个链接,上面写着“下载应该在 5 秒后开始,如果它没有单击此处。” 这是包含 Unreal 源代码的文件的链接,以及您应该与 wget 一起使用的 URL。

在撰写本文时,URL 是 http://unrealircd.org/downloads/Unreal3.2.10.4.tar.gz

以我们的 ircd 用户身份登录时,让我们确保我们在我们的主目录中:

cd ~

现在,让我们下载源代码。 警告:--no-check-certificate 标志与 wget 一起使用是获取此文件的不太安全的方法。 如果您的目标是安全而不是速度,您应该使用不同的方法:

wget --no-check-certificate http://unrealircd.org/downloads/Unreal3.2.10.4.tar.gz

将源代码提取到自己的文件夹中:

tar xzvf Unreal3.2.10.4.tar.gz

现在我们可以切换到新目录:

cd Unreal3.2.10.4

最后,让我们开始构建过程。 使用源码包中内置的 ./Config 脚本:

./Config

通读发行说明并按 Enter 继续滚动浏览。 请留意底部的百分比数字,以免错过问题。 一旦发行说明结束并且配置脚本启动,UnrealIRCd 将开始向您提问。

What directory are all the server configuration files in?

您可以将其保留为默认值。 按 Enter 继续。

What is the path to the ircd binary including the name of the binary?

也将其保留为默认值。 按输入

What should the default permissions for your configurations files be?  (Set this to 0 to disable)

再一次,将其保留为默认值。 下一个问题很重要:

Do you want to support SSL (Secure Sockets Layer) connections?

回答:

Yes

默认情况下,UnrealIRCd 的配置脚本将不支持 SSL 连接,但在此处输入 Yes 将启用它。 这就是我们之前安装 OpenSSL 的原因。

然后应提示您输入系统上 OpenSSL 的路径。 因为我们让 APT 更早地为我们处理了这个,所以我们可以将其保留为默认值。

If you know the path to OpenSSL on your system, enter it here. If not
leave this blank (in most cases it will be detected automatically).

输入

下一个问题对于在他们的 Droplet 上使用 IPv6 的某些用户很重要。

Do you want to enable IPv6 support?

如果您在最初设置 Droplet 时启用了 IPv6,您应该只对这个问题回答 Yes。 如果您没有在您的 Droplet 上启用 IPv6,您可以将其保留为默认值(“No”)并按 Enter

下一个问题涉及将在 IRC 网络中使用多个链接服务器操作 IRC 守护程序的用户。 Ziplinks 本质上是一种在 IRC 服务器之间交换数据时通过在发送数据之前对其进行压缩来节省带宽的方法。 您不需要回答 Yes,但建议您回答。 如果您在构建本文中未记录的 UnrealIRCd 时遇到困难,请尝试再次运行 ./Config 并对此问题回答 No

Do you want to enable ziplinks support?

回答:

Yes

当询问路径时,按 Enter

If you know the path to zlib on your system, enter it here. If not
leave this blank

接下来的几个问题都可以通过按Enter来默认回答:

Do you want to enable remote includes?
Do you want to enable prefixes for chanadmin and chanowner?
What listen() backlog value do you wish to use?
How far back do you want to keep the nickname history?
What is the maximum sendq length you wish to have?
How many buffer pools would you like?
How many file descriptors (or sockets) can the IRCd use?
Would you like to pass any custom parameters to configure?

回答完问题后,配置脚本将开始为构建过程准备源目录。 这可能需要一些时间,所以请稍事休息。

最终将提示您为 IRCd 生成 SSL 证书。 除非您已经拥有由适当的证书颁发机构颁发的 SSL 证书,否则您可能只想将此选项保留为默认值(应为“是”)——这就是我们将在本教程中执行的操作。

系统将要求您提供有关服务器的信息,例如国家、省、市和组织。 您可以在此处输入任何您认为有意义的内容。 当被要求输入名称时,您应该输入服务器的域名。

Enter 继续。 您将看到有关签名证书的快速消息。 再次按Enter,配置过程完成。

第四步——构建 UnrealIRCd

这是所有步骤中最简单的一步! 移动到 ~/Unreal[无论你下载什么版本] 目录:

cd ~/Unreal3.2.10.4

建造它!

make

构建过程应该开始。 这是最长的步骤,如果您在最后两次休息期间还没有去泡茶或咖啡,那么现在绝对是时候这样做了——完成构建过程需要几分钟。

第五步——配置 UnrealIRCd

构建过程完成后,您现在可以配置新的 UnrealIRCd 服务器了。 配置文件是用类似 C 的语法编写的。 它很长,但相当简单。

复制示例配置文件:

cp ~/Unreal3.2.10.4/doc/example.conf ~/Unreal3.2.10.4/unrealircd.conf

这会将英文示例配置文件复制到根 Unreal 目录。 如果您的服务器将以英语以外的语言运行,欢迎您使用两个字母的语言代码来表示您的目标受众将使用的任何语言; 例如 ./doc.example.fr.conf 在撰写本文时,除了英语之外,还支持德语、西班牙语、法语、匈牙利语、荷兰语、俄语和土耳其语,但在本教程中,我们将解决英文示例配置。

使用您喜欢的文本编辑器打开配置文件:

nano ~/Unreal3.2.10.4/unrealircd.conf

现在,让我们开始根据自己的喜好编辑配置文件。 我们将从上到下依次遍历配置文件,因此这些部分的顺序可能有点奇怪。 从上到下是最直接的方法。

请注意,此配置文件中有大量注释掉的部分,以及一些不会影响大多数用户的设置,我们不会详细展示。

模块

UnrealIRCd 被吹捧为 modular IRCd,因为您可以为守护进程创建功能,而无需重新编译整个源代码库并即时加载/卸载它。 因此,一些核心功能存储在 Unreal 的两个库存模块中——commands 模块和 cloak 模块。 寻找这两行:

// loadmodule “src/modules/commands.so”;
// loadmodule “src/modules/cloak.so”;

对于那些不熟悉类 C 语法的人,双斜杠 (//) 告诉 Unreal 忽略一行斜杠之后的任何内容。 通过在材质周围添加 /**/ 可以注释掉多行。

取消注释这两个模块,使它们看起来像这样:

/* FOR *NIX, uncomment the following 2lines: */
loadmodule "src/modules/commands.so";
loadmodule "src/modules/cloak.so";

我{} - 服务器名称

继续滚动配置文件,直到看到标有 me {} 的部分。 首先会有一个注释掉的示例部分。 你想要一个未注释的。

这部分在过去被称为 M 线,定义了用户连接时有关服务器的具体细节。

name 设置为服务器的主机名。

info 字段应包含 IRC 服务器的正式名称,例如“MyDomain IRC”。 名称和信息字段必须用引号引起来。

numeric 字段应保留默认编号,除非您计划将多个 IRC 服务器链接在一起。 对于多个服务器,您绝对必须确保网络中的所有服务器在此字段中具有不同的值。 这在幕后充当了 UnrealIRCd 的唯一标识符。

me
{
        name "unreal.example.com";
        info "Unreal Chat Server";
        numeric 1;
};

admin {} - 管理员联系信息

下一部分是 admin {} 块或 a:line。 再次滚动,直到到达未注释的示例。

这应该包含您作为服务器管理员的联系信息。 您可以根据需要在此处放置尽可能多或尽可能少的内容,但您至少需要有一条线。

大多数用户将他们的真实姓名放在第一行(例如“Bob Smith”),昵称放在第二行(例如“bob”),电子邮件地址放在第三行。 唯一的要求是这些行中的每一行都用引号引起来并以分号结尾 (;)。

admin {
        "Will Preston";
        "will";
        "will@example.com";
};

现在我们可以继续进行更具体的与服务器相关的配置,而不仅仅是简单的联系信息。

class {} — 客户端和服务器连接设置

下一个块,class {} 块,定义了服务器将记住的连接到网络的“客户端”(您的用户)和链接到网络的“服务器”(如果您将 IRC 服务器添加到网络服务器)。

通常,对于大多数小型网络场景,这些设置可以保留为默认值。 但是,如果您正在运行大型网络操作,您可能需要阅读有关这些块中的值的作用的文档,因为它们有其用处,但仅在非常特定的情况下。

默认设置很好:

class           clients
{
        pingfreq 90;
        maxclients 500;
        sendq 100000;
        recvq 8000;
};      

class           servers
{
        pingfreq 90;
        maxclients 10;          /* Max servers we can have linked at a time */
        sendq 1000000;
        connfreq 100; /* How many seconds between each connection attempt */
};

allow {} - 服务器密码,例外

allow {} 块配置允许谁连接到网络。

通常,对于任何人都可以加入的大型开放 IRC 服务器,您应该将其保留为默认值。

对于您希望保持私有或受密码保护的服务器,您应该将 password 行添加到第一个全局块中,如第二个示例 allow {} 块中所示。 第一个 allow {} 块具有客户端连接的全局设置。 您可以看到 iphostname 值都设置为 *@*,意思是“来自世界各地的每个人”。

这允许您在连接时提示用户输入密码。

allow {
        ip             *@*;
        hostname       *@*;
        class           clients;
        maxperip 5;
        password "yourpasswordhere";    
};      

/* Passworded allow line */
allow {
        ip             *@255.255.255.255;
        hostname       *@*.passworded.people;
        class           clients;
        password "f00Ness";
        maxperip 1;
};

如果您不需要使用不同的 IP 或其他连接参数微调您的允许设置,您也可以注释掉第二个 allow 块。

下一个块 allow channel {} 块定义了哪些类型的频道或聊天室不受稍后在配置文件中设置的限制。

一点解释:在稍后的区块中,我们将能够定义频道名称中的哪些频道或关键字被禁止,并且此区块允许我们定义这些禁令的豁免。 除非您有特殊情况,否则您通常可以不理会它,示例配置向我们展示了它是如何工作的:

    allow channel {
        channel "#WarezSucks";
        class "clients";
    };

此示例使服务器允许所有客户端访问#WarezSucks 通道,尽管在配置文件后面匹配通配符字符串 *warez* 的通道受到限制。

除非您有特定情况要禁止某个频道而不是某些其他频道,否则您可以不理会这个问题。

oper {} - 操作员设置

下一个块是迄今为止最重要的块之一:oper {} 块或 o:line,它将您的凭据定义为服务器所有者,或者大多数用户称之为 IRCop[X176X ]。

仔细阅读本节,因为您需要确保一切正确。

oper {} 块定义了您和任何其他特权用户可以作为 IRCop 执行的操作。 这是定义您的管理员的地方,包括您自己,因此有很多选项在起作用。 然而,现在,我们将从一个示例块开始。

配置文件目前包含一个示例 oper {} 块,用户名为 bobsmith。 但是,我建议您完全删除它并用您自己的 oper {} 块替换它。 您需要为您希望在服务器上作为操作员的每个用户添加一个新块。

下面,我有一个示例 o:line 你可以复制并粘贴到配置文件中。 red 中表示的值由您更改。

oper username {
    class clients;
    from {
        userhost *@*;
    };
    password "yourpasswordhere";
    flags {
        global;
        netadmin;
        can_gkline;
        can_gzline;
        can_zline;
        can_kline;
        can_unkline;
        can_restart;
        can_die;
        can_rehash;
    };
    swhois "This will appear when users run a /WHOIS on you";
};

对这些项目中的每一项的解释如下:

  • class 定义了这个用户是什么类型的操作符,如果你之前指定了一个除“clients”或“servers”之外的类。 你不需要改变这个。
  • from {} 子块包含允许哪些主机名(由 userhost 指定)使用此 o:line。 通常,您可以将其保留在 @,因为大多数客户端(包括您自己)具有动态 IP 地址,因此主机名不断变化。
  • password 定义了您将使用什么密码向服务器表明自己是操作员。 与任何字符串文字一样,密码必须用引号引起来。
  • flags {} 子块包含指定的 IRCop 在被识别为操作员时将拥有的特权。 官方文档 列出了每个权限指示符的作用,但我们会快速浏览它们,让您对预期的基本概念有一个基本的了解。
  • global 定义此 IRCop 是否将被视为所有服务器上的 IRCop。 或者,您可以使用 local,它们只会影响连接到其 o:line 所在服务器的用户,但对于您自己的 o:line,您绝对应该使用 global
  • netadmin 定义当用户请求操作员帮助时 IRCop 的级别(或“等级”)。 netadmin 是最高的,其次是 servicesadmin,其次是 admin,其次是 coadmin,其次是完全没有排名指标。
  • can_gkline、can_gzline、can_zline、can_kline 和 can_unkline<^> 都定义了能够应用某些类型的用户禁令的权限,以防您必须删除有问题的用户。 在 IRC 术语中,一个 , can_gzline , can_zline , can_kline , 和 can_unkline 所有这些都定义了能够应用某些类型的用户禁令的权限,以防您必须删除有问题的用户。 在 IRC 术语中,k-line 是指禁止连接到应用线路的服务器。 一个z-line,在其他类型的非虚幻服务器上也称为g-line,类似于k线,只是它适用于网络上的所有服务器(同时存储在服务器本地禁令适用于)。 gz-linegk-line 都是相同的,除了它们各自的 - 线应用于网络中的所有服务器 - 因此,如果对断开连接或与网络断开连接的服务器应用禁令,则禁令仍然被认为是有效的。 can_unkline 允许您在设置后删除这些禁令。
  • can_restart 指定允许你向服务器发送/RESTART 命令来重启IRCd,断开进程中的所有用户。
  • can_die 指定允许您向服务器发送/DIE 命令以停止IRCd 运行,从而断开所有用户的连接。
  • can_rehash 指定允许您发送 /REHASH 命令,该命令重新加载当前活动的配置,当您需要在不重新启动服务器的情况下进行更改时很有用
  • 最后,swhois 选项指定您希望用户在您被识别为操作员时对您运行 /WHOIS 时看到的任何特殊消息。 这条线可以完全省略,但我喜欢以此为契机发布一条有趣的信息,比如“你在看什么?”

欢迎您根据需要复制上述 o:line 以适应您希望成为 IRCops 的所有用户。 小型网络一般只需要1-2个运营商; 但是,随着网络的增长,您可能会觉得有必要添加更多的 o:lines,以帮助控制用户。

听 {} — IP、端口和 SSL

现在您的 o:line 已设置好,我们可以继续进行配置中更关键的部分。 在 listen {} 块中,您可以设置用户可以连接的端口。

对于大多数服务器,默认设置应该没问题。

listen       *:6697
{
    options
    {
        ssl;
        clientsonly;
    };
};

listen *:8067;
listen *:6667;

每个 listen 声明中 : 之前的 * 表示“全部”。 这可以替换为您希望将 UnrealIRCd 绑定到的任何 IP 地址。 如果您的服务器有多个 IP,则需要为每个地址单独声明 listen

然而,对于大多数用途,您只需使用 listen *:6667* 通配符将尝试让 UnrealIRCd 绑定到 [X185X 之后指定的端口上的任何和所有 IP 地址],在这种情况下,端口 6667

注意: 为了在 UnrealIRCd 中支持 IPv6 地址,您必须在上面的构建说明中使用 IPv6 支持编译它,并且您的 Droplet 必须支持 IPv6 连接。 但是请注意,在指定 IPv6 地址时,您必须将地址本身括在 [括号] 中,以便守护程序可以区分 IP 是什么和端口是什么:

listen [fd3a::a1c9:b311:985e]:6667

options {} 子块中,ssl 标志定义服务器是否允许 SSL 连接。 clientsonly 标志(相对于 serversonly)允许您指定此端口是仅用于客户端还是服务器。 否则,默认情况下,客户端和服务器都可以在此端口上连接。 clientsonly 设置没问题。

注意: 如果您在首次启动 UnrealIRCd 时收到“地址已在使用”错误,您需要将 * 通配符替换为您的 Droplet 的 IP 地址,因为 Unreal可能也可能无法推断出要绑定的主 IP。

链接 {} - 聊天服务器网络

下一个块 link {} 可以保留默认设置。 此块用于将两个服务器连接在一起形成 IRC 网络,本教程不涉及。

link            hub.mynet.com
{
        username        *;
        hostname        1.2.3.4;
        bind-ip         *;
        port            7029;
        hub             *;
        password-connect "LiNk";
        password-receive "LiNk";
        class           servers;
                options {
                        /* Note: You should not use autoconnect when linking services */
                        autoconnect;
                        ssl;
                        zip;
                };
};

ulines {} — 具有特权的服务

ulines {} 块定义连接到我们网络的哪些服务器需要具有提升的权限。

通常,当您将 services 连接到 IRC 网络时(服务是一组特殊的程序和守护程序,它们向 IRC 添加了 RFC 标准未指定的一整套功能,例如昵称注册),您使用这是为了确保服务的权限提升到高于普通服务器的权限。

您应该 not 将其用于普通服务器。 将示例服务器替换为您自己的服务服务器:

ulines {
        services.roxnet.org;
        stats.roxnet.org;
};

drpass {} — /RESTART 和 /DIE 的密码

下一个块 drpass {} 定义了在 IRCop 选择在服务器上使用 /DIE 或 /RESTART 命令时应设置的密码。

即使 IRCop 有权执行此操作,最好为此设置密码,以防 IRCop 权限受到损害。 这样一来,被入侵的操作员帐户就无法通过简单的 IRCop 访问来关闭服务器。

drpass {
    restart "your-restart-password-here";
    die "your-die-password-here";
};

log {} - 日志设置

下一个块 log {} 块可以保留默认设置。

如果您愿意,您可以 阅读文档 以获取有关日志块的信息,但通常可以保持原样。 UnrealIRCd 在其日志保存方面非常彻底。

alias {} - 命令别名

下一系列块 alias {} 块包含命令别名的定义,以防您计划在新 IRC 服务器旁边安装服务。

如果你不打算用你的新服务器启动服务,你可以不用担心这些块。

files {} — 包含配置文件

我们将调整的下一个块是 files {} 块,您可以在其中指定要包含在配置中的某些特殊文件。

其中大部分已被注释掉,但您至少应该查找、取消注释并指定以下内容。 警告: 如果在此处指定任何不存在的文件,UnrealIRCd 将不会启动。 完成编辑配置后,您需要创建这些文件。 我们将在本教程后面创建这两个文件。

找到并取消注释这两个文件:

motd ircd.motd;

...

rules ircd.rules
  • motd 参数指定服务器 MOTD,或 当天的消息 ,在连接时或在用户使用 /MOTD 命令时发送给用户。
  • rules 参数指定包含 /RULES 命令提供的服务器规则的文件。 我建议您考虑一下服务器的规则,因为 IRC 过去因一些不那么合法的文件共享等而臭名昭著。

tld {} — 国际例外

下一个块 tld {} 块在功能上与 files 块相同,只是它允许您为来自不同国家的用户设置特殊例外,如其顶层所示域(例如 .au 用于澳大利亚,.ru 用于俄罗斯等)。

您可能需要将此部分注释掉,因为您在此部分中创建的文件与在正确的 files {} 块中找到的文件一样需要。 将此部分包含在 C 风格的注释中:

/*
tld {
    ...
};
*/

这样,它不再适用于当前配置。

下一部分是完全可选的; 但是,由于我们是按顺序介绍配置的,因此最好至少浏览一下说明,以便了解每个块的作用。

ban {} — 禁止昵称、IP 和名称

这些部分都可以保留默认设置。

在本节中,我们将了解通过服务器配置保护您的服务器免受恶意用户攻击的各种方法。

下一个块 ban {} 块允许您禁止使用特定昵称,或者禁止使用特定 IP 地址连接到服务器,以及整个主机的其他选项。

请注意,您应该为单个封禁块选择昵称或 IP,而不是两者。

ban nick/ip {
    mask ["nickname*goes*here"/12.223.98.1]; // Banned nick or IP
    reason "Put your reason for the ban here";
};

或者只是将其注释掉:

/*
ban nick {
        mask "*C*h*a*n*S*e*r*v*";
        reason "Reserved for Services";
};
*/

请注意,您还可以在掩码字段中使用实际的 IRC 主机掩码 (user@host.name) 而不是昵称或 IP,以禁止特定用户 - 只需确保指定 [ X180X] 而不是 ban ipban nick

最后,您还可以禁止使用特定的 realname。 当用户第一次设置他们的客户端时,他们可以在他们的用户设置中指定他们的“真实姓名”。 此设置适用于那些。 例如,要禁止所有名为 Jack 的用户:

ban realname {
    mask "Jack";
    reason "Go away!";
};

注意: 上面的禁令有点用处,考虑到用户可以在客户端设置中更改他们的真实姓名,但这里是为了完整性。

您还可以设置禁止例外,例如:

except ban {
    // My username is sigtau--don't ban me!
    mask    *sigtau*@*
};

既然我们已经了解了用于针对用户的 ban {} 块,让我们来看看可用于针对其他类型的恶意活动的另一种类型的块。

拒绝 {} - 限制非用户活动

对于大多数服务器,默认的 deny {} 块设置可以保持不变。

当 IRC 在 80 年代、90 年代和 2000 年代初期成为高度主流的协议时,希望在没有中间人集中式服务器的情况下直接通过 IRC 进行通信的用户需要另一种附加协议。 DCC(direct client-to-client)协议诞生了,允许用户做普通IRC做不到的事情,比如直接互相发送聊天消息,以及文件共享。

然而,文件共享方面打开了许多安全漏洞,因为 DCC 在那些不够精明以识别可能有害或恶意的文件的用户中越来越受欢迎。 因此,一些 IRC 守护进程开始限制某些类型的 DCC 请求以防止此类活动。

UnrealIRCd 就是这些 IRC 守护进程之一。 deny 块能够执行许多不同的限制任务,包括阻止这些类型的文件传输。 例如,在示例配置中,您会发现这个块:

deny dcc {
    filename "*sub7*"; // note that this supports wildcards
    reason "Possible Sub7 Virus";
};

这会导致任何通过服务器发送的包含字符串“sub7”的 DCC 请求(基于早期 IRC 时代臭名昭著的 Sub7 特洛伊木马 )都被禁止。

deny 块还可以阻止用户加入或创建某些类型的频道。 还记得之前我们允许用户加入一个名为 #WarezSucks 的频道吗? 这是我们要抵消的 deny 块:

deny channel {
    channel "*warez*";
    reason "Warez is illegal";
    class "clients";
};

这可以防止任何用户创建名称中包含“warez”一词的频道。

vhost {} - 隐藏用户主机名

大多数服务器可以使用默认的 vhost {} 块。

虽然一些流行的 IRC 服务包允许您在不编辑配置文件的情况下执行此操作,但将用户的主机名相互隐藏的老式方法是自动的,并且不需要用户注册昵称。

这对于通过保镖连接但使用他们不想注册的昵称的用户很有用,或者如果您的服务器没有服务开始。

可选的 vhost 块为指定用户设置假主机名。 我们将看一下示例配置中的一个预设:

vhost {
    vhost       i.hate.microsefrs.com;
    from {
        userhost *@*.image.dk;
    };
    login       stskeeps;
    password    moocowsrulemyworld;
};

这允许从主机名 *@*.image.dk 连接的用户将其主机名设置为 *@i.hate.microsefrs.com。 用户通常使用 /CHGHOST 命令执行此操作。

此命令的使用已大大减少,有利于使用执行相同功能的 IRC 服务包,因此对于大多数目的,您不需要彻底了解此块的工作原理即可设置功能正常的 IRC 网络。

set {} - 网络配置

这一段是绝对需要的! 除非您正确配置此部分,否则 IRC 守护程序将 不会 启动!

如果您一直在关注,下一个块应该是最后一个块之一,具有讽刺意味的是,它是最重要的块之一:set {} 块。

set {} 块包含服务器需要运行的大量配置选项。 下面是您将看到的示例配置的副本,其中添加了解释每个选项的作用的内嵌注释。 您不需要将注释复制到配置文件中,除非您觉得它们有用。

大多数(如果不是全部)这些选项都是必需的,因此只需根据自己的喜好对其进行编辑,而不是批量删除它们。 请注意,如果您计划将多个服务器链接在一起,最好在所有服务器上保持这些一致和相同。 如果您不打算链接服务器,则仍必须配置这些选项。

这些选项中的大多数仅涉及用您自己的域名替换示例域名。

请注意,您必须为三个 cloak-keys 生成三个随机值。

set {
    network-name "ROXnet"; // This is the name of the network reported to clients
                   // upon joining, and in many popular IRC clients, is the
                   // formal name used for tabbed view and logs.
    default-server "irc.roxnet.org"; // Replace this with your server's domain--the
                     // daemon reports this to the client as being
                     // the network's proper hostname.
    services-server "services.roxnet.org"; // If you plan to add services to your
                           // IRC server, use the same domain as
                           // above, e.g. services.mydomain.com.
                           // Even if you aren't going to run
                           // services, you should do this anyway.
    stats-server "stats.roxnet.org"; // Same as the above, except with stats
                     // stats servers.
    help-channel "#ROXnet"; // Set this to a be your network's official "help
                // channel" so that users have a place to go in case
                // they need help with something that only an IRCop
                // or server administrator could do.
    hiddenhost-prefix "rox"; // For anonimity purposes, UnrealIRCd masks users'
                 // IP addresses using 'hidden hosts'--i.e. the host
                 // user331.newyork.someISP.com is converted to
                 // hiddenhost-3AB66E2-newyork.someISP.com.  This value
                 // can be customized--change "rox" to whatever you
                 // want (generally, alphanumeric lowercase) the hidden
                 // host mask to be.  This is sometimes referred to as
                 // "cloaking."
    cloak-keys {
        "brespumuste6ewR";
        "fUkAChekEswu6ed";
        "4aFachehetawedR";
    };
    
    // The above block are the random seeds used to generate unique cloaks for
    // each user without revealing their hostname to one another.  Generally, a
    // 10-20 character random alphanumeric mixed-case string will do.  Any online
    // password generator will work, or if you're in a pinch, just type whatever
    // alphanumeric string you want in all three string fields.
    //
    // THERE MUST BE EXACTLY THREE STRINGS.

    hosts {
        local       "locops.roxnet.org";
        global      "ircops.roxnet.org";
        coadmin     "admin.roxnet.org";
        admin       "admin.roxnet.org";
        servicesadmin   "csops.roxnet.org";
        netadmin    "netadmin.roxnet.org";
        host-on-oper-up "no";
    };
    
    // The above block can go mostly unchanged, apart from changing "roxnet.org"
    // to your domain of choice.  Setting host-on-oper-up automatically changes
    // the hostname of the IRCop user to be one of the above based on their rank
    // indicators in their o:line flags (`local`, `global`, `admin`, etc.).
};

配置中的最后一个块应该是另一个 set {} 块,但这一次,选项是此服务器实例独有的,而不是在整个网络中保持一致。

您必须设置 kline-address 电子邮件,否则服务器将无法启动。

对于大多数服务器,其余这些设置可以保留为默认设置。

set {
    kline-address "contact@example.com"; // When k-lines are applied, users are sometimes
                    // instructed to contact a particular e-mail for
                    // more information.  This should be that e-mail.
    modes-on-connect "+ixw"; // Leave these at default; however if you need to tweak
                 // what modes users are automatically assigned upon
                 // connecting, you can view the full mode reference
                 // here: http://www.unrealircd.com/files/docs/unreal32docs.html#userchannelmodes
    modes-on-oper "+xwgs";   // These are modes that are applied when a user first
                 // authenticates as an IRCop.  These are generally left
                 // alone as well, but you can use the above link again
                 // if you, for some reason, need to tweak these.
    oper-auto-join "#opers"; // This is the channel that IRCops are set to
                 // be force-joined to as soon as they authenticate as
                 // an IRCop.  You can set multiple channels by
                 // delimiting them with commas: #chan1,#chan2,...
    maxchannelsperuser 10; // This is the maximum number of channels any one user
                   // session can be joined to.  You may raise or lower this
                   // as needed, however it must be greater than or equal
                   // to 1.
    options {
        hide-ulines; // This means any server specified in the ulines {} block
                 // will not appear when a connected user uses /list.
                 // IRCops automatically override this when they use /list.
        show-connect-info; // This allows a user to see messages such as
                   // "Looking up your hostname..." and "Requesting
                   // identd..." when they are connecting.  Generally a
                   // good idea to keep this.
    };
    
    anti-spam-quit-message-time 10s; // In the past, IRC servers have had issues
                     // with users joining and quitting with long
                     // quit messages in rapid succession to spam
                     // the server.  This helps combat that by
                     // specifying how long a user must be 
                     // connected before the server will allow them
                     // to specify a message when using /QUIT.
                     // You can leave this as it is or change it.
    oper-only-stats "okfGsMRUEelLCXzdD"; // You should probably leave this alone,
                         // it defines which server stats are
                         // restricted to be viewable by IRCops only.
                         // Since there's too many stat modes to list
                         // for an article, here's a hint: once your
                         // server is up and running, use the /stats
                         // command (while authenticated as an IRCop)
                         // to get a list of character->stat pairs,
                         // which can be used to modify this list.
    throttle { // When users disconnect, their clients will try to reconnect them.
           // This prevents it from happening too quickly, potentially putting
           // the server under high load.
        connections 3; // The number of connections allowed...
        period 60s; // ...per x seconds, as specified here.
    };

    anti-flood { // This configures anti-flood settings to prevent users from
             // flooding the server with unnecessary commands.
        nick-flood 3:60; // Allows 3 nick changes per 60 seconds.

        // Some other useful options to read up on are away-flood for how
        // many times a user can use /AWAY, or unknown-flood-amount for
        // users that send unknown garbage data to the server.
    };
    
    spamfilter { // This controls settings for spam filtering and default ban info.
        ban-time 1d; // This is the default duration of a k-line/z-line ban when
                 // automatically set by a spam filter.
        ban-reason "Spam/Advertising" // The message used by automatic bans.
        virus-help-channel "#help"; // The channel users can turn to if they
                        // need help with viruses such as those
                        // sent over DCC.
    };
};

就是这样!

保存对配置文件的更改,确保保存为 unrealircd.conf。 按 CTRL-x,然后按 y,然后按 Enter

恭喜,您已完成编辑配置文件! 让我们在启动服务器之前完成最后几个步骤。

第六步——创建 ircd.rules 和 ircd.motd

在 UnrealIRCd 启动之前需要创建两个文件:ircd.rulesircd.motd。 在 shell 提示符下,键入以下内容为您的服务器规则创建文件:

nano ~/Unreal3.2.10.4/ircd.rules

现在,您可以将服务器规则键入为纯文本。 用户将在输入 /RULES 命令时看到这些。 请记住,您应该将此文件中的行保持在 80 个字符以内,以防止它们被 IRCd 自动包装(如果您使用缩进,这可能会很痛苦)。

保存您的更改。 创建当天文件的消息:

nano ~/Unreal3.2.10.4/ircd.motd

您可以在此处输入您的 MOTD,该 MOTD 将在用户连接到服务器时显示。 同样的 80 个字符的行长度限制也适用于此。 放入此文件的有用信息将是特色频道、服务器规则的快速分解、当前的 IRCops 等等。 您可以在此处以纯文本形式放置您想要的任何内容。

保存您的更改。

如果您在配置中列出了任何其他文件,请现在也创建它们。

第七步——IRCd 日志文件

为了确保 IRCd 有一个地方来存储它的日志,让我们继续并专门为此创建一个空白文件。

touch ~/Unreal3.2.10.4/ircd.log

第八步——启动 UnrealIRCd

恭喜! 您已成功设置自己的 IRC 守护程序。

移动到 Unreal 目录:

cd ~/Unreal3.2.10.4

启动聊天服务器:

./unreal start

您应该会看到如下消息:

* Loading IRCd configuration ..
* Configuration loaded without any problems ..
* Initializing SSL.
* Dynamic configuration initialized .. booting IRCd.

如果出现启动错误,请检查错误中提到的行号和设置。 您应该能够在配置文件中找到问题所在。

一旦服务器启动,您将能够通过您最喜欢的 IRC 客户端连接到您的服务器。 我建议您在本地机器上而不是在 Droplet 上这样做,以确保其他用户可以连接。

第九步——连接一个 IRC 客户端

在您最喜欢的 IRC 客户端中,键入:

/server your Droplet IP address or domain here 6667

您将需要您的域或 IP 地址以及端口号(本例中为 6667)。 如果您在 allow {} 块中为服务器设置了全局密码,您也需要使用它。

一些流行的 Windows IRC 客户端是 mIRCHexChatPidgin。 如果你在 Linux 上,X-Chat 是免费的。 对于 OS X,X-Chat Azure 和 App Store 上的一些付费应用程序可用。

第十步——操作员身份验证

连接后,您需要以 IRCop 身份进行身份验证。 要以操作员身份进行身份验证,请键入:

/oper your-oline-username your-oline-password

这些是您在 oper {} 块中设置的凭据。

然后你应该被强制加入我们之前在 oper-auto-join 中指定的频道,表明你现在是 IRC 操作员。

关于通过 SSL 连接的注意事项

由于服务器实例是使用自签名 SSL 证书设置的,因此某些客户端可能由于“无效”或“不受信任”证书而不允许您通过 SSL 连接。 建议您使用免费服务(例如 CACert.org)或您选择的付费证书颁发机构 (CA) 寻求生成有效 SSL 证书的方法。

享受您的新 IRC 服务器! 从这里,您现在可以设置服务或开始邀请用户。 愉快的聊天!