defect de segmentare

chiar și în 2018, când aplicațiile moderne de mesagerie instantanee bogate, cum ar fi Gitter sau extrem de popularul Slack, sunt la fel de omniprezente ca niciodată, IRC rămâne metoda preferată de comunicare pentru mulți dezvoltatori. Este simplu, stabil, omniprezent și, cel mai important, complet descentralizat. Este un protocol vechi, deși, ca IRC a fost lovind despre La începutul anilor nouăzeci (protocolul IRC RFC a fost publicat în 1993). Ca atare, IRC vine cu limitările sale.

una dintre cele mai notabile pentru mine este lipsa arhivării mesajelor. Toate mesajele trimise și primite de un client IRC nu sunt stocate în aparatul dvs. și nici nu veți obține o reluare a conversațiilor anterioare într-un canal pe care tocmai l-ați alăturat. De fiecare dată când vă conectați la o cameră de chat IRC, vi se oferă o ardezie curată. Acest lucru este incomod, având în vedere că IRC este foarte des folosit ca un canal de comunicare în afara benzii. Vă alăturați unui canal, lăsați o întrebare și apoi așteptați câteva ore pentru ca cineva să răspundă, deoarece oamenii nu tind să monitorizeze IRC la fel de frecvent ca și cu alte aplicații de mesagerie instantanee.

din fericire și poate nu surprinzător, aceasta a fost o problemă rezolvată de ceva timp. Cea mai rapidă și mai simplă metodă este de a stabili o conexiune permanentă la serverul IRC de la un server aflat sub controlul nostru, care este pe 24/7 și de a stabili o sesiune SSH/tmux cu ea de fiecare dată când dorim să verificăm din nou IRC. Când am terminat, detașați sesiunea cu C-a d pe ecranul GNU sau C-b d pe tmux. Acest lucru rezolvă problema lipsei tuturor mesajelor trimise într-un canal în timp ce eram plecați, dar asta este tot ce primești. Dacă sunteți în căutarea unei soluții care să ofere mult mai mult decât atât, este timpul să aruncați o privire la bouncers.

ce este un server bouncer?

un server bouncer este un server pe care îl folosim ca proxy pentru a accesa IRC. Un bouncer va lua detaliile noastre IRC și va stabili o conexiune la un server IRC în numele nostru și chiar se va alătura unei liste de canale predefinite.

apoi ne conectăm la acest server bouncer de la clientul nostru IRC în loc de serverul IRC direct și, din acest moment, mesajele noastre vor fi „returnate” de către bouncer către serverul țintă.

Bouncers oferă mai multe beneficii, inclusiv:

  • sesiuni persistente de server și canal
  • înregistrarea conversațiilor canalului într-un fișier text pentru arhivare
  • Autentificare utilizator Bouncer
  • autentificare automată server IRC prin NickServ sau SASL
  • Automatizați stările utilizatorului IRC (lăsați & mesaje în deplasare etc.)
  • și multe altele!

configurarea serverului bouncer pe AWS

vom configura propriul server Bouncer folosind ZNC, cea mai populară aplicație de server bouncer, pe o instanță AWS EC2 ieftină.

lansați o nouă instanță Ubuntu Server 16.04 t2.nano EC2 cu toate setările implicite, cu excepția următoarelor:

  • date utilizator: instalați software-ul bouncer (ZNC), creați un utilizator pentru proces și un director pentru ca acesta să-și stocheze fișierele și un fișier de unitate systemd pentru a-l lansa la pornire.
#!/bin/bashapt-get update && apt-get dist-upgrade -y && \apt-get install -y znc znc-dev znc-perl znc-python znc-tcl && \useradd -M -s /bin/false znc && usermod -L znc && \mkdir /opt/znc && \cat > /etc/systemd/system/znc.service <<- EOFDescription=ZNC IRC BouncerExecStart=/usr/bin/znc -d /opt/zncExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=alwaysType=forkingUser=zncWantedBy=multi-user.targetAlias=znc.serviceEOF

deoarece fișierul unității systemd a fost plasat direct în /etc/systemd/system, acesta va fi rulat automat la pornire. Nu este nevoie să o activați.

  • subrețea: asigurați-vă că instanța este lansată într-o subrețea publică cu un Gateway Internet atașat, astfel încât să fie ușor accesibil de pe Internet.
  • EBS volume: parola ZNC (Bouncer), parola serverului IRC și jurnalele de conversație IRC vor fi stocate în fișiere text simplu, așa că vă recomand cu tărie să criptați volumul.
  • creați un nou grup de securitate pentru a-l atașa, astfel încât următoarele porturi să fie deschise:
    • SSH: deci putem configura instanța
    • portul TCP 7078 (orice port fără rezerve va face, de fapt): Port de ascultare ZNC
  • setați eticheta „nume” la ceva semnificativ, dacă doriți

acum generați o nouă adresă IP elastică și asociați-o instanței.

instalând ZNC

SSH în instanța EC2 nou creată și executați procesul de configurare ZNC pentru prima dată, care ne va cere să setăm un port de ascultare pentru bouncer și să creăm un cont de administrator. Selectați opțiunile de mai jos.

$ znc --makeconf Checking for list of available modules... -- Global settings -- Listen on port (1025 to 65534): 7078 Listen using SSL (yes/no) : yes Verifying the listener... Unable to locate pem file: , creating it Writing Pem file ... Enabled global modules -- Admin user settings -- Username (alphanumeric): admin Enter password: Confirm password: Nick : Alternate nick : Ident : Real name (optional): Bind host (optional): Enabled user modules Set up a network? (yes/no) : no Writing config ... To connect to this ZNC you need to connect to it as your IRC server using the port that you supplied. You have to supply your login info as the IRC server password like this: user/network:pass. Try something like this in your IRC client... /server <znc_server_ip> +7078 admin:<pass> To manage settings, users and networks, point your web browser to https://<znc_server_ip>:7078/ Launch ZNC now? (yes/no) : no

acest lucru va genera un fișier de configurare care va fi stocat în directorul de acasă pentru utilizatorul pe care l-am ssh ‘ D ca (ubuntu dacă utilizați serverul implicit Ubuntu Ami furnizat de Amazon). Să mutăm fișierele de configurare nou create din acest director la /opt/znc și să acordăm drepturile de proprietar ale utilizatorului znc.

$ sudo mv ~/.znc/* /opt/znc$ rmdir ~/.znc$ sudo chown -R znc:znc /opt/znc

acum Puteți începe ZNC

$ sudo systemctl start znc

asigurați-vă că ZNC a început cu succes

$ systemctl status znc● znc.service - ZNC IRC Bouncer Loaded: loaded (/etc/systemd/system/znc.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-07-29 13:02:07 UTC; 21min ago Process: 1181 ExecStart=/usr/bin/znc -d /opt/znc (code=exited, status=0/SUCCESS) Main PID: 1245 (znc) Tasks: 1 Memory: 10.8M CPU: 54ms CGroup: /system.slice/znc.service └─1245 /usr/bin/znc -d /opt/znc

Configurarea ZNC

prima etapă de configurare este finalizată. Acum trebuie să adăugăm utilizatorul pe care îl vom conecta ca și o rețea IRC pentru a se asocia cu acel utilizator.

pentru a aplica setările rămase la bouncer, ne vom conecta la interfața sa de configurare web, disponibilă pe portul pe care l-am configurat pentru a asculta (în cazul meu, portul 7078). Deci, în browserul dvs., introduceți următoarea adresă URL: https://<bouncer_ip_address>:7078. Dacă primiți o eroare „certificat HTTPS lipsă” sau similară, puteți ignora în siguranță acest lucru și puteți instrui browserul să continue. Acum conectați-vă ca utilizator de administrator pe care l-ați creat înainte, utilizând parola introdusă.

ZNC web frontend

după ce vă conectați, puteți face clic pe intrarea de meniu „Setări globale” din partea dreaptă pentru a arunca o privire asupra configurației generale a bouncer-ului.

ZNC instalează o colecție de module (Obiecte partajate) în /usr/lib/znc pe care le puteți încărca sau descărca în timp ce demonul rulează. Dacă derulați în jos în partea de jos, veți vedea o listă a modulelor globale care afectează funcționarea bouncerului, pe care le puteți activa/dezactiva comutând casetele de selectare din coloana „Nume”. În cazul meu, am activat „log”, deoarece vreau ca bouncerul meu să stocheze într-un fișier text toate mesajele trimise în canalele din care sunt membru.

ZNC Global Modules

Faceți clic pe „Gestionați utilizatorii” din meniul din dreapta pentru a afișa panoul de configurare a utilizatorului. Acum faceți clic pe” Adăugați ” pentru a adăuga un utilizator nou și completați detaliile: nume de utilizator, parolă (rețineți că această parolă va fi utilizată doar pentru a vă autentifica cu ZNC, nu va fi utilizată cu serverul IRC), detalii IRC și o listă de module pe care poate doriți să le încărcați pentru acest utilizator în mod specific.

detalii utilizator ZNC

apoi faceți clic pe „Salvați și continuați” în partea de jos, astfel încât să putem adăuga o rețea IRC pentru acest utilizator.

adăugarea unei rețele la un utilizator

completați detaliile pentru rețeaua IRC cu care va fi asociat acest utilizator și activați opțional toate modulele pe care doriți să le încărcați automat la conectarea la această rețea. Un astfel de modul ar putea fi sasl dacă doriți să vă autentificați folosind această metodă cu serverul IRC. Voi activa acest modul în această rețea.

în caseta de text „serverele acestei rețele IRC” veți introduce informațiile serverului IRC la care doriți să vă conectați în format

<server> <port> <irc_password>

adăugați un semn plus la port pentru a indica o conexiune SSL. <irc_password> este parola pe care ați folosit-o pentru a vă înregistra pe serverul IRC prin comanda /NickServ, care este complet separată de parola pe care ați setat-o să o autentificați la bouncer-ul însuși de mai sus.

de exemplu, pentru a vă conecta la rețeaua IRC Freenode prin SSL cu un cont înregistrat anterior, conținutul acestei casete text ar fi

irc.freenode.net +6697 myNickServPassword123

în caz contrar, ar putea fi pur și simplu

irc.freenode.net 6667

Configurarea rețelei IRC

veți observa că parola IRC este stocată în text clar pe server. Acesta este motivul pentru care am recomandat în timpul pașilor de configurare VPS să criptați volumul EBS și, în mod natural, să aveți un control foarte strâns asupra celor care vă pot accesa serverul bouncer. Se recomandă blocarea grupului de securitate VPS pentru a permite numai conexiunile de intrare dintr-un subset foarte mic de IPs.

Faceți clic din nou pe „Salvați și continuați”. Acum Puteți adăuga opțional o listă de canale pe care doriți bouncer să vă conectați în, dar va aminti, de asemenea, cele vă alăturați-vă atunci când vă conectați la ea.

Avem acum un AWS VPS (Virtual Private Server) care găzduiește o instalare complet funcțională a ZNC. Ultimul lucru pe care trebuie să-l facem este să-l îndreptăm pe clientul nostru IRC spre bodyguard.

conectarea la bouncer

voi folosi irssi pentru a vă conecta la bouncer. Iată pașii pe care I-am urmat pentru a-l face să funcționeze. Kilometrajul dvs. poate varia pe un alt client, cum ar fi HexChat sau mIRC, dar detaliile în sine ar trebui să rămână în mare parte aceleași.

lansați irssi specificând porecla de utilizat pentru a vă conecta la bouncer

$ irssi -n <username>

creați o nouă rețea numită freenodebnc și adăugați detaliile bouncer la ea. Deoarece mă conectez la serverul IRC Freenode prin SSL, folosesc portul pe care îl expune pentru conexiuni sigure, 6697 și trec steagul -ssl. username/freenode este numele de utilizator și combinația de rețea pe care am creat-o pe panoul de configurare a utilizatorului ZNC. password este parola pe care o folosim pentru a ne autentifica cu ZNC, nu pe serverul IRC.

/network add freenodebnc/server add -net freenodebnc -auto -ssl <bouncer_ip> 6697 username/freenode:password

Rulați următoarele comenzi pentru a salva aceste modificări în fișierul de configurare irssi și conectați-vă la bouncer.

/save/connect freenodebnc

dacă ați încărcat modulul SASL (puteți verifica dacă este încărcat rulând /msg *status ListModules), trebuie să îl configurați în acest moment. Deci, odată ce sunteți conectat la bouncer, executați următoarele comenzi pe clientul dvs.

/query *saslmechanism external plainset <NickServName> <password>

unde NickServName este numele dvs. de utilizator înregistrat pe serverul IRC și password parola pe care o utilizați pentru a vă autentifica pe serverul menționat anterior.

acum reconectați-vă la rețeaua IRC cu modulul SASL reconfigurat.

/msg *status jump

poate dura câteva momente pentru ca bouncer să stabilească conexiunea (mai ales dacă vă conectați prin SSL și utilizați mecanisme de autentificare, cum ar fi SASL), dar după aceasta, veți obține o sesiune permanentă și sigură cu serverul IRC pe care sunteți liber să o întrerupeți și să o reluați oricând doriți. Chat fericit!