segmentering fel

även i 2018, när moderna, funktionsrika snabbmeddelandeprogram som Gitter eller extremt populära Slack, är så genomgripande som någonsin, IRC förblir den föredragna metoden för kommunikation för många utvecklare. Det är enkelt, stabilt, allestädes närvarande och viktigast av allt, helt decentraliserat. Det är dock ett gammalt protokoll, eftersom IRC har sparkat om sedan början av nittiotalet (IRC-protokollet RFC publicerades 1993). Som sådan, IRC kommer med sina begränsningar.

en av de mest anmärkningsvärda för mig är bristen på meddelandearkiv. Alla meddelanden som skickas från och tas emot av en IRC-klient lagras inte i din maskin, och du får inte heller en uppspelning av tidigare konversationer i en kanal du just gick med i. Varje gång du loggar in i ett IRC-chattrum får du en ren skiffer. Detta är obekvämt, eftersom IRC ofta används som en kommunikationskanal utanför bandet. Du går med i en kanal, lämnar en fråga och väntar sedan några timmar på att någon ska svara, eftersom människor inte tenderar att övervaka IRC så ofta som de skulle göra med andra snabbmeddelandeprogram.

lyckligtvis och kanske inte överraskande har detta varit ett löst problem under ganska lång tid nu. Den snabbaste och enklaste metoden är att upprätta en permanent anslutning till IRC-servern från en server under vår kontroll som är på 24/7 och upprätta en ssh/tmux-session med den varje gång vi vill kolla tillbaka på IRC. När vi är klara, ta bara bort sessionen med C-a d på GNU-skärmen eller C-b d på tmux. Detta löser problemet med att missa alla meddelanden som skickas i en kanal medan vi var borta men det handlar om allt du får. Om du letar efter en lösning som erbjuder mycket mer än detta är det dags att ta en titt på bouncers.

Vad är en bouncer server?

en bouncer-server är en server som vi använder som en proxy för att komma åt IRC. En dörrvakt tar våra IRC-detaljer och etablerar en anslutning till en IRC-server för vår räkning och till och med går med i en lista med fördefinierade kanaler.

vi ansluter sedan till denna bouncer-server från vår IRC-klient istället för till IRC-servern direkt, och från och med den här tiden kommer våra meddelanden att ”studsas på” av bouncer till målservern.

Bouncers erbjuder flera fördelar inklusive:

  • beständiga server-och kanalsessioner
  • logga kanalkonversationer till en textfil för arkiv
  • Bouncer användarautentisering
  • Automatisk IRC-serverautentisering via NickServ eller SASL
  • automatisera IRC-användarstatus (lämna & bortmeddelanden etc.)
  • och mycket mer!

ställa in bouncer-servern på AWS

vi ska ställa in vår egen Bouncer-server med ZNC, den mest populära bouncer-serverapplikationen, på en billig AWS EC2-instans.

starta en ny Ubuntu-Server 16.04 t2.nano EC2-instans med alla standardinställningar förutom följande:

  • användardata: installera bouncer software (ZNC), skapa en användare för processen och en katalog för att lagra sina filer och en systemd enhet fil för att starta den vid start.
#!/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

eftersom systemd – enhetsfilen har placerats direkt i /etc/systemd/system körs den automatiskt vid start. Det finns ingen anledning att aktivera det.

  • subnät: se till att instansen startas i ett offentligt delnät med en internetgateway ansluten, så att den är lättillgänglig från Internet.
  • EBS-volym: ditt ZNC-lösenord (Bouncer), IRC-serverlösenord och IRC-konversationsloggar lagras i klartextfiler så jag rekommenderar starkt att du krypterar volymen.
  • skapa en ny säkerhetsgrupp för att bifoga den så att följande portar är öppna:
    • SSH: så vi kan konfigurera instansen
    • TCP-port 7078 (någon oreserverad port kommer att göra, faktiskt): ZNC listening port
  • Ställ in sin” namn ” – tagg till något meningsfullt, om du vill

generera nu en ny elastisk IP-adress och koppla den till instansen.

installera ZNC

SSH i din nyskapade EC2-instans och kör ZNC första gången installationsprocessen, som kommer att be oss att ställa in en lyssningsport för bouncer och skapa ett administratörskonto. Välj alternativen enligt nedan.

$ 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

detta kommer att generera en konfigurationsfil som kommer att lagras i hemkatalogen för användaren vi ssh ’ d in som (ubuntu om du använder standard Amazon-förutsatt Ubuntu Server AMI). Låt oss flytta de nyskapade konfigurationsfilerna från den här katalogen till /opt/znc och ge znc användarägarrättigheter till den.

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

nu kan du starta ZNC

$ sudo systemctl start znc

se till att ZNC har startat framgångsrikt

$ 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

konfigurera ZNC

det första konfigurationssteget är klart. Nu måste vi lägga till användaren som vi kommer att logga in som och ett IRC-nätverk för att associera till den användaren.

för att tillämpa de återstående inställningarna på bouncer kommer vi att ansluta till dess webbkonfiguration frontend, tillgänglig på porten vi konfigurerade den för att lyssna på (i mitt fall port 7078). Så i din webbläsare anger du följande URL: https://<bouncer_ip_address>:7078. Om du får ett ”missing HTTPS certificate” – fel eller liknande kan du säkert ignorera detta och instruera din webbläsare att fortsätta. Logga nu in som administratörsanvändare du skapade tidigare med det lösenord du angav.

ZNC web frontend

när du loggar in kan du klicka på menyalternativet ”Globala inställningar” på höger sida för att titta på den övergripande konfigurationen av bouncer.

ZNC installerar en samling moduler (Delade objekt) i /usr/lib/znc som du kan ladda eller lossa medan demonen körs. Om du bläddrar ner till botten ser du en lista över de globala modulerna som påverkar bouncerens funktion, som du kan aktivera/inaktivera genom att växla kryssrutorna i kolumnen ”Namn”. I mitt fall har jag” log ” aktiverat eftersom jag vill att min bouncer ska lagra i en textfil alla meddelanden som skickas i kanalerna jag är medlem i.

ZNC globala moduler

klicka på ”Hantera användare” på den högra menyn för att få fram användarkonfigurationspanelen. Klicka nu på” Lägg till ” för att lägga till en ny användare och fyll i detaljerna: användarnamn, lösenord (notera detta lösenord kommer endast att användas för att autentisera dig själv med ZNC, det kommer inte att användas med IRC-servern), IRC-detaljer och en lista över moduler som du kanske vill ladda för den här användaren specifikt.

ZNC-användaruppgifter

klicka sedan på ”Spara och fortsätt” längst ner så att vi kan lägga till ett IRC-nätverk för den här användaren.

lägga till ett nätverk för en användare

fyll i detaljerna för IRC-nätverket den här användaren kommer att associeras med och eventuellt aktivera alla moduler som du vill ladda automatiskt när du ansluter till det här nätverket. En sådan modul kan vara sasl om du vill autentisera med den här metoden med IRC-servern. Jag kommer att aktivera den här modulen på det här nätverket.

i textrutan ”servrar för detta IRC-nätverk” anger du informationen för den IRC-server du vill ansluta till i formatet

<server> <port> <irc_password>

Lägg till ett plustecken i porten för att beteckna en SSL-anslutning. <irc_password> är lösenordet som du använde för att registrera dig på IRC-servern via kommandot /NickServ, som är helt separat från lösenordet som du ställde in för att autentisera till bouncer själv ovan.

för att till exempel ansluta till freenode IRC-nätverket via SSL med ett tidigare registrerat konto, skulle innehållet i denna textruta vara

irc.freenode.net +6697 myNickServPassword123

annars kan det helt enkelt vara

irc.freenode.net 6667

konfigurera IRC-nätverket

du kommer att märka att ditt IRC-lösenord lagras i klartext på servern. Det är därför jag rekommenderade under VPS-installationsstegen för att kryptera din EBS-volym och naturligtvis ha mycket snäv kontroll över vem som kan komma åt din bouncer-server. Låsning av VPS-säkerhetsgruppen för att endast tillåta inkommande anslutningar från en mycket liten delmängd av IPs rekommenderas.

klicka på ”Spara och fortsätt” igen. Du kan nu valfritt lägga till en lista över kanaler som du vill att bouncer ska logga in på, men det kommer också ihåg de du går med när du ansluter till den.

vi har nu en AWS VPS (Virtual Private Server) värd en fullt fungerande installation av ZNC. Det sista du ska göra är att peka vår IRC-klient på bouncer.

anslutning till bouncer

jag kommer att använda irssi för att ansluta till bouncer. Här är stegen jag följde för att få det att fungera. Din körsträcka kan variera på en annan klient som HexChat eller mIRC men detaljerna själva bör förbli mestadels samma.

starta irssi som anger smeknamnet som ska användas för att ansluta till bouncer

$ irssi -n <username>

skapa ett nytt nätverk som heter freenodebnc och Lägg till bouncer-detaljerna i det. Eftersom jag ansluter till Freenode IRC-servern via SSL använder jag porten som den exponerar för säkra anslutningar, 6697 och passerar -ssl flaggan in. username/freenode är användarnamnet och nätverkskombinationen som vi skapade på ZNC user config-panelen. password är lösenordet vi använder för att autentisera med ZNC, inte till IRC-servern.

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

kör följande kommandon för att spara dessa ändringar i irssi-konfigurationsfilen och anslut till bouncer.

/save/connect freenodebnc

om du laddade SASL-modulen (du kan kontrollera om den laddas genom att köra /msg *status ListModules) måste du konfigurera den just nu. Så, när du är ansluten till bouncer, kör följande kommandon på din IRC-klient.

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

där NickServName är ditt registrerade användarnamn med IRC-servern och password lösenordet du använder för att autentisera till ovannämnda server.

Anslut nu till IRC-nätverket med den omkonfigurerade SASL-modulen.

/msg *status jump

det kan ta några ögonblick för bouncer att upprätta anslutningen (speciellt om du ansluter via SSL och använder autentiseringsmekanismer som SASL) men efter det kommer du att få en permanent, säker session med IRC-servern som du är fri att pausa och återuppta när du vill. Glad chatta!