English abstract: if your operating system reports you some blocked updates, you’ll need to type “sudo apt-get dist-upgrade” (no quotes) in a Terminal to solve the problem. Probably, after that, you’ll have to reboot twice.

Può accadere che Kubuntu segnali degli aggiornamenti bloccati. Si tratta di un aggiornamento relativo al kernel, che per motivi che ancora non riesco a spiegarmi, non vengono effettuati.

Per risolvere il problema, basta dare in un terminale questi due comandi

sudo apt-get update

e

sudo apt-get dist-upgrade

Al termine dell’operazione il sistema vi chiederà di effettuare un riavvio del computer, riavvio che sarà meglio effettuare due volte (nel mio caso, il pc teneva la ventola accesa come se il computer fosse lì lì per surriscaldarsi, nonostante fosse freddo – una cosa del genere mi era già accaduta al passaggio a Jaunty).

Aggiornamento: WhiteWizard mi segnala che è necessario compiere anche queste operazioni per avviare il firewall all’avvio del sistema. Io non ricordo di aver fatto operazioni del genere, ma può esservi d’aiuto nel caso non sia così.

I sistemi GNU/Linux sono storicamente più sicuri di altri sistemi operativi, primo fra tutti Microsoft Windows, tanto che in molti utenti non sentono di avere necessità di dotarsi di firewall e antivirus. Se però vogliamo aggiungere un ulteriore livello di sicurezza, possiamo creare un firewall utilizzando un agile script che creerà una barriera impenetrabile a qualunque intruso. Potrà sembrare strano, ma per crearlo ci basta un semplice file di testo. Apriamo dunque Gedit o Kate o un qualunque altro blocco note. Se arrivate fino in fondo, ci sarà un regalo per voi.

Innanzitutto inseriamo la riga:

#!/bin/bash

Serve a segnalare che quel file è un programmino, dopodiché inseriamo:

IPTABLES=”/sbin/iptables”
IFLO=”lo”
IFEXT=”ppp0″

In questo modo definiamo alcune variabili che lo script utilizzerà. Modificando queste righe, infatti, potremo modificare la configurazione del nostro firewall con una sola sostituzione e non molte di più. La riga più interessante (e che dobbiamo modificare subito) è la riga IFEXT=”ppp0″. Al posto di ppp0 dobbiamo inserire l’interfaccia che stiamo utilizzando. Lo troviamo dando nel terminale il comando

ifconfig

Le più comuni sono le seguenti:

  • ppp0: per connessioni ADSL e via pccard e cellulare;
  • eth0 o eth1: per connessioni Ethernet (via cavo o wireless);
  • wlan0: per connessioni wireless.

Quindi inseriamo:

case “$1” in
start)

echo -n “Sto attivando il firewall: “

Niente di particolare, lo vedremo poi. Adesso inseriamo:

modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_MARK
modprobe ipt_MASQUERADE
modprobe ipt_REDIRECT
modprobe ipt_REJECT
modprobe ipt_TOS
modprobe ipt_limit
modprobe ipt_mac
modprobe ipt_mark
modprobe ipt_multiport
modprobe ipt_state
modprobe ipt_tos
modprobe iptable_mangle

Queste righe caricano alcuni moduli del kernel necessari (il primo, in particolare, è proprio ip_tables). Continuiamo:

$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F -t mangle
$IPTABLES -X
$IPTABLES -X -t nat
$IPTABLES -X -t mangle

Questi comandi resettano le impostazioni. Adesso comincia il divertimento:

$IPTABLES -P INPUT   DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT  ACCEPT

Queste sono le prime regole vere e proprie del nostro firewall. La prima riga blocca il traffico in entrata, la seconda blocca il traffico in transito, la terza permette il traffico in uscita. Se provassimo a utilizzare un firewall siffatto, non potremmo utilizzare internet. Sicurezza estrema, insomma, ma non credo che serva a qualcuno. Creiamo quindi delle eccezioni:

$IPTABLES -A INPUT  -i $IFLO -j ACCEPT
$IPTABLES -A OUTPUT -o $IFLO -j ACCEPT

Queste righe abilitano il traffico interno (credo che nessuno abbia paura di ciò che facciamo noi stessi, sempre che sappiamo cosa stiamo facendo).

$IPTABLES -A INPUT -p  tcp -i $IFEXT -m state -s 0/0 –state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p icmp -i $IFEXT -m state -s 0/0 –state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p  udp -i $IFEXT -m state -s 0/0 –state ESTABLISHED,RELATED -j ACCEPT

Questa riga è un po’ più complicata: serve a stabilire che i pacchetti di risposta a una nostra richiesta possono entrare nel nostro pc. In altre parole, permettiamo l’entrata solo ai pacchetti che abbiamo invitato. Ci serve, in particolare, per utilizzare internet.

Adesso dobbiamo decidere quali programmi lasciar passare. Farò un esempio generale, poi sarete voi a decidere. Per utilizzare un programma che si immette sulla rete dobbiamo aprirgli una porta, in modo che possa entrare e uscire. Ogni porta ha un numero che la identifica, ed è quella che ci servirà per impostare il firewall. Nel nostro esempio, utilizzerò la porta 1234:

$IPTABLES -A INPUT -p tcp –dport 1234 -j ACCEPT
$IPTABLES -A INPUT -p udp –dport 1234 -j ACCEPT

Queste righe permettono il traffico attraverso la porta 1234 (una porta a caso). Se uno dei programmi che utilizzate passa per la porta 1234, questa è la stringa che dovete inserire. Se un altro programma utilizza un’altra porta non dovete far altro che inserire altre righe, facendo attenzione a sostituire 1234 con il numero della porta che vi serve. Una lista abbastanza completa delle porte utilizzate la trovate qui. Qualche esempio che mi è stato richiesto:

  • per MSN: 1863 (tcp);
  • per eMule: 4662 (tcp), 4672 (udp);
  • per SAMBA: 137 (udp), 138 (udp), 139 (tcp), 445 (tcp);
  • per ChatZilla (forse più in generale per IRC): 113, 6667 (entrambi tcp);

Notiamo che dobbiamo sostituire tcp e udp a seconda di quello che ci serve. Inseriamo quindi:

echo “ok”
;;

Serve semplicemente a dire che il caricamento del firewall è andato a buon fine (attenzione ai due punto e virgola, perché servono a dire allo script di fermarsi in quel punto – in altre parole, quando vedete ‘start’, molte righe più in alto, inizia un comando che termina ai due punto e virgola, e senza di essi lo script va avanti e rischia di sbagliare qualcosa). Continuiamo:

stop)

echo -n “Sto disattivando il firewall: ”

$IPTABLES -X -t mangle

$IPTABLES -P INPUT   ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT  ACCEPT

$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F -t mangle
$IPTABLES -X
$IPTABLES -X -t nat
echo “ok”
;;

Serve a disabilitare il firewall e abilitare tutto il traffico da qualunque parte.

status)
echo -n “Al momento sono in uso le seguenti regole: ”
$IPTABLES -L
;;

Mostra quali regole del firewall sono abilitate.

restart|reload)
$0 stop
$0 start
;;

Fa ripartire il firewall: utile quando mutiamo le impostazioni del firewall e vogliamo che siano attive.

*)
echo “Per usare questo script, devi specificare un attributo: firewall {start|stop|restart|reload|status}” >&2
exit 1
;;

esac

exit 0

Serve a ricordarci che dobbiamo dare un attributo e chiude. Che vuol dire? Lo vedremo fra poco.

Salviamo il nostro file con il nome “firewall” nella cartella /etc/init.d/ , in modo che venga caricato all’avvio. Altrimenti possiamo lasciarlo da qualche altra parte e caricarlo manualmente dal terminale, nel seguente modo. Gli esempi seguenti assumeranno che il file sia in /etc/init.d/ .

Per attivare il firewall:

sudo /etc/init.d/firewall start

Per disattivare il firewall:

sudo /etc/init.d/firewall stop

Per disattivare e riattivare il firewall (utile se modifichiamo il firewall).

sudo /etc/init.d/firewall restart

Per vedere quali regole sono attive:

sudo /etc/init.d/firewall status

start, stop, restart (o reload, che è lo stesso) e status sono gli attributi di cui parlavo prima.

Potete provare il firewall e vedere se va tutto ok. Se qualcosa non dovesse funzionare, potete disattivarlo. Nel praticamente impossibile evento in cui il pc non dovesse avviarsi (chissà cosa ci avete messo in quello script!), non dovrete far altro che rimuovere il file: per farlo potete usare il comando

sudo rm /etc/init.d/firewall

oppure, se volete utilizzare l’interfaccia grafica, usando un cd live. Poi, magari, gentilmente, mi mandate il file del vostro firewall per vedere che cosa ci avete infilato dentro: adoro la mitologia.

Bene, se siete arrivati fin qui ho un regalo per voi: un file di testo pronto per l’uso. Non dovete fare altro che modificarlo secondo le vostre esigenze (e soprattutto secondo le istruzioni) e infilarlo nella cartella suddetta. Sembra niente, ma è un firewall molto potente. Ovviamente sono a disposizione per eventuali problemi (mi sento responsabile).

(A chi si stesse chiedendo: perché non hai inserito direttamente il file di esempio invece di spiegare tutto? Perché in questo modo sapete cosa state facendo quando modificate il vostro scriptino)

In passato avevo segnalato alcuni problemi relativi alla scheda ONDA N501HS, che il nostro amato sistema operativo non vedeva. Questo era dovuto a un problema del modulo ehci_hcd, responsabile della gestione della USB 2. Quindi, o si faceva a meno dell’USB 2 o si faceva a meno di internet.

Ebbene ho scoperto che questo problema è stato risolto nella versione 2.6.27 del kernel Linux. Se infatti inseriamo la scheda e diamo nel terminale il comando:

lsusb

Noteremo una riga che ci dice:

Bus 008 Device 002: ID 05c6:6613 Qualcomm, Inc.

Insomma, la vede correttamente. Ma non basta a farla funzionare. Bisogna dare un comando per caricare un altro modulo, ovvero:

sudo modprobe usbserial vendor=0x05c6 product=0x6613 maxSize=8192

(Avrete notato che 05c6 e 6613 sono le cifre che vediamo nell’output del comando lsusb, quindi se sono diverse sostituite nel secondo comando quelle corrette). L’ultimo parametro riguarda il buffer: in questo modo si dovrebbe togliere quella fastidiosa limitazione che ferma la velocità della scheda a 64 Kbps (io sono arrivato oltre i 300 senza alcun problema, a differenza di qualche tempo fa).

Adesso se settiamo PPP come ho mostrato nell’articolo precedente, siamo finalmente in grado di connetterci.

Al momento non so ancora come rendere definitiva la modifica, ma il fatto che funzioni già mi soddisfa ampiamente. Non potete immaginare negli ultimi mesi come ho vissuto con un pc che impiegava 15 minuti per avviarsi. 😐