Internet Relay Chat (IRC) เป็นสิ่งที่มีมาตั้งแต่ยุคแรก ๆ ของอินเทอร์เน็ต ในคู่มือนี้ฉันจะแสดงวิธีการตั้งค่าเซิร์ฟเวอร์ IRC ด้วย InspIRCd กับ Atheme สำหรับบริการ IRC เพิ่มเติม InspIRCd เป็นหนึ่งในไม่กี่เซิร์ฟเวอร์ IRC ที่เขียนตั้งแต่เริ่มต้นและเป็นหนึ่งในเซิร์ฟเวอร์ IRC เพียงไม่กี่ตัวที่จะให้คุณสมบัติที่ปรับค่าได้ผ่านการใช้ระบบโมดูลขั้นสูง
ข้อกำหนดเบื้องต้น
- อินสแตนซ์ของเซิร์ฟเวอร์ Ubuntu 16.04 LTS x64
- sudo (หรือบัญชี root) ของผู้ใช้
- (ไม่บังคับ) ชื่อ DNS สำหรับอินสแตนซ์ของคุณ
InspIRCd ควรทำงานกับทุกขนาดเช่น ความต้องการขั้นต่ำของระบบคือ CPU 700MHz และ RAM 300MB
ปรับปรุงระบบ
เมื่อเข้าสู่ระบบในฐานะผู้ใช้ sudo คุณสามารถอัปเดตระบบให้สถานะที่มั่นคงล่าสุดดังต่อไปนี้:
apt-get update && apt-get upgrade
การกำหนดค่าไฟร์วอลล์
ก่อนอื่นเรามาทำให้ VPS แข็งขึ้นเล็กน้อย เราจะเปิดใช้งานufw
และเพิ่มกฎบางอย่าง เริ่มต้นด้วยการกำหนดค่าพอร์ต:
ufw allow 22/tcp
ufw allow 6667/tcp
ufw enable
ไฟร์วอลล์จะแจ้งให้กล่องโต้ตอบยอมรับการเปลี่ยนแปลง เพียงกดปุ่มYใช่
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
ต่อไปเราสามารถติดตั้ง InspIRCd สำหรับ Ubuntu 16.04 แพคเกจนี้สามารถใช้ได้ผ่านพื้นที่เก็บข้อมูลหลัก
apt-get install inspircd
เมื่อติดตั้งเสร็จแล้วเราสามารถเริ่มกำหนดค่าบริการ การกำหนดค่าหลักสามารถพบได้ใน/etc/inspircd/inspircd.conf
ไฟล์และมีเลย์เอาต์ของไฟล์ XML
nano /etc/inspircd/inspircd.conf
ขั้นแรกให้ค้นหาserver
แท็ก แท็กนี้เป็นตำแหน่งที่คุณป้อนรายละเอียดของเซิร์ฟเวอร์ / เครือข่ายผู้ใช้ของคุณส่วนใหญ่จะเห็นการตั้งค่าเหล่านี้
name
: ชื่อโฮสต์ของเซิร์ฟเวอร์ของคุณ มันไม่จำเป็นต้องแก้ไข แต่ไม่จำเป็นต้องเป็นไวยากรณ์ที่ถูกต้อง (เช่นsub.example.net
)
description
: คำอธิบายเซิร์ฟเวอร์
id
: SID ที่จะใช้สำหรับเซิร์ฟเวอร์นี้ สิ่งนี้ไม่ควรถูกทำเป็นข้อคิดเห็นถ้าไม่มีความขัดแย้ง SID ต้องมีความยาวสามอักขระ อักขระตัวแรกต้องเป็นตัวเลข [0-9] ตัวอักษรสองตัวที่เหลืออาจเป็นตัวอักษร [AZ] หรือตัวเลข
network
: ชื่อเครือข่ายที่กำหนดในการเชื่อมต่อกับลูกค้า ควรเหมือนกันในทุกเซิร์ฟเวอร์ในเครือข่ายและไม่มีช่องว่าง
ในคำแนะนำของเราเราจะใช้สิ่งต่อไปนี้:
<server name="irc.example.net"
description="My EXAMPLE.NET server"
id="5AA"
network="ExampleNET">
แทนที่แท็กเดิมด้วยแท็กด้านบน
ถัดไปค้นหาadmin
แท็ก การตั้งค่าเหล่านี้เป็นรายละเอียดการจัดการของเซิร์ฟเวอร์ของคุณ พวกเขาจะปรากฏขึ้นเมื่อคุณพิมพ์/ADMIN
คำสั่ง
name
: ชื่อจริง
nick
: ชื่อเล่น (ยิ่งสิ่งที่คุณใช้บนเครือข่าย)
email
: ที่อยู่อีเมล. ไม่จำเป็นต้องถูกต้อง แต่ที่อยู่นี้จะเป็นที่อยู่ที่ผู้ใช้ของคุณควรติดต่อคุณในกรณีที่เกิดปัญหา
มาใช้ผู้ดูแลระบบXenial
กันเถอะ:
<admin name="Xenial Xerius"
nick="xenial"
email="[email protected]">
bind address
ตอนนี้ย้ายไปที่ แท็กนี้ใช้สำหรับเปิดบริการ โดยค่าเริ่มต้นคุณจะเห็น localhost IP ( 127.0.0.1
) ซึ่งหมายความว่าโลกภายนอกไม่สามารถรับบริการได้ มาเปิดบริการของเราโดยไม่ต้องใช้ที่อยู่เลย สิ่งนี้จะทำให้บริการเชื่อมต่อกับอีเธอร์เน็ตอินเตอร์เฟสที่เครื่องเป็นเจ้าของ:
<bind address="" port="6667" type="clients">
แท็กถัดไปจะเป็นpower
แท็ก แท็กนี้กำหนดสองรหัสผ่าน
diepass
: รหัสผ่านสำหรับโอเปอเรเตอร์ที่จะใช้หากต้องการปิดเซิร์ฟเวอร์
restartpass
: รหัสผ่านสำหรับโอเปอเรเตอร์ที่จะใช้หากจำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์
วิธีที่ดีที่สุดคือเปลี่ยนรหัสผ่านเริ่มต้นเหล่านี้:
<power diepass="die123" restartpass="restart123" pause="2">
การตั้งค่าสุดท้ายที่เราจะเปลี่ยนคือการoper
ตั้งค่า สิ่งเหล่านี้กำหนดล็อกอินของโอเปอเรเตอร์
name
: เข้าสู่ระบบผู้ประกอบการที่ใช้ในการ oper ขึ้น (ตัวอย่าง: /oper name password
)
password
: unhashed และข้อความล้วน
host
: ชื่อโฮสต์ / IP ใดที่อนุญาตให้ใช้งานได้ ตัวเลือกหลายตัวสามารถคั่นด้วยช่องว่างและอนุญาตให้ CIDR คุณสามารถใช้*
หรือ@
สำหรับส่วนนี้
type
: Oper ประเภทนี้คืออะไร บล็อกดังกล่าวข้างต้นควรจะมีสามชั้นเรียนที่กำหนดไว้แล้ว: NetAdmin
, และGlobalOp
เป็นหนึ่งที่เราจะใช้Helper
NetAdmin
เปลี่ยนoper
แท็กโดยใช้เนื้อหาต่อไปนี้ โปรดทราบว่าสำหรับตัวอย่างของเราเราจะใช้ " @
" สำหรับโฮสต์ ในสภาพแวดล้อมการผลิตไม่พึงประสงค์ที่จะใช้สิ่งนี้:
<oper name="xenial"
password="mypassword"
host="*@*"
type="NetAdmin">
ก่อนที่เราจะเริ่มบริการใหม่ให้แก้ไขmotd
และrules
ไฟล์:
nano /etc/inspircd/inspircd.motd
แทนที่ด้วยของคุณเองตัวอย่างเช่น:
This is the motd of example.net. Here you can list planned outages or information your users need to know about this IRC server.
ในที่สุดแก้ไขไฟล์กฎ
nano /etc/inspircd/inspircd.rules
เพิ่มกฎของคุณเองตัวอย่างเช่น:
The first rule of Fight Club is: You do not talk about Fight Club. The second rule of Fight Club is: You DO NOT TALK ABOUT FIGHT CLUB!
ตอนนี้ทุกอย่างได้รับการตั้งค่าให้เริ่มบริการ IRC ใหม่:
service inspircd restart
หากต้องการตรวจสอบว่าทุกอย่างทำงานอยู่ให้สอบถามnetstat
เครื่องมือ:
netstat -tulpn | grep -i inspircd
ควรแสดงรายการโปรแกรมinspircd
ฟังพอร์ต6666
:
tcp6 0 0 :::6667 :::* LISTEN 31313/inspircd
udp 0 0 0.0.0.0:39335 0.0.0.0:* 31313/inspircd
เพื่อทดสอบเซิร์ฟเวอร์เราสามารถติดตั้งไคลเอ็นต์ IRC ของเทอร์มินัล บน Windows คุณสามารถใช้โปรแกรมเช่น mIRC ในตัวอย่างของเราเราจะใช้ weechat นี่คือไคลเอนต์ IRC แบบข้อความที่สามารถใช้ในเซสชันเทอร์มินัล
ติดตั้งแอ็พพลิเคชัน weechat ผ่านที่เก็บ:
apt-get install weechat
เมื่อติดตั้งแอปพลิเคชันนี้แล้วให้เรียกใช้ไคลเอนต์ IRC นี้:
weechat
ในการดูคำสั่งทั้งหมดที่ weechat มีให้คุณสามารถขอคำสั่ง help ได้:
/help
หากต้องการออกจาก weechat คุณสามารถพิมพ์คำสั่งต่อไปนี้:
/quit
เพิ่มเซิร์ฟเวอร์ท้องถิ่นของเราไปยังการเชื่อมต่อใน weechat:
/server add local localhost
ตอนนี้เราสามารถเชื่อมต่อกับโปรไฟล์การเชื่อมต่อชื่อ 'ท้องถิ่น':
/connect local
คุณจะเห็น motd และกฏของเราปรากฏขึ้นในหน้าต่างเทอร์มินัล
ในการโปรโมตตัวคุณเองเป็นโอเปอร์เรเตอร์ให้พิมพ์ดังต่อไปนี้:
/oper xenial mypassword
นี่จะแสดงการยืนยันความสำเร็จให้เรา:
22:40:34 local -- | User mode [+o] by irc.example.net
22:40:34 local -- | You are now a NetAdmin
สำหรับเซิร์ฟเวอร์ IRC ของเรา
การติดตั้งบริการ IRC - Atheme
Atheme เป็นชุดบริการสำหรับเครือข่าย IRC ที่ออกแบบมาสำหรับเครือข่าย IRC ขนาดใหญ่ที่มีความต้องการความยืดหยุ่นสูง เพิ่มบริการเพิ่มเติมเช่น NickServ (การลงทะเบียนชื่อเล่น) ไปยังเครือข่าย IRC ของคุณ
Atheme สามารถพบได้ในที่เก็บ Ubuntu:
apt-get install atheme-services
เมื่อติดตั้งไบนารีแล้วให้แยกไฟล์การกำหนดค่าตัวอย่างและคัดลอกไปยังatheme
โฟลเดอร์:
gunzip /usr/share/doc/atheme-services/examples/atheme.conf.example.gz
cp /usr/share/doc/atheme-services/examples/atheme.conf.example /etc/atheme/atheme.conf
ถัดไปแก้ไขไฟล์กำหนดค่านี้:
nano /etc/atheme/atheme.conf
ก่อนอื่นให้ค้นหาloadmodule
คำสั่งโปรโตคอล สิ่งนี้ควรถูกกำหนดดังนี้:
loadmodule "modules/protocol/charybdis";
แทนที่charybdis
ด้วยโปรโตคอลของinspircd
:
loadmodule "modules/protocol/inspircd12";
ค้นหาบริการต่อไปname
:
name = "services.int";
เปลี่ยนservices.int
ให้ตรงกับชื่อโดเมนหรือที่อยู่ IP ของเซิร์ฟเวอร์ IRC ของคุณ:
name = "services.irc.example.net";
เมื่อดำเนินการเสร็จแล้วให้ค้นหาตัวเลข:
numeric = "00A";
ตอนนี้เปลี่ยนเป็นค่าที่แตกต่างจากตัวเลขที่ใช้ในแท็กเซิร์ฟเวอร์ที่ใช้มาก่อน
numeric = "77C";
เมื่อเสร็จแล้วให้กำหนดค่าชื่อเครือข่าย ค้นหาnetname
:
netname = "misconfigured network";
เปลี่ยนค่านี้เป็นพารามิเตอร์เครือข่ายในแท็กเซิร์ฟเวอร์
netname = "ExampleNET";
เปลี่ยนค่าของhidehostsuffix
:
hidehostsuffix = "users.misconfigured";
ลบ.misconfigured
:
hidehostsuffix = "users";
เปลี่ยนชื่อผู้ดูแลระบบเป็นชื่อที่เราใช้ก่อนหน้า
adminname = "xenial";
จับคู่adminemail
กับอีเมลที่เกี่ยวข้องที่ใช้ก่อนหน้า:
adminemail = "[email protected]";
เมื่อเสร็จแล้วเราต้องสร้างอัปลิงค์สำหรับบริการของเรา ค้นหาuplink
บล็อคโค้ดสองรายการและใส่ความคิดเห็นทั้งหมด เพิ่ม/*
ก่อนuplink{
คำสั่งและ*/
ท้ายวงเล็บปิด
มันจะมีลักษณะดังต่อไปนี้:
/* this is an example for using an IPv6 address as an uplink */
/*
uplink "irc6.example.net" {
host = "::1";
password = "linkage";
port = 6667;
};
*/
ต่อไปเพิ่มอัปลิงค์ของเราเอง อัปลิงค์นี้จะทำงานบน IP ในพื้นที่ของเราและบนพอร์ต7001
เท่านั้น ระบุรหัสผ่านลับสุดยอด (เราจะใช้ในภายหลัง):
uplink "services.irc.example.net" {
host = "127.0.0.1";
// password
// If you want to have same send_password and accept_password, you
// can specify both using 'password' instead of individually.
password = "SuperSecret123456";
port = 7001;
};
สุดท้ายค้นหาคำจำกัดความบริการของเรา เริ่มต้นด้วยการnickserv
บล็อกก่อน
ในบล็อก nickserv ให้ค้นหาhost
แท็กและเปลี่ยนเป็นExampleNet/services/NickServ
:
nickserv {
...<<truncated>>...
/* (*)host
* The hostname we want NickServ to have.
*/
host = "ExampleNet/services/NickServ";
/* (*)real
* The realname (gecos) information we want NickServ to have.
*/
real = "Nickname Services";
...<<truncated>>...
เปลี่ยนhostname tag
บริการอื่น ๆ ทั้งหมดเช่นกัน:
nickserv: ExampleNet/services/NickServ
chanserv: ExampleNet/services/ChanServ
global: ExampleNet/services/Global
infoserv: ExampleNet/services/InfoServ
operserv: ExampleNet/services/OperServ
saslserv: ExampleNet/services/SaslServ
memoserv: ExampleNet/services/MemoServ
gameserv: ExampleNet/services/GameServ
botserv: ExampleNet/services/BotServ
groupserv: ExampleNet/services/GroupServ
hostserv: ExampleNet/services/HostServ
helpserv: ExampleNet/services/HelpServ
alis: ExampleNet/services/ALIS
เมื่อเสร็จแล้วให้บันทึกและออกจากไฟล์กำหนดค่า
ในการทดสอบหมดให้เรียกใช้atheme-services
ไบนารี:
atheme-services
สิ่งนี้ควรบอกคุณอย่างชัดเจนว่ามันใช้งานได้หรือไม่ หากคุณไม่ได้รับเอาต์พุตเหมือนที่แสดงด้านล่างให้ย้อนกลับและตรวจสอบข้อผิดพลาดในไฟล์กำหนดค่า:
[19/02/2018 23:06:24] db-open-read: database '/var/lib/atheme/services.db' does not yet exist; a new one will be created.
[19/02/2018 23:06:24] pid 1929
[19/02/2018 23:06:24] running in background mode from /
ตอนนี้เปิดใช้งานบริการโดยแก้ไขไฟล์ services:
nano /etc/default/atheme-services
เปลี่ยนENABLED
ค่า:
DAEMON_OPTS=""
ENABLED=1
ตอนนี้เราสามารถเริ่มบริการ:
service atheme-services restart
ตรวจสอบสถานะ:
service atheme-services status
สิ่งนี้จะให้ผลลัพธ์ที่คล้ายกัน:
● atheme-services.service - LSB: Atheme-services daemon init.d script
Loaded: loaded (/etc/init.d/atheme-services; bad; vendor preset: enabled)
Active: active (running) since Wed 2018-02-19 23:45:05 UTC; 8s ago
Docs: man:systemd-sysv-generator(8)
Feb 19 23:45:05 vultr.guest atheme-services[2810]: Starting Atheme IRC Services: atheme-service
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] atheme 6.0.11 is start
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] Module operserv/sgline
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] module_load(): module
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] /etc/atheme/atheme.con
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] db-open-read: database
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] pid 2824
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] running in background
Feb 19 23:45:05 vultr.guest atheme-services[2810]: .
Feb 19 23:45:05 vultr.guest systemd[1]: Started LSB: Atheme-services daemon init.d script.
ก่อนที่เราจะเสร็จสิ้นเราต้องเพิ่มบริการ Atheme ของเราใน InspIRCd:
nano /etc/inspircd/inspircd.conf
ในตอนท้ายของไฟล์เพิ่มบรรทัดเหล่านี้:
<bind address="127.0.0.1" port="7001" type="servers">
<uline server="services.irc.example.net">
<link name="services.irc.example.net"
ipaddr="127.0.0.1"
port="7001"
allowmask="127.0.0.1"
sendpass="SuperSecret123456"
recvpass="SuperSecret123456">
<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">
ตอนนี้เริ่มบริการ InspIRCd:
service inspircd restart
ตรวจสอบให้แน่ใจว่าทุกอย่างทำงานได้ดี:
service inspircd status
ตอนนี้เริ่มไคลเอนต์ weechat ของเราอีกครั้ง:
weechat
เชื่อมต่อกับเซิร์ฟเวอร์ท้องถิ่นของเรา:
/connect local
คุณจะเห็นหนึ่งในบริการ Atheme ของเราปรากฏขึ้นทันที: NickServ มันจะทักทายคุณด้วยข้อมูลเกี่ยวกับตัวเอง
23:12:48 local -- | NickServ (NickServ@ExampleNet/services/NickServ): Welcome to ExampleNet,
| root! Here on ExampleNet, we provide services to enable the registration of
| nicknames and channels! For details, type /msg NickServ help and /msg
| ChanServ help.
คุณสามารถสืบค้น NickServ และค้นหาคำสั่งที่มีอยู่ได้ดังต่อไปนี้:
/msg NickServ help