如何使用InspIRCd 2.0和Shaltúre在Ubuntu 14.04上设置IRC服务器

介绍

本教程介绍如何在Ubuntu 14.04上安装和配置InspIRCd 2.0,一个IRC服务器。在您自己的服务器上安装可以让您灵活地管理用户,更改他们的缺口,更改频道属性等。

在本教程结束时,您应该拥有一个功能齐全的IRC服务器,您可以通过大多数IRC客户端连接到该服务器。

准备

请注意,标记为可选的项目将有所帮助,但不是必需的。

如果你有从证书颁发机构付费的SSL证书已经,你需要相应的*.pem*.crt或者*.key文件。

本教程中的所有命令都应以非root用户身份运行。如果命令需要root访问权限,则在命令前面加上sudo

第一步 - 安装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

第二步 - 配置InspIRCd

在InspIRCd实际运行之前,我们需要正确配置它。在此过程中,我们还设置了一些对我们的服务器运行至关重要的选项。有些东西对我们来说是独一无二的,比如网络名称。

创建inspircd.conf文件:

sudo nano /etc/inspircd/inspircd.conf

现在,将以下示例配置文件复制到其中。红色值需要自定义。复制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">

我们需要更改一些特定于您和CVM的值。在顶部,找到该server部分。将其更改为所需的主机名,描述和网络名称。该id应进行更改,它有两个数字和字母。例如:

<server name="irc.yourdomain.com"
        description="Example description for the IRC server"
        network="ExampleNet"
        id="46T">

现在,找到admin块。将值更改为IRC网络运营商的信息。操作员用户将能够在网络上执行所有操作。

<admin name="Hameer Abbasi"
       nick="habbasi"
       email="admin@example.com">

我们需要能够重启或关闭服务器。这是在power块中完成的。在这里,您需要更改密码。diepass值是网络管理员用来关闭服务器的密码,restartpass值是他们用来重启服务器的密码。如果输入了错误的密码,则pause值告诉服务器阻止执行这些操作的操作时间(以秒为单位)。继续并更改密码。保留pause默认值。

<power diepass="SecretPassword" restartpass="OtherSecretPassword" pause="2">

找到oper块。我们需要定义运营商帐户和密码。您之前定义的管理员和操作员可以是同一个人。如果您具有静态IP地址或受信任的域名,请更改主机以包含它。如果可能,请不要将此值设置为*@*,这允许操作员从任何地方进行连接。

<oper name="habbasi"
      password="secretPassword"
      host="*@localhost *@your.local.ip.here *@your.local.domain.here"
      type="NetAdmin">

对于该host值,使用空格分隔多个IP地址和域。您还应该添加当前CVM的IP地址和域(如果有)。保存更改,然后关闭文件。

第三步 - 编辑当天的消息

每次用户连接到IRC网络时,都会显示当天的消息。要自定义它,请在/etc/inspircd/位置创建文件inspircd.motd

sudo nano /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命令时显示给用户。例如,

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.

第四步 - 启动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

第五步 - 测试基本功能

由于基本功能应该已启动,请尝试连接到新创建的IRC网络。我们将引导您在Droplet上安装基于命令行的简单IRC客户端。首先,安装IRSSI。

sudo apt-get install irssi

然后启动IRC客户端:

irssi

您应该能够输入显示[(status)]的底部窗口。请注意,所有IRC命令都以正斜杠开头。要连接到IRC网络,请输入:

/connect irc.example.com

如果未为服务器配置主机名,则可以使用CVM的IP地址。如果您正确配置了服务器,则应该看到类似于以下内容的屏幕:

现在,通过输入以下命令,以操作员身份登录:

/oper habbasi secretPassword

如果它有效,你应该看到“你现在是一个NetAdmin”。这意味着您的操作员权限正在运行。要退出,我们将使用另一个命令:

/quit

推荐的IRC客户

几乎所有设备都有各种各样的IRC客户端。以下是推荐客户的小清单:

  • 适用于Windows,Mac OS X和Linux的HexChat
  • 适用于Windows的mIRC
  • 适用于Mac OS X和iOS的讨论会
  • 适用于Linux和Mac OS X的IRSSI
  • AndChat for Android
  • Kiwi IRC(网络浏览器客户端)

请注意,使用Kiwi IRC,您将无法使用操作权限。Kiwi通过代理连接,不保留您的IP地址。如果您选择仅列出允许连接操作员操作的特定IP地址(建议用于安全性),则oper权限将不适用于Kiwi IRC。

第六步 - 设置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

找到这个:

<bind address="" port="6667" type="clients">

在绑定部分下方,添加以下行:

<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。

第七步 - 测试SSL(可选)

再次,为了测试SSL,我们将使用IRSSI。像以前一样输入以启动IRSSI:

irssi

接下来,输入以下命令以启用SSL连接:

/connect -SSL -SSL_Verify irc.example.com 6697

如果您使用的是自签名证书,则应省略该-SSL_Verify选项。

如果成功,你应该看到这样的屏幕:

/quit退出客户端。

第八步 - 安装Shaltúre服务

您的IRC服务器工作正常,您可以连接到它。但猜猜怎么了?你不能注册nicks。您无法管理频道所有权和角色。您无法发送或接收备忘录。尽管如此,我们还是使用服务。最受欢迎的服务平台是Atheme,但它的开发已经停止,除非修补严重的安全漏洞,否则它不会更新。出于这个原因,我将解释如何安装一个名为Shaltúre的Atheme开发分支。

我们首先安装一个必备软件包:

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/

第九步 - 配置Shaltúre服务

安装完成后,将目录更改为Shaltúre配置目录,以便我们对其进行配置。我们将从示例配置文件开始。

cd ~/shalture/etc
cp shalture.conf.example shalture.conf
nano shalture.conf

在文件中找到:

#loadmodule "modules/protocol/charybdis";

通过删除该行的开头字符#,并将charybdis更换为inspircd:

loadmodule "modules/protocol/inspircd";

接下来,找到:

name = "services.int";

更改int以匹配IRC服务器的域名或IP地址:

name = "services.your_domain_name_or_IP";

找到这一行:

numeric = "00A";

更改numeric的值,使其与您之前提供的服务器id不同,但它必须包含两个数字和一个字母,如下所示:

numeric = "07C";

现在找到:

netname = "misconfigured network";

将值更改为您在InspIRCd配置文件的server块中设置的网络名称netname。例如:

netname = "ExampleNet";

还找到:

hidehostsuffix = "users.misconfigured";

并删除users引号后的所有内容:

hidehostsuffix = "users";

接下来,找到这个:

adminname = "misconfigured admin";

将引号内的部分更改为您的姓名或笔名。

现在,更改网络的联系电子邮件。找:

adminemail = "admin@example.com";

adminemail值更改为您的电子邮件地址。

接下来,找到这个:

registeremail = "noreply@admin.tld";

registeremail值更改为noreply@your_domain_name。这是用户首次在网络上注册昵称时,欢迎电子邮件中显示的电子邮件地址。它也是发送密码重置说明和激活说明的电子邮件。我们已将其设置为不存在的电子邮件,因此它不会占用您的真实收件箱,因为不需要回复这些电子邮件。

找到第一个uplink代码块并在代码块前添加/*,代码块后添加*/以注释掉整块。它应该如下所示:

/* 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;
}; */

在下一部分(在您评论过的部分之后),找到:

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.netservices.your_domain_name。(你应该有一个建立一种服务记录。您的域名名称作为准备条件的一部分。)更改密码的东西安全。将端口更改为7001。它现在看起来应该类似于以下内容:

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块中找到以下内容:

nickserv {
...
host = "services.int";
...
};

将其更改为您希望NickServ拥有的主机。像这样:

host = "ExampleNet/services/NickServ"

执行与上一个服务类似的更改。每个配置文件中都会有一个块:

  • ChanServ
  • Global
  • InfoServ
  • OperServ
  • SaslServ
  • MemoServ
  • GroupServ
  • StatServ
  • ALIS

这些服务是Shaltúre默认启用的服务。接下来,找到这一行:

operator "jilles" {

并更改它,使其具有您在InspIRCd配置中的oper块中选择的缺口:

operator "habbasi" {

最后,复制以后要使用的默认cron配置文件:

cp /home/shalture/shalture/etc/shalture.cron.example /home/shalture/shalture/etc/shalture.cron

我们已成功配置服务!现在,退出提示以返回到具有sudo权限的非root用户。

exit

第十步 - 配置InspIRCd与Shaltúre一起使用

接下来,我们需要配置InspIRCd以与Shaltúre一起使用。再次编辑InspIRCd配置文件:

sudo nano /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">

请将相应值更改为您的域名,以及您在Shaltúre配置uplink部分中使用的sendpassrecvpass密码。

保存,退出文本编辑器。

我们都配置好了!我们现在要做的就是重启服务器和服务!

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已成功开始。

第十一步 - 测试Shaltúre服务

再次使用IRSSI连接到服务器,就像在步骤5或7中一样。您应该看到类似于以下内容的屏幕:

这意味着Shaltúre正常工作并成功链接到InspIRCd。

第十二步 - 让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中包含的示例配置文件。

想要了解更多关于Ubuntu的开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Set Up an IRC Server on Ubuntu 14.04 with InspIRCd 2.0 and Shaltúre》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喵了个咪的博客空间

[喵咪Redis]Redis安装与介绍

[喵咪Redis]Redis安装与介绍 ? 前言 哈喽大家好啊,这次要来和大家一起来了解学习Redis的一系列技术,最终目的是搭建一个高可用redis集群自动负...

44770
来自专栏人人都是极客

进程、线程之间的爱恨纠葛...

当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程。

18830
来自专栏耕耘实录

忘记MySQL数据库root密码,使用安全模式巧妙重置密码

忘记MySQL的root登录密码这种事情还是会发生的,很不幸,这事今天被我遇到了,顿时不知道怎么办了!百度了好一阵,上面的各种方法都使用了一遍,还是不奏效!可能...

25540
来自专栏Web项目聚集地

Maven学习笔记(一)

本教程作者是「小灯光环」,作者简介:全栈开发工程师,CSDN博客专家,CSDN论坛 Java Web/Java EE版主,热爱技术,乐于分享,在分布式Web开发...

8920
来自专栏专业duilib使用+业余界面开发

duilib中list拖动表头大小内容大小跟随变化的一个示例

22240
来自专栏PhpZendo

使用 Laravel 制定 MySQL 数据库备份计划任务

你可以在终端里通过运行一行命令导出整个数据库。这种方案不仅简单直接而且有效。不过有更加自动化的解决方案。让我们来看看究竟是什么!

15910
来自专栏博客园迁移

MQ见解

  ActiveMQ默认的使用的协议是openWire,端口号:61616   一条消息从producer端发出之后,一旦被broker正确保存,那么它将会被c...

16930
来自专栏小狼的世界

PHP文件上传中的安全问题

在使用PHP进行开发时,经常遇到文件上传的场景。其中会隐藏很多我们平时注意不到的安全问题,我总结了一下,主要有几个方面:

14920
来自专栏企鹅号快讯

Redis

Redis介绍: (Redis)是一个基于 key-value 键值对的持久化数据库存储系统。支持多种数据结构,包括 string (字符串)、list (链表...

47170
来自专栏JMCui

Linux 学习记录 二 (文件的打包压缩).

 前言:本文参考《鸟哥的Linux 私房菜》,如有说的不对的地方,还请指正!谢谢!  环境:Centos 6.4  和window不同,在Linux压缩文件需要...

37450

扫码关注云+社区

领取腾讯云代金券