如何使用InspIRCd2.0和Shaltúre在Ubuntu14.04上设置IRC服务器
介绍
本指南说明如何在 Ubuntu 14.04 上安装和配置 IRC 服务器 InspIRCd 2.0。 在您自己的服务器上安装使您可以灵活地管理用户、更改他们的昵称、更改频道属性等。
在本教程结束时,您应该拥有一个可以通过大多数 IRC 客户端连接的功能齐全的 IRC 服务器。
先决条件
请注意,标记为可选的项目会有所帮助,但不是必需的。
- 一个 Ubuntu 14.04 Droplet
- 具有 sudo 权限的非 root 用户(Initial Server Setup with Ubuntu 14.04 解释了如何设置。)
- RVM 安装了最新的 Ruby 版本。 查看 本教程 寻求帮助。
- 如果你有域名,可以配置
irc.your_domain_name
和services.your_domain_name
指向Droplet。 转到本教程设置域名和A和AAAA记录。 如果您只想重定向两个子域,请使用 本教程 。 - (可选)IRC 客户端已经安装在你的本地机器上
- (可选)SSL 证书
要获得免费的 SSL 证书以与您的 IRC 服务器一起使用,请按照 如何在 VPS 上使用免费签名的 SSL 证书设置 Apache 并为 irc.your_domain_name
申请证书。
如果您已经拥有来自证书颁发机构的付费 SSL 证书,则需要随附的 *.pem
、*.crt
或 *.key
文件。
本教程中的所有命令都应以非 root 用户身份运行。 如果该命令需要 root 访问权限,它将在前面加上 sudo
。
第 1 步 — 安装 InspIRCd
要安装 InspIRCd,我们需要为它创建一个新包。 对我们来说不幸的是,Ubuntu 14.04 存储库中的 InspIRCd 包已经过时了。 幸运的是,有一个可用的脚本可以从源 tarball 创建一个可安装的 .deb
文件。 它是开源的,因此我们可以根据需要对其进行修改。
我们首先安装脚本使用的一些包:
sudo apt-get install rake git gnutls-bin libgnutls-dev
现在克隆用于创建包的 Git 存储库:
git clone https://github.com/SaberUK/inspircd-packages.git
然后,切换到它被克隆到的目录:
cd ./inspircd-packages
我们需要告诉脚本使用 InspIRCd 的稳定版本,即 2.0 版。 我们还需要告诉它我们需要 SSL 支持。 为此,我们导出两个环境变量,脚本将读取并相应地采取行动。
export INSPIRCD_REVISION=insp20 export INSPIRCD_MODULES="regex_posix ssl_gnutls"
此外,删除一个存在但会导致版本 2.0 出现问题的额外补丁。
rm ./extras/fix-data-and-log-paths.patch
生成.deb
文件进行安装:
rake deb
这需要一段时间,所以在它运行时去喝杯咖啡。 完成后,运行以下命令以查看创建文件的文件名:
ls *.deb
然后使用以下命令安装 .deb
文件(使用您在上一步中刚刚找到的文件名):
sudo dpkg -i ./inspircd_2.0.20_amd64.deb
我们现在将删除 InspIRCd 的源文件,因此如果黑客获得访问权限,他们将无法使用恶意代码重新编译。
cd ~ rm -rf ./inspircd-packages
第 2 步 — 配置 InspIRCd
在 InspIRCd 可以实际运行之前,我们需要对其进行正确配置。 在此过程中,我们还设置了一些对我们的服务器运行至关重要的选项。 有些东西对我们来说是独一无二的,例如网络名称。
创建 inspircd.conf
文件:
sudo nano /etc/inspircd/inspircd.conf
现在,将以下示例配置文件复制到其中。 红色的值需要自定义。 将内容复制到 inspircd.conf
后,我们将从顶部开始并将它们更改为正确的值。
/etc/inspircd/inspircd.conf
# This is just a more or less working example configuration file, please # customize it for your needs! <server name="irc.example.com" description="Example IRC Server" network="ExampleNet" id="00A"> <admin name="Hameer Abbasi" nick="habbasi" email="admin@example.com"> <bind address="" port="6667" type="clients"> <power diepass="SecretPassword" restartpass="OtherSecretPassword" pause="2"> <connect allow="*" timeout="60" flood="20" threshold="1" pingfreq="120" sendq="262144" recvq="8192" localmax="3" globalmax="3"> <class name="Shutdown" commands="DIE RESTART REHASH LOADMODULE UNLOADMODULE RELOAD"> <class name="ServerLink" commands="CONNECT SQUIT RCONNECT MKPASSWD MKSHA256"> <class name="BanControl" commands="KILL GLINE KLINE ZLINE QLINE ELINE"> <class name="OperChat" commands="WALLOPS GLOBOPS SETIDLE SPYLIST SPYNAMES"> <class name="HostCloak" commands="SETHOST SETIDENT SETNAME CHGHOST CHGIDENT"> <type name="NetAdmin" classes="OperChat BanControl HostCloak Shutdown ServerLink" host="netadmin.omega.org.za"> <type name="GlobalOp" classes="OperChat BanControl HostCloak ServerLink" host="ircop.omega.org.za"> <type name="Helper" classes="HostCloak" host="helper.omega.org.za"> <oper name="habbasi" password="secretpass" host="*@localhost" type="NetAdmin"> <files motd="/etc/inspircd/inspircd.motd" rules="/etc/inspircd/inspircd.rules"> <channels users="20" opers="60"> <dns server="208.67.222.222" timeout="5"> <dns server="208.67.220.220" timeout="5"> <options prefixquit="Quit: " noservices="no" qaprefixes="no" deprotectself="no" deprotectothers="no" flatlinks="no" hideulines="no" syntaxhints="no" cyclehosts="yes" ircumsgprefix="no" announcets="yes" disablehmac="no" hostintopic="yes" quietbursts="yes" pingwarning="15" allowhalfop="yes" exemptchanops=""> <security hidewhois="" userstats="Pu" customversion="" hidesplits="no" hidebans="no" operspywhois="no" hidemodes="eI" maxtargets="20"> <performance nouserdns="no" maxwho="128" softlimit="1024" somaxconn="128" netbuffersize="10240"> <log method="file" type="* -USERINPUT -USEROUTPUT" level="default" target="/var/log/inspircd.log"> <whowas groupsize="10" maxgroups="100000" maxkeep="3d"> <timesync enable="no" master="no"> <badnick nick="NickServ" reason="Reserved For Services"> <badnick nick="ChanServ" reason="Reserved For Services"> <badnick nick="Global" reason="Reserved For S ervices"> <badnick nick="InfoServ" reason="Reserved For Services"> <badnick nick="OperServ" reason="Reserved For Services"> <badnick nick="SaslServ" reason="Reserved For Services"> <badnick nick="StatServ" reason="Reserved For Services"> <badnick nick="ALIS" reason="Reserved For Services">
我们需要更改一些特定于您和您的 Droplet 的值。 在顶部,找到 server
部分。 将其更改为所需的主机名、描述和网络名称。 id
应更改为有两个数字和一个字母。 例如:
/etc/inspircd/inspircd.conf
<server name="irc.yourdomain.com" description="Example description for the IRC server" network="ExampleNet" id="46T">
现在,找到 admin
块。 将值更改为 IRC 网络运营商的信息。 运营商用户将能够在网络上做任何事情。
/etc/inspircd/inspircd.conf
<admin name="Hameer Abbasi" nick="habbasi" email="admin@example.com">
我们需要能够重新启动或关闭服务器。 这是在 power
块中完成的。 在这里,您需要更改密码。 diepass
的值是网络管理员用来关闭服务器的密码,restartpass
的值是他们用来重启服务器的密码。 pause
的值告诉服务器如果输入错误密码,多长时间(以秒为单位)阻止操作员执行这些操作。 继续并更改密码。 将 pause
保留为其默认值。
/etc/inspircd/inspircd.conf
<power diepass="SecretPassword" restartpass="OtherSecretPassword" pause="2">
找到 oper
块。 我们需要定义操作员帐户和密码。 您之前定义的管理员和操作员可以是同一个人。 如果您有静态 IP 地址或受信任的域名,请更改主机以包含它。 如果可能,请不要将此值设置为 *@*
,这允许操作员从任何地方进行连接。
/etc/inspircd/inspircd.conf
<oper name="habbasi" password="secretPassword" host="*@localhost *@your.local.ip.here *@your.local.domain.here" type="NetAdmin">
对于 host
值,用空格分隔多个 IP 地址和域。 您还应该添加当前 Droplet 的 IP 地址和域(如果有)。 保存更改,然后关闭文件。
第 3 步 — 编辑每日讯息
每次用户连接到 IRC 网络时,都会显示当天的消息。 要自定义它,请在 /etc/inspircd/
中创建一个 inspircd.motd
文件:
sudo nano /etc/inspircd/inspircd.motd
在此文件中,添加您要向用户显示的当天的消息。 通常,您需要一个友好的提醒,告知用户规则。 此外,如果网络范围内发生任何变化,请在此处通知他们。 例如:
/etc/inspircd/inspircd.motd
<^>This is ExampleNet. We are the world's newest IRC network. Support us by joining and becoming regular! Be sure to view the rules by typing "/rules" and hitting ENTER.<^>
接下来,编辑规则文件。
sudo nano /etc/inspircd/inspircd.rules
在这个文件中,放置任何规则。 这些将在用户每次输入 /rules
命令时显示给用户。 例如,
/etc/inspircd/inspircd.rules
1. No children under 13 are allowed to be on this network without the knowledge and consent of their parent or legal guardian. 2. No discussion or links involving pirated software is allowed on the network. 3. No discussion of drugs or other narcotics. 4. No trading of weapons. 5. No porn. There are minors on this network.
第 4 步 — 启动 IRC 服务器
在启动 IRC 服务器之前,我们需要修复权限和文件所有权:
sudo find /etc/inspircd -type d -exec chmod 770 {} \; sudo find /etc/inspircd -type f -exec chmod 644 {} \; sudo chown -R irc:irc /etc/inspircd
接下来,我们需要为PID文件和日志文件目录设置正确的权限。
sudo chown -R irc:irc /var/inspircd/ sudo chown -R irc:irc /var/log/inspircd
您现在已开始阅读以启动 InspIRCd:
sudo service inspircd start
您应该在接近尾声时收到以下消息,这意味着我们已成功启动 InspIRCd:
InspIRCd is now running as 'irc.example.com'[46T] with 1024 max open sockets
第 5 步 — 测试基本功能
由于基本功能应该已经启动,请尝试连接到您新创建的 IRC 网络。 我们将引导您在 Droplet 上安装一个简单的基于命令行的 IRC 客户端。 首先,安装 IRSSI。
sudo apt-get install irssi
然后启动 IRC 客户端:
irssi
您应该能够在显示 [(status)]
的底部窗口中输入。 请注意,所有 IRC 命令都以正斜杠开头。 要连接到您的 IRC 网络,请键入:
/connect irc.example.com
如果您没有为服务器配置主机名,则可以使用 Droplet 的 IP 地址。 如果您正确配置了服务器,您应该会看到类似于以下内容的屏幕:
现在通过键入以下命令以操作员身份登录:
/oper habbasi secretPassword
如果成功,您应该会看到“您现在是 NetAdmin”字样。 这意味着您的操作员权限正在发挥作用。 要退出,我们将使用另一个命令:
/quit
推荐的 IRC 客户
几乎所有设备都有大量可用的 IRC 客户端。 以下是推荐客户的一小部分:
- 适用于 Windows、Mac OS X 和 Linux 的 HexChat
- 适用于 Windows 的 mIRC
- Mac OS X 和 iOS 的对话
- 适用于 Linux 和 Mac OS X 的 IRSI
- AndChat 安卓版
- Kiwi IRC(网络浏览器客户端)
请注意,使用 Kiwi IRC,您将无法使用操作权限。 Kiwi 通过代理连接,不维护您的 IP 地址。 如果您选择仅列出允许连接以进行操作员操作的特定 IP 地址(出于安全考虑,建议这样做),操作员权限将不适用于 Kiwi IRC。
第 6 步 — 设置 SSL(可选)
本部分的目标是保护您的用户的隐私,并保护密码和其他任何人都可以看到传输数据的内容,例如 ISP。 当然,这是可选的,但强烈推荐。
首先,我们需要将您的 SSL 证书复制到正确的目录。 为此,我们需要在 IRC 服务器配置目录中创建一个目录。
sudo mkdir /etc/inspircd/sslcerts
接下来,我们需要将相关的 SSL 证书和密钥复制到您新创建的配置目录中:
sudo cp /path/to/ssl/private.key /etc/inspircd/sslcerts/private.key sudo cp /path/to/ssl/certificate.crt /etc/inspircd/sslcerts/cert.pem sudo cp /path/to/ca/validation.crt /etc/inspircd/sslcerts/ca.pem
如果您使用的是自签名证书,则可以省略复制 ca.pem
文件。 这是在上面的最后一个命令中完成的。
为 inspircd
目录设置适当的权限以保护您的证书,以便 InspIRCd 能够读取它们。
sudo find /etc/inspircd -type d -exec chmod 770 {} \; sudo find /etc/inspircd -type f -exec chmod 644 {} \; sudo chown -R irc:irc /etc/inspircd
编辑配置文件以告诉它使用 SSL:
sudo nano /etc/inspircd/inspircd.conf
找到这个:
/etc/inspircd/inspircd.conf
<bind address="" port="6667" type="clients">
在绑定部分下方,添加以下行:
/etc/inspircd/inspircd.conf
<bind address="" port="6697" type="clients" ssl="gnutls"> <gnutls cafile="/etc/inspircd/sslcerts/ca.pem" certfile="/etc/inspircd/sslcerts/cert.pem" keyfile="/etc/inspircd/sslcerts/private.key" priority="SECURE192:-VERS-SSL3.0"> <module name="m_ssl_gnutls.so">
如果您使用的是自签名证书,则可以省略 cafile
指令。
重新启动服务器以启用更改。
sudo service inspircd restart
现在应该在端口 6697 上启用 SSL。
第 7 步 — 测试 SSL(可选)
再次,为了测试 SSL,我们将使用 IRSI。 像以前一样输入这个来启动 IRSSI:
irssi
接下来,键入以下命令以启用 SSL 进行连接:
/connect -SSL -SSL_Verify irc.example.com 6697
如果您使用的是自签名证书,则应省略 -SSL_Verify
选项。
如果成功,您应该会看到如下屏幕:
继续使用 /quit
退出客户端。
第 8 步 — 安装 Shaltúre 服务
您的 IRC 服务器工作正常,您可以连接到它。 但猜猜怎么了? 您不能注册昵称。 您无法管理频道所有权和角色。 您无法发送或接收备忘录。 尽管如此,我们使用服务。 最受欢迎的服务平台是 Atheme,但它的开发已经停止,除了可能修补严重的安全漏洞外,它不会更新。 出于这个原因,我将解释如何安装一个积极开发的 Atheme 分支,称为 Shaltúre。
我们首先安装一个先决条件包:
sudo apt-get install gettext
Shaltúre 最好不要以 root 身份运行。 但是,如果我们以主要用户身份运行它,则可能存在安全隐患。 因此,我们将为 Shaltúre 创建一个没有密码的用户。 您无法登录此帐户,只能使用 sudo
访问它。
sudo adduser --disabled-password shalture
这会给你一些提示,但你可以通过它们按回车键。 现在切换到用户:
sudo -i -u shalture
我们继续将目录更改为您的主目录并克隆 shalture
存储库。 我们将克隆到不同的目录,因为我们要安装在 ~/shalture
目录中。
git clone git://github.com/shalture/shalture.git shalture-devel
将您的活动目录更改为 shalture-devel
目录并克隆一些其他需要的存储库。
cd ./shalture-devel git submodule init git submodule update
运行设置编译阶段的配置,然后编译并安装:
./configure --enable-contrib make make install
编译第二个命令后需要一些时间,所以四处走走,稍微伸展一下腿。 完成后,删除源文件。
cd ~ rm -rf ./shalture-devel/
第 9 步 — 配置 Shaltúre 服务
安装完成后,将目录更改为 Shaltúre 配置目录,以便我们进行配置。 我们将从示例配置文件开始。
cd ~/shalture/etc cp shalture.conf.example shalture.conf nano shalture.conf
在文件中找到这个:
/home/shalture/shalture/etc/shalture.conf
#loadmodule "modules/protocol/charybdis";
通过删除行首的 # 字符取消注释该行,并将 charybdis 替换为 inspircd:
/home/shalture/shalture/etc/shalture.conf
loadmodule "modules/protocol/inspircd";
接下来,找到:
/home/shalture/shalture/etc/shalture.conf
name = "services.int";
更改 int
以匹配您的 IRC 服务器的域名或 IP 地址:
/home/shalture/shalture/etc/shalture.conf
name = "services.your_domain_name_or_IP";
找到这一行:
/home/shalture/shalture/etc/shalture.conf
numeric = "00A";
更改 numeric
的值,使其与您之前提供的服务器 id
不同,但它必须包含两个数字和一个字母,如下所示:
/home/shalture/shalture/etc/shalture.conf
numeric = "07C";
现在找到:
/home/shalture/shalture/etc/shalture.conf
netname = "misconfigured network";
将 netname
的值更改为您在 InspIRCd 配置文件的 server
块中设置的网络名称。 例如:
/home/shalture/shalture/etc/shalture.conf
netname = "ExampleNet";
还发现:
/home/shalture/shalture/etc/shalture.conf
hidehostsuffix = "users.misconfigured";
并删除 users
之后引号中的所有内容:
/home/shalture/shalture/etc/shalture.conf
hidehostsuffix = "users";
接下来,找到这个:
/home/shalture/shalture/etc/shalture.conf
adminname = "misconfigured admin";
将引号内的部分更改为您的姓名或化名。
现在,更改网络的联系电子邮件。 寻找:
/home/shalture/shalture/etc/shalture.conf
adminemail = "admin@example.com";
将 adminemail
的值更改为您的电子邮件地址。
接下来,找到这个:
/home/shalture/shalture/etc/shalture.conf
registeremail = "noreply@admin.tld";
将 registeremail
的值更改为 noreply@your_domain_name
。 这是当用户首次在您的网络上注册他们的昵称时将在欢迎电子邮件中显示的电子邮件地址。 这也是发送密码重置说明和激活说明的电子邮件。 我们已将其设置为不存在的电子邮件,因此它不会挤满您的真实收件箱,并且不需要回复这些电子邮件。
找到第一个 uplink
代码块并通过在其前添加 /*
和在其后添加 */
来注释掉整个代码块。 它应该如下所示:
/home/shalture/shalture/etc/shalture.conf
/* uplink "irc.example.net" { // The server name of the ircd you're linking to goes above. // host // The hostname to connect to. host = "127.0.0.1"; // vhost // The source IP to connect from, used on machines with multiple interfaces. #vhost = "192.0.2.5"; // send_password // The password sent for linking. send_password = "mypassword"; // receive_password // The password received for linking. receive_password = "theirpassword"; // port // The port to connect to. port = 6667; }; */
在下一部分中(在您评论的部分之后),找到:
/home/shalture/shalture/etc/shalture.conf
uplink "irc6.example.net" { host = "::1"; // password // If you want to have same send_password and accept_password, you // can specify both using 'password' instead of individually. password = "linkage"; port = 6667; };
将 irc6.example.net
更改为 services.your_domain_name
。 (您应该已经为服务设置了 A 记录。your_domain_name 作为先决条件的一部分。)将密码更改为安全的密码。 将端口更改为 7001
。 它现在应该类似于以下内容:
/home/shalture/shalture/etc/shalture.conf
uplink "services.your_domain_name" { host = "::1"; // password // If you want to have same send_password and accept_password, you // can specify both using 'password' instead of individually. password = "SuperSecret123"; port = 7001; };
接下来,在 nickserv
块中找到以下内容:
/home/shalture/shalture/etc/shalture.conf
nickserv { ... host = "services.int"; ... };
将其更改为您希望 NickServ 拥有的主机。 像这样:
/home/shalture/shalture/etc/shalture.conf
host = "ExampleNet/services/NickServ"
对以下服务执行类似于最后一项的更改。 每个配置文件中都会有一个块:
- 频道服务
- 全球的
- 信息服务
- 操作服务
- 服务端
- 备忘录服务
- 群服务
- 统计服务
- 阿里斯
这些服务是 Shaltúre 默认启用的。 接下来,找到这一行:
/home/shalture/shalture/etc/shalture.conf
operator "jilles" {
并更改它,使其具有您在 InspIRCd 配置的 oper
块中选择的昵称:
/home/shalture/shalture/etc/shalture.conf
operator "habbasi" {
最后,复制默认的 cron 配置文件以供以后使用:
cp /home/shalture/shalture/etc/shalture.cron.example /home/shalture/shalture/etc/shalture.cron
我们已成功配置服务! 现在,退出提示返回到您的 sudo
非 root 用户。
exit
第 10 步 — 配置 InspIRCd 以使用 Shaltúre
接下来,我们需要配置 InspIRCd 以与 Shaltúre 配合使用。 再次编辑 InspIRCd 配置文件:
sudo nano /etc/inspircd/inspircd.conf
在文件末尾添加以下行:
/etc/inspircd/inspircd.conf
<bind address="::1" port="7001" type="servers"> <uline server="services.example.com"> <link name="services.example.com" ipaddr="::1" port="7001" allowmask="::1" sendpass="password" recvpass="password"> <chanprotect noservices="no" qprefix="~" aprefix="&"> # Modules needed for services to function <module name="m_chanprotect.so"> <module name="m_halfop.so"> <module name="m_services_account.so"> <module name="m_deaf.so"> <module name="m_spanningtree.so"> <module name="m_globops.so"> <module name="m_cban.so"> <module name="m_svshold.so"> <module name="m_hidechans.so"> <module name="m_servprotect.so"> <module name="m_chghost.so"> <module name="m_namesx.so"> <module name="m_uhnames.so">
对于以红色突出显示的值,将值更改为您的域名,并将 sendpass
和 recvpass
更改为您在 Shaltúre 配置的 uplink
部分中使用的密码。
保存并退出文本编辑器。
我们都配置好了! 我们现在要做的就是重新启动服务器和服务!
sudo service inspircd restart sudo -i -u shalture /home/shalture/shalture/bin/shalture-services
您应该会在末尾看到一条消息,其中包含类似于以下内容:
[2015-07-24 22:21:10] running in background mode from /home/shalture/shalture
这意味着 Shaltúre 已经成功启动。
第 11 步 — 测试 Shaltúre 服务
再次像在步骤 5 或 7 中那样使用 IRSSI 连接到您的服务器。 您应该会看到类似于以下内容的屏幕:
这意味着 Shaltúre 工作正常并已成功链接到 InspIRCd。
第 12 步 — 使 InspIRCd 和 Shaltúre 在重新启动时保持不变
我们已经配置了您的 IRC 服务器。 怎么办? 好吧,Shaltúre 没有作为服务安装,这意味着它不会在重新启动后继续存在。 为此,请键入:
sudo -i -u shalture crontab -e
如果您收到有关使用哪个编辑器的提示,请按 2 选择 nano
或您希望的任何其他编辑器。
并在文件末尾添加以下内容:
*/5 * * * * /home/shalture/shalture/etc/shalture.cron >/dev/null 2>&1
这将每五分钟检查一次服务是否正在运行。 如果没有,它会启动它们。 不幸的是,InspIRCd 也没有添加到启动列表中,但是将其添加到列表中只需一个简单的命令:
sudo update-rc.d inspircd defaults
现在 InspIRCd 和 Shaltúre 都将在启动时运行!
结论
InspIRCd 允许您设置自定义 IRC 网络,您可以自己管理和管理。 Shaltúre 通过添加昵称所有权、频道所有权、备忘录等功能对其进行了补充。
要进一步配置您的 IRC 服务器,请查看 InspIRCd wiki 或 Shaltúre 中包含的示例配置文件。