Segmentation Fault

Anche nel 2018, quando le moderne e ricche applicazioni di messaggistica istantanea come Gitter o l’estremamente popolare Slack, sono pervasive come sempre, IRC rimane il metodo di comunicazione preferito per molti sviluppatori. È semplice, stabile, onnipresente e, soprattutto, completamente decentralizzato. Si tratta di un vecchio protocollo però, come IRC è stato calci circa dai primi anni novanta (il protocollo IRC RFC è stato pubblicato nel 1993). Come tale, IRC viene con i suoi limiti.

Uno dei più notevoli per me è la mancanza di archivio dei messaggi. Tutti i messaggi inviati e ricevuti da un client IRC non vengono memorizzati nel computer, né si ottiene un replay delle conversazioni passate in un canale appena entrato. Ogni volta che si accede a una chat room IRC, si è dato una tabula rasa. Questo è scomodo, dato IRC è molto spesso usato come un canale di comunicazione fuori banda. Si entra in un canale, lasciare una domanda e poi attendere qualche ora per qualcuno a rispondere, come le persone non tendono a monitorare IRC con la stessa frequenza come farebbero con altre applicazioni di messaggistica istantanea.

Fortunatamente e forse non sorprendentemente, questo è stato un problema risolto per un bel po ‘ di tempo. Il metodo più rapido e semplice è quello di stabilire una connessione permanente al server IRC da un server sotto il nostro controllo che è su 24/7 e stabilire una sessione SSH/tmux con esso ogni volta che vogliamo controllare di nuovo su IRC. Quando abbiamo finito, basta staccare la sessione con C-a d sullo schermo GNU o C-b d su tmux. Questo risolve il problema di perdere tutti i messaggi inviati in un canale mentre eravamo via, ma questo è tutto ciò che ottieni. Se siete alla ricerca di una soluzione che offrono molto di più di questo, è il momento di dare un’occhiata a buttafuori.

Che cos’è un server bouncer?

Un server bouncer è un server che usiamo come proxy per accedere a IRC. Un buttafuori prenderà i nostri dettagli IRC e stabilirà una connessione a un server IRC per nostro conto e persino si unirà a un elenco di canali predefiniti.

Ci colleghiamo quindi a questo server bouncer dal nostro client IRC anziché direttamente al server IRC, e da questo punto in poi, i nostri messaggi verranno “rimbalzati” dal bouncer al server di destinazione.

Buttafuori offrono diversi vantaggi, tra cui:

  • Sessioni persistenti per server e canali
  • Registrazione delle conversazioni dei canali in un file di testo per l’archiviazione
  • Autenticazione utente Bouncer
  • Autenticazione automatica del server IRC tramite NickServ o SASL
  • Automatizza gli stati utente IRC (lascia messaggi &, ecc.)
  • E molto altro ancora!

Configurazione del server bouncer su AWS

Configureremo il nostro server Bouncer utilizzando ZNC, l’applicazione bouncer server più popolare, su un’istanza AWS EC2 economica.

Avvia una nuova istanza EC2 di Ubuntu Server 16.04 t2.nano con tutte le impostazioni predefinite ad eccezione di quanto segue:

  • Dati utente: installare bouncer software (ZNC), creare un utente per il processo e una directory per memorizzare i suoi file e un file di unità systemd per lanciarlo all’avvio.
#!/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

Poiché il file dell’unità systemd è stato inserito direttamente in /etc/systemd/system, verrà eseguito automaticamente all’avvio. Non c’è bisogno di abilitarlo.

  • Sottorete: assicurarsi che l’istanza venga avviata in una subnet pubblica con un gateway Internet collegato, in modo che sia facilmente accessibile da Internet.
  • EBS volume: la password ZNC (Bouncer), la password del server IRC e i registri delle conversazioni IRC verranno memorizzati in file di testo in chiaro, quindi ti consiglio vivamente di crittografare il volume.
  • Crea un nuovo gruppo di sicurezza da collegare ad esso in modo che le seguenti porte siano aperte:
    • SSH: così possiamo configurare l’istanza
    • Porta TCP 7078 (qualsiasi porta senza riserve lo farà, in realtà): Porta di ascolto ZNC
  • Impostare il tag” Nome ” su qualcosa di significativo, se si desidera

Ora generare un nuovo indirizzo IP elastico e associarlo all’istanza.

Installazione di ZNC

SSH nell’istanza EC2 appena creata ed eseguire il processo di installazione ZNC per la prima volta, che ci chiederà di impostare una porta di ascolto per il bouncer e di creare un account amministratore. Selezionare le opzioni come di seguito.

$ 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

Questo genererà un file di configurazione che verrà memorizzato nella directory home per l’utente che abbiamo ssh come (ubuntu se si utilizza l’AMI Ubuntu Server fornita da Amazon predefinita). Spostiamo i file di configurazione appena creati da questa directory a /opt/znc e diamo i diritti di proprietario dell’utente znc.

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

Ora puoi iniziare ZNC

$ sudo systemctl start znc

Assicurarsi che ZNC sia stato avviato con successo

$ 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

Configurazione ZNC

La prima fase di configurazione è completata. Ora dobbiamo aggiungere l’utente che registreremo come e una rete IRC da associare a quell’utente.

Per applicare le impostazioni rimanenti al bouncer, ci collegheremo al suo frontend di configurazione web, disponibile sulla porta che abbiamo configurato per ascoltare (nel mio caso, porta 7078). Quindi, nel tuo browser, inserisci il seguente URL: https://<bouncer_ip_address>:7078. Se ricevi un errore “certificato HTTPS mancante” o simile, puoi tranquillamente ignorarlo e istruire il tuo browser a continuare. Ora accedi come utente amministratore che hai creato prima, utilizzando la password che hai inserito.

ZNC web frontend

Una volta effettuato l’accesso, è possibile fare clic sulla voce di menu “Impostazioni globali” sul lato destro per dare un’occhiata alla configurazione complessiva del bouncer.

ZNC installa una raccolta di moduli (oggetti condivisi) in /usr/lib/znc che è possibile caricare o scaricare mentre il demone è in esecuzione. Se scorri verso il basso vedrai un elenco dei moduli globali che influenzano il funzionamento del bouncer, che puoi abilitare/disabilitare commutando le caselle di controllo nella colonna “Nome”. Nel mio caso, ho” log ” abilitato poiché voglio che il mio buttafuori memorizzi in un file di testo tutti i messaggi inviati nei canali di cui sono membro.

ZNC Global Modules

Fare clic su “Gestisci utenti” nel menu di destra per visualizzare il pannello di configurazione utente. Ora fai clic su “Aggiungi” per aggiungere un nuovo utente e inserisci i dettagli: nome utente, password (nota questa password verrà utilizzata solo per autenticarsi con ZNC, non verrà utilizzata con il server IRC), dettagli IRC e un elenco di moduli che potresti voler caricare specificamente per questo utente.

Dettagli utente ZNC

Quindi fare clic su “Salva e continua” in basso in modo da poter aggiungere una rete IRC per questo utente.

Aggiunta di una rete a un utente

Compilare i dettagli per la rete IRC a cui questo utente sarà associato e, facoltativamente, abilitare tutti i moduli che si desidera caricare automaticamente durante la connessione a questa rete. Uno di questi moduli potrebbe essere sasl se si desidera autenticarsi utilizzando questo metodo con il server IRC. Abiliterò questo modulo su questa rete.

Nella casella di testo “Server di questa rete IRC” si inseriscono le informazioni del server IRC a cui si desidera connettersi nel formato

<server> <port> <irc_password>

Aggiungere un segno più alla porta per indicare una connessione SSL. <irc_password> è la password che hai usato per registrarti al server IRC tramite il comando /NickServ, che è completamente separato dalla password che hai impostato per autenticare il bouncer stesso sopra.

Per esempio, per connettersi alla rete IRC Freenode via SSL che in precedenza aveva un account registrato, il contenuto di questa casella di testo sarebbe

irc.freenode.net +6697 myNickServPassword123

in caso Contrario, potrebbe essere semplicemente

irc.freenode.net 6667

Configurazione di una rete IRC

noterete che i vostri IRC password viene memorizzata in chiaro nel server. Questo è il motivo per cui ho consigliato durante i passaggi di installazione VPS per crittografare il volume EBS e, naturalmente, avere un controllo molto stretto su chi può accedere al server bouncer. Si consiglia di bloccare il gruppo di sicurezza VPS per consentire solo le connessioni in entrata da un sottoinsieme molto piccolo di IP.

Fare nuovamente clic su “Salva e continua”. Ora è possibile opzionalmente aggiungere un elenco di canali che si desidera che il buttafuori per accedere a voi, ma sarà anche ricordare quelli che si uniscono te stesso quando ci si connette ad esso.

Ora abbiamo un AWS VPS (Virtual Private Server) che ospita un’installazione completamente funzionale di ZNC. L’ultima cosa da fare è puntare il nostro cliente IRC al buttafuori.

Connessione al bouncer

Userò irssi per connettermi al bouncer. Ecco i passaggi che ho seguito per farlo funzionare. Il tuo chilometraggio può variare su un client diverso come HexChat o mIRC, ma i dettagli stessi dovrebbero rimanere per lo più gli stessi.

Avvia irssi specificando il nickname da utilizzare per connettersi al bouncer

$ irssi -n <username>

Creare una nuova rete chiamata freenodebnc e aggiungere i dettagli bouncer ad esso. Dal momento che mi sto connettendo al server IRC Freenode su SSL, sto usando la porta che espone per connessioni sicure, 6697 e passando il flag -ssl. username/freenode è il nome utente e la combinazione di rete che abbiamo creato nel pannello di configurazione utente ZNC. password è la password che usiamo per autenticarci con ZNC, non con il server IRC.

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

Eseguire i seguenti comandi per salvare queste modifiche al file di configurazione irssi e connettersi al bouncer.

/save/connect freenodebnc

Se hai caricato il modulo SASL (puoi verificare se è stato caricato eseguendo /msg *status ListModules), devi configurarlo a questo punto. Quindi, una volta che sei connesso al bouncer, esegui i seguenti comandi sul tuo client IRC.

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

Dove NickServName è il nome utente registrato con il server IRC e password la password utilizzata per l’autenticazione al server di cui sopra.

Ora riconnettersi alla rete IRC con il modulo SASL riconfigurato.

/msg *status jump

Potrebbero essere necessari alcuni momenti prima che il bouncer stabilisca la connessione (specialmente se ci si connette tramite SSL e si utilizzano meccanismi di autenticazione come SASL), ma dopo questo, si otterrà una sessione permanente e sicura con il server IRC che si è liberi di mettere in pausa e riprendere ogni volta che si desidera. Felice chiacchierando!