Archive for September, 2008

Collaborare con Ubuntu (Bug testing)


2008
09.20

Molte persone (o almeno io) si sono chieste come si può dare una mano ad Ubuntu. In effetti sul sito sono presenti indicazioni chiare, ma si rischia di perdersi nelle burocrazie interne della comunità.

Scrivo ciò che ho fatto e cosa bisognerebbe fare per cominciare a collaborare con questa distribuzione Linux sudafricana:

  1. Come prima cosa bisogna avere una chiave OpenPGP con cui firmare patch, documenti ed altro. Generatela con il vostro programma preferito (il mio è GnuPG).
  2. Iscrivetevi a Launchpad, la piattaforma collaborativa che Ubuntu utilizza per la gestione dei bug, delle traduzioni ecc…
    Curiosando su Launchpad potrete trovare anche altri progetti interessanti con cui collaborare, se ne avrete il tempo e la voglia.
  3. Seguite le indicazioni dopo la registrazione per la convalida della vostra chiave pubblica OpenPGP. Vi verrà inviato un messaggio cifrato con la suddetta chiave contente un link che vi permetterà di associare al vostro nome (login) la vostra chiave.
  4. Sempre tramite Launchpad iscrivetevi all’Ubuntu Bugsquad. La registrazione è libera e non moderata, e potrete trovare molte risorse sui bug, nonché cominciare a conoscere la struttura della comunità.
    Altre informazioni su BugSquad sono presenti su https://wiki.ubuntu.com/BugSquad
  5. Iscrivetevi alle seguenti mailing list per essere sempre aggiornati (non scegliete una password importante perché vi verrà ricordata in chiaro di tanto in tanto):
    ubuntu-bugsquad@lists.ubuntu.com (iscrizione da https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugsquad)
    ubuntu-news@lists.ubuntu.com (iscrizione da https://lists.ubuntu.com/mailman/listinfo/ubuntu-news)
    ubuntu-it@lists.ubuntu.com (iscrizione da https://lists.ubuntu.com/mailman/listinfo/ubuntu-it)
    Non hanno un gran traffico, ma se non vi piacciono molti messaggi nella casella di posta scegliete il digest giornaliero.
  6. Scaricate un client IRC se non l’avete già (su Linux mi trovo bene con XChat), scegliete un nickname, andate su irc.freenode.net e se il vostro nick non è stato usato registratelo con:
    /msg nickserv register <your-password> <your-email>
    vi arriverà una email sulla casella di posta che avete fornito con un comando da lanciare in irc, fatelo, dopodiché lanciate anche
    /msg nickserv set hidemail on
    per evitare che gli altri possano vedere la vostra email.
    Per fare in modo che il vostro nick venga riconosciuto, quando vi connettete al server (molti client lo fanno in automatico) lanciate:
    /msg nickserv identify <your-password>
    A qusto punto mettete in autojoin i seguenti canali (se non sapete come si fa leggete la documentazione del vostro client):
    #ubuntu-bugs-announce (non si parla, vengono pubblicati in tempo reale i bug)
    #ubuntu-bugs
    #ubuntu
    #ubuntu-it
  7. Andate sul vostro profilo su launchpad e cliccate in alto a sinistra sul link “Change details“, poi in basso sul link “Update IRC nicknames” quindi riempite il primo capo con il server (irc.freenode.net) e il secondo con il nick che avete registrato. Salvate e il vostro nick verrà associato all’account su freenode in modo che le persone possano contattarvi anche in chat.

Ora che avete compiuto tutti i passi fondamentali non vi resta che mettervi alla ricerca di bug non ancora presi in gestione e occuparvene, se siete in grado. Molte pagine sul wiki ufficiale descrivono le procedure per fare questo, io vi incollo un po’ di link da mettere nei preferiti per avere sempre a portata di mano gli strumenti:

https://bugs.launchpad.net/ubuntu
Questo è il pannello di controllo dei bug di Ubuntu; se impostate sul menu a tendina “newest first” vedrete quelli da processare, che poi sono gli stessi che si vedono in tempo reale sul chan #ubuntu-bugs-announce.
Altrimenti se conoscete bene un pacchetto potete cercarne qualcuno non ancora elaborato (cioè in stato “new” e importance “undecided“) inserendo il nome del programma nella textbox e cliccando sul bottone “Search”.

https://wiki.ubuntu.com/Bugs/HowToTriage
Questa è la pagina del wiki fondamentale per chi si avvicina per la prima volta al mondo del BugTrialing in Ubuntu. Vengono descritte le procedure da seguire, come cercare e gestire i bug duplicati e tutto quello che vi può servire. Va letta e riletta parecchie volte, e magari anche stampata e tenuta accanto alla tastiera.

https://wiki.ubuntu.com/Bugs/Responses
Dato che bisogna sempre usare cortesia con chi ci comunica un bug, è nata questa pagina con molte riposte standard da usare nelle varie situazioni.

https://wiki.ubuntu.com/BugSquad/KnowledgeBase
Tutto quello che vi può servire è qui.

Una volta che avrete acquistato dimestichezza con il sistema e che avrete contribuito per un tempo sufficientemente lungo ai progetti che la comunità Ubuntu porta avanti (non solo bug, ma anche traduzioni, ad esempio) potete pensare di proporre la vostra iscrizione come Members ufficiali di Ubuntu. La procedura è abbastanza lunga, quindi riporto il link che la descrive nel dettaglio:
https://wiki.ubuntu.com/Membership?action=show&redirect=NewMemberHowto
Ovviamente la cosa migliore è diventare membro prima del proprio gruppo locale, nel nostro caso di quello italiano, che è raggiungibile a questi indirizzi:
http://wiki.ubuntu-it.org/Comunita/Membership

https://launchpad.net/~ubuntu-it-members

The Girl from Ipanema


2008
09.08

Tall and tan, and young and lovely
The girl from Ipanema goes walking
And when she passes
Each one she passes goes, aah
When she walks, she’s like a samba
That swings so cool and sways so gentle
That when she passes
Each one she passes goes, aah
Oh, but I watch her so sadly
How can I tell her I love her
Yeah, I would give my heart gladly
But each day when she walks to the sea
She looks straight ahead not at me
Tall and tan, and young and lovely
The girl from Ipanema goes walking
And when she passes
Each one she passes goes, aah
Tall and tan, and young and lovely
The girl from Ipanema goes walking
And when she passes
Each one she passes goes, aah
When she walks, she’s like a samba
That swings so cool and sways so gentle
That when she passes
Each one she passes goes, aah
Oh, but I watch her so sadly
How can I tell her I love her
Yeah, I would give my heart gladly
But each day when she walks to the sea
She looks straight ahead not at me
When she walks, she’s like a samba
That swings so cool and sways so gentle
That when she passes
I smile but she doesn’t see
She doesn’t see
She doesn’t see
She doesn’t see
She doesn’t see

Un server a casa


2008
09.07

Gli ultimi post hanno illustrato come installare alcuni servizi sul proprio pc casalingo per connettersi ad esso in qualsiasi momento in modo sicuro. Il bello di una VPN però è poter accedere a dei servizi della rete interna (e quindi anche dello stesso server) solo dopo l’autenticazione e la connessione; questi servizi possono essere installati e configurati a mano oppure inclusi in una piattaforma semplice da gestire, soprattutto per neofiti.

Devo dire che non ho mai installato prodotti del genere, preferendo un’attenta customizzazione manuale, ma ne ho trovati alcuni che sembrano interessanti e meritano attenzione da parte di chi volesse costruire un proprio piccolo server casalingo (o anche per una piccola impresa) senza spendere nulla e con pochissimo sforzo.

Offrirò ora una piccola panoramica con le caratteristiche più importanit e i punti di forza che a mio parere rendono ogni piattaforma unica; i casi scelti saranno eBox, Webmin e Amahi. Se qualcuno che legge questo post ne conosce altri è pregato di segnalarmelo e provvederò ad aggiornare il tutto per offrire una panoramica più ampia.

eBox è una personalizzazione di Debian che può essere scaricata dal sito o installata come paccchetto aggiuntivo dai repository launchpad.
Nata come progetto per semplificare la creazione di un router Linux-based, si è presto evoluta fino a includere caratteristiche interessanti per una piccola azienda con piccoli bisogni.
In particolare eBox presenta le seguenti funzionalità:

  • Backup, restore e update facili sia per i moduli di eBox che per i componenti del sistema. Secondo quanto detto dal sito, viene tenuta in grande considerazione la sicurezza della piattaforma con sistemi di alerting automatizzati e analisi dei log.
  • Gestione degli utenti semplificata, sia attraverso OpenLDAP che attraverso Samba per fornire anche alle workstation Windows un primary domain controller e garantire un’autenticazione facilitata e omogenea.
  • Condivisione files e stampanti attraverso Samba e CUPS.
  • Possibilità di funzionare come mail server e mail relay, possibilità di funzionare come server Jabber per la messaggistica instantanea multiprotocollo.
  • Funzionalità di filtraggio e proxy caching (Squid) e firewall (IPTables), gestibili comodamente tramite interfaccia grafica come “oggetti ad alto livello”
  • Inclusione di altre funzionalità per l’uso come switch, DHCP server, webserver (Apache) o DNS (Bind). Possibilità di utilizzare la Certification Authority integrata per l’uso di un server OpenVPN.

In conclusione sembra una buona piattaforma, semplice da installare (qui le istruzioni) e facilmente espandibile.

Logo Webmin

Webmin non è un vero e proprio server casalingo, ma un’interfaccia web avanzata per la gestione di servizi su un qualsiasi server. Disprezzato da alcuni puristi per la eccessiva semplificazione che introduce nel lavoro del sysadm, ha sofferto in passato di alcune vulnerabilità anche gravi che permettevano ad un estraneo di ottenere l’accesso come amministratore all’interfaccia e quindi al server stesso.

Nonostante questo, credo che sia giusto menzionarlo negli strumenti “casalinghi” e comunque si può sempre chiudere dietro una VPN, no?
Le features sul sito sono molte,ed essendo un progetto attivo da lungo tempo, molti moduli di terze parti sono installabili per estenderne le funzionalità.

Il modo migliore per informarsi sulle caratteristiche di Webmin è andare su questa pagina e cominciare a leggere, mentre con quest’altra si può avere una panoramica sui moduli standard.

Dato che oltretutto uno screenshot vale più di mille parole, ecco qui la pagina delle immagini dell’interfaccia di Webmin, cosicchè vi possiate fare un’idea di quello che andrete ad installare (forse); è anche presente una demo per “provare con mano”.

Amahi è un pacchetto, disponibile per Fedora e presto anche per Ubuntu, specificatamente pensato per la costruzione di un home server. L’integrazione con molti strumenti di ricerca e calendari lo rendono particolarmente adatto a fornire una base evoluta per desktop ricchi di funzionalità.

Un sito ben fatto spiega le principali caratteristiche del pacchetto:

  • Gestione semplice della rete e dei servizi ad essa correlati (DNS, Web Server, NAS, ecc…).
  • OpenVPN preconfigurata per un accesso remoto semplice.
  • Monitoring degli HD con support per il RAID.
  • File sharing tramite NFS e Samba.
  • Wiki interno privato (a che serve in una casa…?).
  • Possibilità di essere usato come unità per i backup dei PC di tutta la rete.
  • Integrazione con il calendario di Vista, iCal, Microsoft Outlook e possibiltà di vedere tutti i calendari in una comoda interfaccia web.
  • Possibilità di ricerca tramite vari plugin (compresi quelli per firefox), anche in remoto.
  • Struttura modulare che supporta plugin scritti in Ruby on Rails, PHP, Python, Perl, Flash…
  • Integrazione con il servizio DynDNS (è richiesta registrazione al sito) per accedere al proprio server casalingo senza dover ogni volta andare a cercare l’indirizzo IP.

In definitiva un buon prodotto, semplice e con molte funzionalità orientate soprattutto ad un uso familiare più che aziendale.

Port Knocking, OpenVPN e IPTables


2008
09.07

Nel precedente articolo ho spiegato come attivare un servizio OpenVPN sul proprio “server” casalingo e connettersi in questo modo alle proprie risorse in qualunque parte del mondo, lasciando aperta solo una porta.

Dato che la paranoia non è mai troppa, vediamo di complicare ancora di più le cose ad un eventuale attaccante che volesse tentare di sfruttare magari un bug ancora non corretto della nostra VPN. Il modo migliore di impedire ad una persona di connettersi ad un servizio è nasconderlo, ovviamente dopo l’uso di un meccanismo di autenticazione forte. Chiudendo la porta 1194 impediremo ad ogni utente che non conosca una particolare “combinazione” di rilevare qualsiasi cosa da un port-scanning. Ovviamente faremo in modo che la porta si apra solo per noi e per il tempo strettamente necessario alla nostra connessione.

La prima cosa da fare è installare tramite aptitude un demone per il port-knocking. Per Ubuntu c’è knockd che è molto leggero, affidabile e stabile. Installiamolo con:

sudo aptitude install knockd

A questo punto il servizio sarà avviato. Se siamo dietro ad un router consiglio di mettere l’ip interno del nostro server in DMZ, in modo tale da non rivelare nulla neanche attraverso il NAT del router ad un eventuale attaccante.

La prima cosa da fare con knockd è editare il file /etc/default/knockd per modificare la linea

START_KNOCKD=0

in

START_KNOCKD=1

In questo modo abbiamo abilitato a tutti gli effetti il demone knockd e siamo pronti a configurarlo per far si che apra le porte che vogliamo ad una specifica bussata. La configurazione è piuttosto semplice: se volessimo infatti far aprire la porta 1194, non dobbiamo far altro che decidere una sequenza di porte a cui “bussare” e specificarle nel file /etc/knockd.conf

Se ad esempio decidessimo che per aprire la nostra porta per l’OpenVPN la bussata debba essere 25, 2000, 4723, il file di configurazione assomiglierà a qualcosa del genere:

[options]
logfile = /var/log/knockd.log
[openOPENVPN]
sequence    = 25, 2000, 4723
seq_timeout = 5
command     = /sbin/iptables -A INPUT -s %IP% -p udp --dport 1194 -j ACCEPT
tcpflags    = syn
[closeOPENVPN]
sequence    = 4723,2000,25
seq_timeout = 5
command     = /sbin/iptables -D INPUT -s %IP% -p udp --dport 1194 -j ACCEPT
tcpflags    = syn

E’ abbastanza intuitivo: la prima sezione specifica il file di log che il demone utilizzerà (ricordatelo, perchè ci servirà quando proveremo la nostra bussata), la seconda sezione si pone in ascolto sulle porte 25,2000,4723 per attivare un comando se e solo se vengono mandati dei pacchetti syn nell’ordine che abbiamo specificato. Il comando è una semplice istruzione iptables che non fa altro che aprire la porta 1194 per l’IP che ha fatto al bussata (%IP% è una variabile propria di knockd).

A questo punto la porta è aperta e non verrà richiusa finchè non eseguiremo la bussata descritta nella sezione [closeOPENVPN]. In questo caso ho inserito come bussata le stesse porte dell’apertura ma in ordine inverso, ma si possono inserire anche altre porte o mettere altri ordini. E’ tutto delegato alla vostra fantasia e alla vostra memoria. Ovviamente viene eseguito il comando

command     = /sbin/iptables -D INPUT -s %IP% -p udp --dport 1194 -j ACCEPT

che non fa altro che eliminare la regola di iptables (-D) che avevamo descritto.

Ora che il file è stato configurato, manca solo una cosa: creare le regole base per iptables.
E’ assolutamente importante che i seguenti comandi siano dati in locale e non da una sessione SSH, ad esempio. Il motivo lo sa bene chi si è messo a giocherellare con iptables da remoto e si è trovato improvvisamente tagliato fuori. Se proprio non potete farlo, mettete tutti i comandi in uno script e lanciatelo.

Quello che ci interessa fare è impedire l’accesso a tutti i pacchetti in entrata e in forwarding, mentre lasceremo “senza regole” quelli in uscita. Ovviamente dovremo stare accorti che ogni servizio abbia comunque le sue porte aperte, quindi se avete aMule, server Web o altri tipi di server che richiedono una connessione indipendentemente dalla VPN, aggiungete le regole di conseguenza.

I comandi da lanciare (in locale) saranno allora:

sudo iptables -P INPUT DROP (fa "cadere" tutte le connessioni in entrata)
sudo iptables -P INPUT DROP (elimina tutti i forwarding (mica siamo un router...))
sudo iptables -A INPUT -i lo -j ACCEPT (accetta le connessioni dall'interfaccia di loopback)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT (fondamentale, accetta le connessioni già stabilite)
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT (accetta il ping)
sudo iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT (ovviamente deve accettare connessioni dalla rete interna, a meno che non vogliate diversamente...)

Dato che tutte queste belle istruzioni andranno perse al prossimo riavvio, salviamo il tutto con un:

iptables-save > /etc/nostreregoleiptables

e modifichiamo il file /etc/network/interfaces aggiungendo subito prima della riga

auto eth0

questo comando:

pre-up iptables-restore < /etc/nostreregoleiptables

Ovviamente se la vostra interfaccia di rete è eth0, ma l’ho dato per scontato fin’ora. In realtà si potrebbe inserire lo stesso comando in /etc/rc.local, ma francamente lo trovo “più pulito” nel file di configurazione delle interfacce di rete.

A questo punto, se tutto è andato per il verso giusto, eseguiamo un port scanning sulla nostra macchina (se non sapete come si fa leggetetvi qualche manuale su nmap) e dovremmo avere tutte le porte chiuse (sempre che l’abbiate fatto sull’indirizzo esterno della macchina.

Facciamo partire il server knockd con il solito

sudo /etc/knockd/start

e rifacendo la scansione notermo che nulla è cambiato. Tuttavia se da un altro computer eseguiamo il comando (anche qui dobbiamo avere un client knock installato):

knock 'indirizzoesternodellamacchina' 25 2000 4723

e proviamo a connetterci con il nostro bravo client OpenVPN…magia! Ci connetteremo senza problemi!
La cosa non finisce qui: quando avremo finito con la nostra connessione potremo richiudere la porta dietro le nostre spalle dando la bussata 4723 2000 25, e nessun’altro si connetterà alla nostra amata porta 1194.
Questo però potrebbe anche essere uno svantaggio per noi: se ci scordiamo la porta aperta, virtualmente lasciamo una via d’entrata (anche se protetta da chiave) a chiunque. La soluzione, come al solito, è nella pagina di manuale di knockd: è possibile infatti impostare un’”apertura temporizzata”, che dopo x secondi si richiude ma ormai noi saremo dentro e la regola

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

farà si che la nostra connessione rimanga attiva. La sintassi del nuovo file /etc/knockd.conf sarà allora:

[options]
 logfile = /var/log/knockd.log
[opencloseOPENVPN]
 sequence      = 25 2000 4723
 seq_timeout   = 15
 tcpflags      = syn
 start_command = /sbin/iptables -A INPUT -s %IP% -p udp --dport 1194 -j ACCEPT
 cmd_timeout   = 10
 stop_command  = /sbin/iptables -D INPUT -s %IP% -p udp --dport 1194 -j ACCEPT

In questo modo dopo 10 secondi la porta si chiuderà da se senza lasciare traccia di ciò che è successo, e senza doverci seccare con una sequenza in più da ricordare.

Per verificare, apriamo una shell in locale sul nostro server e digitiamo

sudo tail -f /var/log/knockd.log

che durante una bussata “regolare” ci mostrerà un output di questo tipo:

[2008-09-06 18:09] starting up, listening on eth0
[2008-09-07 00:23] 87.20.xxx.xxx: opencloseOPENVPN: Stage 1
[2008-09-07 00:23] 87.20.xxx.xxx: opencloseOPENVPN: Stage 2
[2008-09-07 00:23] 87.20.xxx.xxx: opencloseOPENVPN: Stage 3
[2008-09-07 00:23] 87.20.xxx.xxx: opencloseOPENVPN: OPEN SESAME
[2008-09-07 00:23] opencloseOPENVPN: running command: /sbin/iptables -A INPUT -s 87.20.xxx.xxx -p udp --dport 1194 -j ACCEPT

Il che vuol dire che l’indirizzo 87.20.xxx.xxx ha eseguito una bussata corretta e attivato la porta 1194 come volevamo.

Consiglio di aggiungere un’altra sezione con un’altra sequenza che non faccia altro che aprire la porta 22, così in caso di emergenza disporrete di un accesso sicuro per compiere tutte le vostre operazioni.

Un’altra paranoia potrebbe essere quella di un attaccante che sniffi il traffico diretto alla vostra macchina e scopra le porte che usate per la bussata. Anche in questo caso ci viene in aiuto la pagina di manuale di knockd che indica come costruire un file di sequenze che solo voi conoscerete. Ad ogni bussata la sequenza relativa viene cancellata e non potrà essere più riusata per accedere; questo ovviamente comporta che abbiate sempre con voi una copia del suddetto file e che di tanto in tanto lo rinnoviate, oppure trovate un algoritmo per generare sequenze a partire da fenomeni conoscibili a priori, come ad esempio le estrazioni del lotto…:-)

Sono sicuro di aver commesso parecchi errori durante la stesura di questo post, quindi se qualcuno decidesse di povare a seguire queste indicazioni, è pregato di dirmi se qualcosa non funzionasse, e io provvederò ad aiutarlo e a correggere per i futuri lettori.