Computer: cretino ad alta velocità in dotazione, spesso, a cretini molto lenti.

— Stefano Benni

ArchLinux Small Business Server (32) - Instant Messaging (2)

http://www.stenoweb.it/files/blog/archlogo.png Proseguiamo con la "noiosa" parte che prevede la configurazione del servizi accessori a jabberd. A vedere qui questa lista di file di configurazione sembra tutto facile, ma vi assicuro che non ci sono arrivato in cinque minuti... ma quanto è buona la pappa pronta ? :-D
Non mi dilungo sui principi di funzionamento di Jabber, invito i più curiosi a leggere la documentazione ufficiale non di facile reperibilità, confesso che ci ho messo un po' a trovarla. Ma magari sono un po' svampito io.
Bando alle ciance, iniziamo.

Premessa

I file di configurazione di jabberd 2 sono in formato xml e ne esiste uno per ogni "componente" (o "pluging", o "servizio" non sò mai come chiamarli) che usiamo. Jabberd 2 ne fornisce cinque di base a cui ne abbiamo aggiunto noi uno manualmente (muc, Multi User Conference). Dei "componenti" di base a noi ne serviranno solo tre a cui aggiunegeremo, appunto, in nostro muc.

Jabberd 2 supporta diversi "formati" o "schemi" per autenticazione e per la memorizzazione, in questo caso io ho scelto PAM per l'autenticazione (in questo modo la base utente/password è sempre la stessa che già uso, ma se non vi và potreste usare MySQL ad esempio) e MySQL come "scatolone" dove salvare i dati delle sessioni di chat e dei "roster" degli utenti (che sono il variopinto modo in cui jabber chiama la lista dei contatti).

DNS e nomi del server

Dobbiamo innanzitutto decidere il nome del nostro server IM e fare in modo che questo sia risolvibile dal DNS. Nel mio caso ho due nomi :

  • im.mede.it -> server IM chat
  • rooms.mede.it -> server IM muc per le conferenze multiutente

Se avete seguito la mia guida DNS/DHCP basta inserirli nel file /etc/dnshost:

192.168.20.1 archi im rooms

in questo modo il DNS risolverà i nostri nomi host.

MySQL

Iniziamo con il creare le tabelle e il database. Non ci dobbiamo inventare nulla, Jabberd già mi fornisce un comodo dump che mi crea al volo tutto il necessario. MySQL dovrebbe essere già installato, altrimenti fatelo ora come già spiegato nel capitolo LAMP.
Colleghiamoci al database server :

sudo mysql -uroot -p

eseguiamo il "dump" fornito con Jabberd che crea il database jabberd2 e le tabelle necessarie:
\. /usr/share/jabberd/db-setup.mysql

Aggiungiamo le tabelle di muc (non necessario, ma consigliato). Il percorso varia in funzione di dove avete scaricato/compilato muc:
\. /admin/mu-conference_0.7/mu-conference.sql

Creaimo un utente jabber per accedere al database (sostituire "secret" con la propria password, il comando su una unica riga):
GRANT ALL PRIVILEGES ON jabberd2.* TO 'jabber'@'localhost' IDENTIFIED BY 'secret' WITH GRANT OPTION;

PAM

Configuriamo PAM fornendo il file delle "regole". In questo caso stò usando openLDAP per l'autenticazione:

sudo nano /etc/pam.d/jabberd

e "riempiamolo" con questo :
#%PAM-1.0
auth sufficient pam_ldap.so
auth required pam_unix.so nullok
account sufficient pam_ldap.so
account required pam_unix.so

Nota : se non usate openLDAP come schema di autenticazione si può usare un duplicato del file /etc/pam.d/other. Basta copiarlo : cp /etc/pam.d/other /etc/pam.d/jabberd.
In questo modo verranno usati gli utenti locali Linux di /etc/passwd.

openSSL

Un po' di sicurezza non guasta, anzi, usando PAM per l'autenticazione è quasi un obbligo crittografare il colloquio specie se vogliamo fare in modo che utenti "mobili" esterni di colleghino al server. Ecco come fare.

Ricordo che la chiave generata è "self-signed", cioè autofirmata e dunque non rilasciata da un ente apposito autorizzato. Questo produce un warning nel client (almeno in PSI che ho usato io) che andremo a disattivare. Sopportabile, ma i più smaliziati potrebbero voler acquistare una chiave vera. Libertà di decisione.

Generazione chiave

Per generare la chiave spostiamoci in /etc/jabberd e digitiamo il comando (su una unica riga):

openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem

Ci viene richiesta una passphrase per la chiave privata ed in seguito le informazioni pubbliche riguardo il nostro pseudo "ente" certificatore. La cosa importante è inserire il Common Name che dovrebbe corrispondere al nostro dominio. Nel nostro esempio im.mede.it.

Ora rimuoviamo la passphrase dalla nostra chiave privata (digitando la passphrase di prima) :

openssl rsa -in privkey.pem -out privkey.pem

"combiniamo" chiave pubblica e privata in un singolo file ed eliminiamo la chiave privata che non ci serve più:
cat privkey.pem >> server.pem
rm privkey.pem

Bene, ora per finire diamo i giusti permessi alla chiave appena creata:
chown jabber:jabber /etc/jabberd/server.pem
chmod 640 /etc/jabberd/server.pem

Il nostro certificato è pronto.

La prossima volta ci prenderemo cura finalmente della configurazione di Jabberd. Nel frattempo potete approfondire leggendo come funziona la sua architettura. Molto interessante e istruttivo, ve lo consiglio.

A presto.