Posts Tagged ‘linux’

VirtualBox e Fedora 18

Friday, June 21st, 2013

La scorsa settimana ho installato, per provarla, sul mio pc muletto Fedora 18. Poi avevo però necessità di testare anche altri software e allora ho pensato di installare VirtualBox, il famoso software di virtualizzanone open source sponsorizzato da Oracle. Peccato però che non è direttamente installabile dai repository ufficiali di Fedora 18. Per evitare di aggiungere repository ho preferito scaricarmi direttamente il pacchetto di VirtualBox per Fedora 18 e procedere all’installazione.

A prima vista sembrava che tutto fosse filato liscio, ho lanciato VirtualBox, creato la macchina virtuale, ma al tentativo di avviarla si è bloccato tutto generando questo errore:

VirtualBox error Kernel Driver not installed(rc=-1908)

Provato a disintallare e reinstallare. Niente da fare. Non ne voleva sapere di funzionare. Allora cercando un poco sul forum del Fedora Project ho trovato la soluzione. Mancavano dei “pezzi” e allora da terminale con un semplice:

yum install dkms binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel

e poi dopo un reboot, sempre da terminale:

sudo /etc/init.d/vboxdrv setup

Dopo eseguite VirtualBox e all’avviamento della macchina virtuale tutto deve funzionare perfettamente.

Prove di linux firewall – parte quarta

Monday, April 8th, 2013

Ultima puntata, almeno per ora, su come impostare un firewall sulla nostra distribuzione linux. Dopo aver preso confidenza nelle precedenti puntate con il comando Iptables per creare un piccolo firewall a protezione della nostra distribuzione, ecco come unire insieme il tutto in uno script eseguibile che si avvia automaticamente all’accensione del pc. Editiamo pertanto lo script che io ho chiamato iptables-firewall.sh con il seguente comando:

# nano /etc/iptables-firewall.sh

Iniziamo a scrivere lo script:

#!/bin/bash
# VARIABILE PER IPTABLES #
IPT=”/sbin/iptables

# ANNULLO EVENTUALI REGOLE E CATENE PRECEDENTI #
$IPT -F
$IPT -X

# NUOVA POLICY TRAFFICO #
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

# ABILITO TRAFFICO LOOPBACK #
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# IMPOSTO REGOLE PER PACCHETTI ICMP DI PING #
$IPT -A INPUT -p icmp –icmp-type echo-reply -m state –state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p icmp –icmp-type echo-request -m limit –limit 5/s -m state –state NEW -j ACCEPT
$IPT -A INPUT -p icmp –icmp-type destination-unreachable -m state –state NEW -j ACCEPT
$IPT -A INPUT -p icmp –icmp-type time-exceeded -m state –state NEW -j ACCEPT
$IPT -A INPUT -p icmp –icmp-type timestamp-request -m state –state NEW -j ACCEPT
$IPT -A INPUT -p icmp –icmp-type timestamp-reply -m state –state ESTABLISHED,RELATED -j ACCEPT

# BLOCCO CONNESSIONI SENZA SYN E PROTEZIONE ATTACCHI DoS #
$IPT -N syn-flood
$IPT -A INPUT -i eth0 -p tcp –syn -j syn-flood
$IPT -A syn-flood -m limit –limit 1/s –limit-burst 4 -j RETURN
$IPT -A syn-flood -j DROP
$IPT -A INPUT -p tcp ! –syn -m state –state NEW -j DROP

# CONSENTO TRAFFICO DA CONNESSIONI GIA’ STABILITE #
$IPT -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# CONSENTO CONNESSIONI SSH SULLA PORTA 2222 #
$IPT -A INPUT -p tcp –dport 2222 -m state –state NEW -j ACCEPT

# AGGIUNGERE QUI TUTTE LE CONNESSIONI SULLE PORTE IN INGRESSO DA ABILITARE #

# FINE #

Questo script deve essere eseguibile e inoltre modificabile/editabile solo dall’utente root, cioè l’amministratore del pc in ambiente linux. E’ necessario pertanto dopo averlo salvato nella directory “/etc” cambiarne le proprietà con i seguenti comandi:

# chmod 700 /etc/iptables-firewall.sh

# chown root:root /etc/iptables-firewall.sh

Per fare in modo che ogni volta che si accende il pc, queste regole di firewall vengano caricate è necessario aggiungere un comando di caricamento al file di configurazione dell’interfaccia di rete pubblica. Editiamo pertanto il file con il comando:

#nano /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.0.111
netmask 255.255.255.0
gateway 192.168.0.1
dns-search somedomain.org
dns-nameservers 195.238.2.21 195.238.2.22
broadcast 192.168.0.0
pre-up /etc/iptables-firewall.sh

Aggiungiamo la riga evidenziata in grassetto, salviamo e riavviamo il pc. Le regole di Iptables saranno caricate e il firewall funzionante.

 

Prove di linux firewall – parte terza

Tuesday, March 19th, 2013

Dopo la prima e la seconda parte su come attivare un firewall sulla nostra distribuzione linux debian, ecco una terza parte dove si tratta l’argomento dei già citati attacchi DoS (denial of service) cioè quegli attacchi che non mirano ad impadronirsi di un server, semplicemente lo sommergono di richieste per fare in modo che esaurisca le risorse e quindi automaticamente si metta fuori servizio da solo.

Già nella seconda parte, sull’abilitazione del traffico icmp, erano state prese misure contro questo tipo di attacchi, adesso con una serie di comandi specifici di iptables andiamo proprio a monitorare se il server sta ricevendo “eccessive e sospette richieste” di connessione.

IPTABLES -N syn-flood
IPTABLES -A INPUT -i eth0 -p tcp –syn -j syn-flood
IPTABLES -A syn-flood -m limit –limit 1/s –limit-burst 4 -j RETURN
IPTABLES -A syn-flood -j DROP
IPTABLES -A INPUT -p tcp ! –syn -m state –state NEW -j DROP

Questi strani comandi, a prima vista incomprensibili, servono proprio a controllare che il server non stia ricevendo troppe richieste di connessioni (e quindi sia oggetto di attacco DoS). Esiste, nel protocollo tcp, un flag che si chiama appunto SYN e serve per indicare che l’host che ha inviato il pacchetto intende stabilire una nuova connessione. Controllando i pacchetti che arrivano sull’interfaccia di rete (eth0) verifico se hanno il SYN settato, se lo hanno li “immagazzino in una nuova catena” diversa da quelle di input, output, forward. Su questa nuova catena verifico che il flusso dati in arrivo non superi un certo limite (terzo comando iptables) nel qual caso lo scarto.Per sicurezza viene anche scartato tutto il traffico tcp in ingresso, sulle nuove connessioni, che non presenta il flag SYN settato (pacchetti tcp malformati).

Bene e anche questa è fatta. Ora non resta altro da fare che trasformare tutti questi bei comandi che abbiamo visto in queste 3 puntate, in uno script che si avvia quando si accende il server così che sempre il nostro firewall sia attivo.

Alla prossima puntata.

Prove di linux firewall – parte seconda

Saturday, March 9th, 2013

Secondo appuntamento di studio con la creazione di un firewall linux. Nel primo post abbiamo visto una soluzione (funzionante ma incompleta) su come implementare un firewall a protezione per esempio di un server Debian.

C’è però un piccolo problema con quella soluzione: tutto il traffico di controllo icmp verso il server è scartato (drop) perché non è stata creata nessuna regola che permetta questo tipo di traffico in ingresso. Per esempio se volessimo controllare che il server è attivo con il comando Ping non funzionerebbe perché il firewall del server scarterebbe i pacchetti in quanto ping funziona con il protocollo icmp.

Ecco allora la necessità di inserire nuove regole di filtraggio nella catena di INPUT che permettano il traffico icmp:

IPTABLES -A INPUT -p icmp –icmp-type echo-reply -m state –state ESTABLISHED,RELATED -j ACCEPT
IPTABLES -A INPUT -p icmp –icmp-type echo-request -m limit –limit 5/s -m state –state NEW -j ACCEPT
IPTABLES -A INPUT -p icmp –icmp-type destination-unreachable -m state –state NEW -j ACCEPT
IPTABLES -A INPUT -p icmp –icmp-type time-exceeded -m state –state NEW -j ACCEPT
IPTABLES -A INPUT -p icmp –icmp-type timestamp-request -m state –state NEW -j ACCEPT
IPTABLES -A INPUT -p icmp –icmp-type timestamp-reply -m state –state ESTABLISHED,RELATED -j ACCEPT

Con queste regole permettiamo il traffico icmp nuovo (NEW) o che è già stabilito o ha relazioni (ESTABLISHED, RELATED) con traffico già richiesto. Una nota importante è il secondo comando con limit 5/s che stabilisce appunto un limite di 5 pacchetti/secondo oltre il quale il traffico viene scartato. Questa regola ci protegge in parte da attacchi di tipo DoS (Denial of Service) su Ping.

Ecco che il nostro firewall inizia a prendere forma. Mancano ancora delle regole per proteggere adeguatamente il nostro server da attacchi DoS e sicurezze varie.

Insomma: ci sarà sicuramente una terza puntata.

 

Prove di linux firewall

Thursday, March 7th, 2013

Approfittando della forzata pausa lavorativa mi sono messo a studiare il comando Iptables in Linux. Con questo comando (e ovviamente con quello che ci sta dietro) è possibile implementare un vero e proprio firewall usando una qualunque distribuzione linux.

Il lavoro per fare un firewall usando linux è ovviamente molto complesso, tantè che esistono delle vere e proprie distribuzioni, per esempio IPcop o Smoothwall o Zeroshell che facilitano non poco il compito di creazione delle regole di filtraggio, fornendo una interfaccia grafica molto più amichevole della semplice riga di comando.

Un semplice esercizio per iniziare a capire come funziona iptables potrebbe essere quello di virtualizzare un server linux (io uso per esempio la versione 6.0 di Debian virtualizzata con VirtualBox) abilitando la connessione ssh per il controllo remoto e poi iniziare a “giocare” con iptables.

Di default Linux Debian permette tutto il traffico in entrata, in uscita e in transito o come identifica iptables: INPUT, OUTPUT, FORWARD.

1) Come chiudersi fuori dal server:

IPTABLES -P INPUT DROP

IPTABLES -P OUTPUT DROP

IPTABLES -P FORWARD DROP

con questi semplici 3 comandi il server è isolato: non trasmette e non riceve traffico ovvero tutto il traffico che arriva alla scheda di rete è scartato (drop) indipendentemente che arrivi dall’esterno o dal server stesso.

2) Abilitare alemeno il traffico localhost e in uscita dal server:

IPTABLES -P INPUT DROP

IPTABLES -P FORWARD DROP

IPTABLES -P OUTPUT ACCEPT

IPTABLES -A INPUT -i lo -j ACCEPT

IPTABLES -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

come si vede leggermente più complesso. Vediamo nel dettaglio: catena di INPUT e di FORWARD droppo (scarto) tutto il traffico significa che tutto il traffico in arrivo al server o che deve transitare dal server è scartato. Catena di OUTPUT accetpt (accetto) significa che tutto il traffico che dal server esce viene accettato cioè inviato sulla rete. Ci sono però le ultime due regole che in pratica non fanno altro che aggiungere delle eccezioni al traffico in ingresso (INPUT) vediamo cosa sono: con iptables è possibile capire da quale interfaccia arriva il traffico di rete e decidere di conseguenza cosa farne. Ecco spiegato cosa significa il quarto comando: se il traffico in ingresso arriva dalla scheda di rete locale (localhost) allora esso viene accettato. Non solo iptables permette di distinguere il traffico in base all’interfaccia di rete, ma anche in base allo “stato”. Ecco spiegato il quinto comando: se il traffico di rete in ingresso arriva perchè sono stati io server a richiederlo (established) o ha qualche relazione (related) con del traffico già precedentemente accettato allora lo accetto.

In soldoni: tutto il traffico in uscita è permesso, tutto il traffico in transito è negato, tutto il traffico in ingresso è negato tranne quello generato come localhost o che io server ho richiesto.

3) abilitare il traffico localhost, in uscita e il servizio ssh in ingresso

IPTABLES -P INPUT DROP

IPTABLES -P FORWARD DROP

IPTABLES -P OUTPUT ACCEPT

IPTABLES -A INPUT -i lo -j ACCEPT

IPTABLES -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

IPTABLES -A INPUT -p tcp –dport 22 -m state –state NEW -j ACCEPT

tutto identico all’esempio 2 con l’aggiunta dell’ultimo comando. Iptables filtra il traffico anche in base alle porte ip, quindi la spiegazione dell’ultima riga è: se il traffico in ingresso al server è tcp sulla porta 22 (la porta standard del servizio ssh) ed è una nuova connessione (new) allora lo accetti.

Con 6 semplici (semplici?) comandi abbiamo costruito un  firewall (non perfetto manca ancora molto ma è già buono)  a protezione del nostro server che scarta tutte le connessioni in ingresso tranne quelle ssh (sulla porta 22), ma può navigare su internet per esempio per scaricarsi gli aggiornamenti.

Ma questo non può che essere un inizio di studio. La strada è ancora lunga.

Un computer in miniatura

Thursday, February 28th, 2013

raspberrypi

Un computer delle dimensioni di una carta di credito. Fantascenza? Utopia? Cose da agenti segreti? Invece no, tutto reale e per giunta realizzato da una fondazione senza scopo di lucro. Ecco servito il Raspberry PI un mini-pc certamente didattico, ma che permette di fare anche mille altre cose molto serie, come scrive Andrea Beggi.

Potenza del mondo linux.

 

Links 2-6-11

Thursday, June 2nd, 2011

http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio_con_Debian_Lenny

 

Il futuro è open

Saturday, March 5th, 2011

Wired Italia ha intervistato Mark Shuttleworth, fondatore e promotore di Ubuntu, in vista dell’uscita della nuova relase 11.04 che sarà caratterizzata dal nuovo desktop Unity.

Il futuro è linux sostiene il nostro Mark, e io aggiungo nel software open source e nella collaborazione.

Metti Ubuntu nel pc

Monday, August 23rd, 2010

Oggi pomeriggio ho installato Ubuntu 10.04 sul notebook Samsung che ho utilizzato per testare il Windows 7. Tutto è filato liscio come l’olio grazie a Grub e il pc era pronto e funzionante in meno di 1 ora!!

Potenza di Linux!!

Italiani in gamba

Wednesday, April 21st, 2010

Leggo oggi che Stefano Zacchiroli è il nuovo Project Leader del progetto Debian, la famosa distribuzione Gnu Linux.

Ecco, un paese normale avrebbe dato risalto a questa notizia e questa nomina sarebbe stata come uno dei tanti riconoscimenti dati a una persona di talento già conosciuta ed apprezzata. Mi sa  tanto invece che molti hanno da poco scoperto l’esistenza di Stefano Zacchiroli perchè in questo nostro paese il merito è un optional.