segmentatie fout

zelfs in 2018, wanneer moderne, feature rijke instant messaging toepassingen zoals Gitter of de extreem populaire Slack, zijn zo alomtegenwoordig als altijd, IRC blijft de voorkeursmethode van communicatie voor veel ontwikkelaars. Het is eenvoudig, stabiel, alomtegenwoordig en vooral volledig gedecentraliseerd. Het is echter een oud protocol, aangezien IRC al sinds het begin van de jaren negentig (het IRC-protocol RFC werd gepubliceerd in 1993) rondloopt. Als zodanig, IRC komt met zijn beperkingen.

een van de meest opvallende voor mij is het gebrek aan berichtarchivering. Alle berichten die worden verzonden en ontvangen door een IRC-client worden niet opgeslagen op je computer, noch krijg je een herhaling van eerdere gesprekken in een kanaal waar je net bij bent aangesloten. Elke keer als je inlogt in een IRC chatroom, krijg je een schone lei. Dit is lastig, aangezien IRC vaak wordt gebruikt als een buiten-band kanaal van communicatie. Je sluit je aan bij een kanaal, laat een vraag achter en wacht dan een paar uur op iemand om te antwoorden, omdat mensen niet de neiging hebben om IRC zo vaak te controleren als ze zouden doen met andere instant messaging applicaties.

gelukkig en misschien niet verrassend is dit probleem al geruime tijd opgelost. De snelste en eenvoudigste methode is om een permanente verbinding tot stand te brengen met de IRC server vanaf een server onder onze controle die 24/7 aan staat en om er een SSH/tmux sessie mee op te zetten elke keer dat we terug willen kijken op IRC. Als we klaar zijn, maak je de sessie los met C-a d op het GNU scherm of C-b d op tmux. Dit lost het probleem van het missen van alle berichten verzonden in een kanaal terwijl we weg waren, maar dat is ongeveer alles wat je krijgt. Als u op zoek bent naar een oplossing die veel meer dan dit bieden, is het tijd om een kijkje te nemen op uitsmijters.

Wat is een bouncer-server?

een bouncer-server is een server die we gebruiken als proxy om toegang te krijgen tot IRC. Een bouncer neemt onze IRC-gegevens en maakt namens ons een verbinding met een IRC-server en voegt zich zelfs bij een lijst met vooraf gedefinieerde kanalen.

we maken dan verbinding met deze bouncer-server vanaf onze IRC-client in plaats van rechtstreeks met de IRC-server, en vanaf dit punt zullen onze berichten door de bouncer naar de doelserver worden “gestuit”.

Bouncers bieden verschillende voordelen, waaronder:

  • permanente server-en kanaalsessies
  • kanaalgesprekken loggen naar een tekstbestand voor archivering
  • uitsmijter-gebruikersauthenticatie
  • automatische IRC-serverauthenticatie via NickServ of SASL
  • Automatiseer IRC-gebruikersstatussen (laat & afwezigheidsberichten, enz.)
  • en nog veel meer!

de bouncer-server instellen op AWS

we gaan onze eigen Bouncer-server instellen met behulp van ZNC, de meest populaire bouncer-servertoepassing, op een goedkoop AWS EC2-exemplaar.

Start een nieuwe Ubuntu-Server 16.04 t2.nano EC2-instantie met alle standaardinstellingen behalve de volgende:

  • gebruikersgegevens: installeer bouncer-software (ZNC), Creëer een gebruiker voor het proces en een map voor het om zijn bestanden en een systemd-eenheidsbestand op te slaan om het bij het opstarten te starten.
#!/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

omdat het systemd unit bestand direct in /etc/systemd/system is geplaatst, zal het automatisch worden uitgevoerd bij het opstarten. Het is niet nodig om het in te schakelen.

  • Subnet: zorg ervoor dat de instantie wordt gelanceerd in een openbaar subnet met een Internet Gateway aangesloten, zodat het gemakkelijk toegankelijk is vanaf het Internet.
  • EBS-volume: uw ZNC-wachtwoord (Bouncer), IRC-serverwachtwoord en IRC-conversatielogs worden opgeslagen in platte tekstbestanden, dus ik raad u ten zeerste aan het volume te versleutelen.
  • Maak een nieuwe beveiligingsgroep aan zodat de volgende poorten open zijn:
    • SSH: dus we kunnen de instantie
    • TCP-poort 7078 configureren (elke niet-gereserveerde poort is eigenlijk voldoende): ZNC luisterpoort
  • Stel de “Name” tag in op iets betekenisvols, als u wilt

genereer nu een nieuw elastisch IP adres en koppel het aan de instantie.

ZNC

SSH installeren in uw nieuw aangemaakte EC2-instantie en start het ZNC-installatieproces voor de eerste keer, dat ons zal vragen om een luisterpoort voor de bouncer in te stellen en een admin-account aan te maken. Selecteer de opties zoals hieronder.

$ 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

dit zal een configuratiebestand genereren dat zal worden opgeslagen in de home directory voor de gebruiker die we ssh ‘ D in als (ubuntu als u de standaard Ami van de Ubuntu-server van Ami gebruikt). Laten we de nieuw aangemaakte configuratiebestanden van deze map verplaatsen naar /opt/znc en de znc gebruikerseigenaarsrechten geven.

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

nu kunt u ZNC starten

$ sudo systemctl start znc

zorg ervoor dat ZNC succesvol is gestart

$ 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

configureren ZNC

de eerste configuratiefase is voltooid. Nu moeten we de gebruiker toevoegen waarmee we inloggen en een IRC-netwerk om aan die gebruiker te koppelen.

om de resterende instellingen toe te passen op de bouncer, zullen we verbinding maken met de webconfiguratie frontend, beschikbaar op de poort waarop we het hebben geconfigureerd om op te luisteren (in mijn geval, poort 7078). Voer in uw browser de volgende URL in: https://<bouncer_ip_address>:7078. Als u een “missing https certificate” fout of iets dergelijks krijgt, kunt u dit veilig negeren en uw browser instrueren om door te gaan. Log nu in als de beheerder gebruiker die u eerder hebt gemaakt, met behulp van het wachtwoord dat u hebt ingevoerd.

ZNC web frontend

zodra u zich aanmeldt, kunt u klikken op het menu “globale instellingen” aan de rechterkant om de algemene configuratie van de bouncer te bekijken.

ZNC installeert een verzameling modules (gedeelde objecten) in /usr/lib/znc die u kunt laden of ontladen terwijl de daemon draait. Als u naar beneden scrolt, ziet u een lijst met globale modules die van invloed zijn op de werking van de bouncer, die u kunt in – /uitschakelen door de selectievakjes in de kolom “naam” in te schakelen. In mijn geval heb ik “log” ingeschakeld omdat Ik wil dat mijn bouncer alle berichten die zijn verzonden in de kanalen waarvan ik lid ben, in een tekstbestand opslaat.

ZNC globale Modules

klik op” Gebruikers beheren ” in het rechtermenu om het paneel Gebruikersconfiguratie te openen. Klik nu op ” Add ” om een nieuwe gebruiker toe te voegen en vul de details in: Gebruikersnaam, Wachtwoord (let op dit wachtwoord zal alleen worden gebruikt om jezelf te authenticeren met ZNC, het zal niet worden gebruikt met de IRC server), IRC details en een lijst van modules die u wilt laden voor deze gebruiker specifiek.

ZNC gebruikersgegevens

klik vervolgens op “Opslaan en doorgaan” onderaan zodat we een IRC-netwerk voor deze gebruiker kunnen toevoegen.

een netwerk toevoegen aan een gebruiker

vul de details in voor het IRC-netwerk waaraan deze gebruiker zal worden gekoppeld en schakel eventueel modules in die u automatisch wilt laden wanneer u verbinding maakt met dit netwerk. Een dergelijke module zou sasl kunnen zijn als u zich met deze methode wilt aanmelden bij de IRC-server. Ik zal deze module op dit netwerk inschakelen.

in het tekstvak” Servers van dit IRC-netwerk ” geeft u de informatie in van de IRC-server waarmee u verbinding wilt maken in het formaat

<server> <port> <irc_password>

voeg een plusteken toe aan de poort om een SSL-verbinding aan te duiden. <irc_password> is het wachtwoord dat u hebt gebruikt om zich bij de IRC-server te registreren via het /NickServ – commando, dat volledig gescheiden is van het wachtwoord dat u hebt ingesteld om u aan te melden bij de bouncer zelf hierboven.

bijvoorbeeld, om verbinding te maken met het Freenode IRC-netwerk via SSL met een eerder geregistreerd account, zou de inhoud van dit tekstvak

irc.freenode.net +6697 myNickServPassword123

anders zou het gewoon

irc.freenode.net 6667

Als u het IRC-netwerk

configureert, ziet u dat uw IRC-wachtwoord in platte tekst op de server is opgeslagen. Dit is de reden waarom ik aanbevolen tijdens de VPS setup stappen om uw EBS volume te versleutelen en natuurlijk, hebben zeer strakke controle over wie toegang heeft tot uw bouncer server. Het wordt aanbevolen de VPS-beveiligingsgroep te vergrendelen om alleen binnenkomende verbindingen toe te staan vanuit een zeer kleine subset IP ‘ s.

klik opnieuw op” Opslaan en doorgaan”. U kunt nu optioneel een lijst toevoegen van kanalen waarop u wilt dat de bouncer u inlogt, maar het zal ook degenen onthouden die u bij uzelf aansluit wanneer u verbinding maakt.

we hebben nu een AWS VPS (Virtual Private Server) die een volledig functionele installatie van ZNC host. Het laatste wat je moet doen is onze IRC client naar de bouncer wijzen.

verbinden met de bouncer

ik ga irssi gebruiken om verbinding te maken met de bouncer. Hier zijn de stappen die ik volgde om het werkend te krijgen. Uw kilometerstand kan variëren op een andere client zoals HexChat of mIRC, maar de details zelf moeten grotendeels hetzelfde blijven.

start irssi met het opgeven van de schermnaam om verbinding te maken met de bouncer

$ irssi -n <username>

Maak een nieuw netwerk aan met de naam freenodebnc en voeg de uitsmijterdetails toe. Aangezien ik verbinding maak met de Freenode IRC server via SSL, gebruik ik de poort die het blootlegt voor beveiligde verbindingen, 6697 en geef ik de -ssl vlag in. username/freenode is de gebruikersnaam en netwerkcombinatie die we hebben gemaakt op het ZNC user config panel. password is het wachtwoord dat we gebruiken om te authenticeren met ZNC, niet met de IRC-server.

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

Voer de volgende commando ‘ s uit om deze wijzigingen op te slaan in het irssi configuratiebestand en verbinding te maken met de bouncer.

/save/connect freenodebnc

als je de SASL module geladen hebt (je kunt controleren of het geladen is door /msg *status ListModules te draaien), moet je het op dit punt configureren. Dus, als je eenmaal verbonden bent met de bouncer, voer je de volgende commando ‘ s uit op je IRC client.

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

waarbij NickServName uw geregistreerde gebruikersnaam is bij de IRC-server en password het wachtwoord dat u gebruikt om u aan te melden bij de bovengenoemde server.

Maak nu opnieuw verbinding met het IRC-netwerk met de opnieuw geconfigureerde SASL-module.

/msg *status jump

het kan even duren voordat de bouncer de verbinding tot stand heeft gebracht (vooral als je verbinding maakt via SSL en authenticatiemechanismen zoals SASL gebruikt), maar hierna krijg je een permanente, veilige sessie met de IRC-server die je vrij kunt pauzeren en hervatten wanneer je maar wilt. Veel plezier met kletsen!