Archive for the ‘Hacks’ Category

A simple way to unroot your HTC Hero

Wednesday, June 16th, 2010

Let’s say you have a rooted HTC Hero because you were tired of waiting for HTC official updates, but now that an official Eclair update is going to be released you want it back to its factory defaults, otherwise the updating procedure won’t work.

The procedure to unroot and restore your HTC Hero actually is quite simple.
You just need to reflash the phone using the HTC utility from this page.

That page explains to launch the updater after HTC has been recognized by the HTC Sync utility.

It sounds simple but I got unlucky twice today: the first, as I launched the update utility, HTC Sync disconnected the phone. This happened all the time. The second time, on a different computer, the HTC Sync installer crashed.. there was no way to install it.

If it happens to you too, cheer yourself up! There is an other way to achieve your purpose.

adb shell reboot oem-78

This obscure command reboots the phone in RRU mode. Once the phone is ready you can launch the update utility without HTC Sync installed.

That’s it.

Qualcuno si è divertito…

Friday, October 2nd, 2009

Eh si`, proprio cosi`. Qualcuno si e` divertito a violare questo blog dove non viene mai nessuno. Mah… Contento lui…

Comunque, che cos’e` successo?
Il giorno 30 settembre 2009 il blog e` stato defacciato. Cosa significa? Che al posto della pagina principale del sito c’era questa bellissima pagina scritta in HTML 3.0

screen-capture

Bello eh? Capirete la mia sorpresa, il mio disgusto e il mio divertimento contemporanei. Mi sembrava che fosse passato di moda combinare questi scherzetti.

Purtroppo non so di preciso cosa abbiano fatto, ma so che

  • La home page e` stata sostituita con quella porcheria di sopra
  • La password di admin e` stata sostituita, secondo me a mano, direttamente dal database
  • L’indirizzo e-mail di admin e` stato storpiato, di modo che non potessi resettare la password

Tutte cose abbastanza fastidiose, se non avessi avuto accessi all’FTP e al database. Il fatto che non siano state cambiate queste password mi fa pensare che non sia stato violato alcun accesso, ma che piuttosto sia stato utilizzato qualche script che sfrutta una delle vulnerabilita` di wordpress o del tema che avevo prima.

Ragion per cui segnalo la cosa all’hosting, chiedendo di ispezionare i log, per capire almeno in modo in cui il lamer ha proceduto, e secondo, rimetto il mio vecchio tema (si` quello che ho fatto io), visto che piu` persone mi hanno detto che lo preferiscono a GoGreen :-) .

Due trucchetti su gmail per creare infiniti alias

Sunday, July 26th, 2009

Forse non tutti sanno che…

  • gmail non considera i punti contenuti nei propri indirizzi email. Se ad esempio possedete l’indirizzo montgomeryburns@gmail.com, vi verra` consegnata tranquillamente anche la posta diretta a montgomery.burns@gmail.com, ma anche a m.o.n.t.g.o.m.e.r.y.b.u.r.n.s@gmail.com.
    Insomma e` possibile inserire punti a piacimento in qualunque posizione dell’indirizzo, purche` prima della chiocciola.
  • inoltre gmail non considera nemmeno tutti i caratteri seguiti dal simbolo +. Tornando all’esempio di prima, potrete ricevere la posta all’indirizzo montgomeryburns+work@gmail.com, oppure montgomeryburns+home@gmail.com.

A cosa puo` servire tutto questo? Per discriminare ad un ulteriore livello i messaggi che vengono ricevuti. Ad esempio potete decidere di adibire montgomeryburns+mailinglists@gmail.com alla sottoscrizione di mailing list.

Poiche` nella vostra casella l’indirizzo di destinazione mostrato sara` esattamente uno di questi di sopra, comprensivo di punti extra e/o dei caratteri seguiti dal simbolo +, e` possibile creare dei filtri nella propria casella in grado di etichettare la posta proprio grazie all’indirizzo di destinazione.

Puo` essere utile?

Secondo me si`, un po` per arginare lo spam (almeno finche` i bot non diventano piu` intelligenti), e un po` perche` cosi` si ha una specie di sistema alternativo di etichette, che si puo` integrare o meno con quello che gia` conoscete.

Tango icon theme nelle dimensioni desiderate

Thursday, May 7th, 2009

Chi di voi non conosce The Tango Desktop Project? Per chi non lo sa si tratta di una serie di icone per rendere più gradevole l’interfaccia utente di software liberi e open source.

Oltre a questo ovviamente si possono utilizzare in presentazioni, pagine web eccetera purchè venga rispettata la licenza.

Il problema davanti al quale mi sono trovato è che dentro gli archivi distribuiti sono presente le immagini di dimensione 32×32 al massimo, mentre io le volevo 128×128. Perciò ho cercato di creare delle icone 128×128 a partire dalle scalabili SVG distribuite, senza perdere troppo tempo.

Ecco come ho fatto.

Per prima cosa scarichiamo l’archivio. Allo stato attuale questa e` l’ultima versionei. Ovviamente col tempo sarà necessario aggiornare queste istruzioni.

wget  http://tango.freedesktop.org/releases/tango-icon-theme-0.8.90.tar.gz

Quindi decomprimere con il solito tar…

tar xf tango-icon-theme-0.8.90.tar.gz

A questo punto è necessario il programma rsvg per effettuare la conversione. Per installarlo utilizzare il proprio gestore dei pacchetti, se la propria distribuzione ne possiede uno. Nel caso di ubuntu

sudo apt-get install librsvg-2-bin

A questo punto per convertire tutte le immagini si possono utilizzare questi comandi. È sufficiente copiare e incollare sul terminale una volta dentro le directory appena decompresse.

for i in `find ./scalable -name *.svg`
do
        DIR=`dirname $i`
        DIR=`basename $DIR`
        FILE=`basename $i .svg`
        mkdir -pv 128x128/$DIR
        rsvg -w 128 -h 128 $i 128x128/$DIR/$FILE.png
done

Recuperare la tabella delle partizioni

Thursday, May 7th, 2009

Quando? Perchè?

Questo è tratto da un mio vecchio post, che ho scritto dopo che l’installer di Windows 2000 mi ha cancellato la tabella delle partizioni soltanto perchè stato avviato.

Come avrete capito le righe che seguono spiegano in breve come recuperare i dati delle vostre partizioni, quando la tabella che ne delimita l’inizio e la fine è sparita. Comunque vediamo cosa serve per rimediare al disastro.

Risorse necessarie

  • Una distribuzione live di linux dotata di interfaccia grafica, ad esempio Ubuntu.
  • Una connessione a Internet (anche su un altro computer).
  • Partition-Rescue HOWTO.
  • gpart.
  • fdisk.
  • Una lieve infarinatura di blocchi, settori, partizioni.

Il Partition-Rescue HOWTO va letto molto attentamente perchè contiene la maggior parte delle informazioni che ci serve, elencando i vari casi che possono capitare. Non parleremo dei più triviali, ma solo del peggiore, che ovviamente è quello che è capitato a me: tabella delle partizioni completamente cancellata. Comunque con un po’ di pazienza e di fortuna possiamo recuperare tutti i dati senza far ricorso a servizi professionali.

La soluzione

Innanzitutto sangue freddo: i dati ci sono e stanno anche bene, solo che non abbiamo più modo di accedervi. È qui che entra in gioco gpart. Questo programmino infatti riesce a capire dove cominciano e finiscono le vostre partizioni, analizzando l’intero disco. Nel caso che le partizioni siano tutte primarie il compito di gpart è piuttosto semplice e in breve tempo individuerà correttamente tutte le partizioni. Quando invece ci sono partizioni logiche (il mio caso ovviamente) allora serve davvero un po’ di fortuna. In pratica se il programma con cui avete creato le partizioni è un buon programma ci sono buone probabilità che questo abbia inserito dei marcatori a inizio e fine delle vostre partizioni logiche. In caso contrario questo metodo non funziona.

Nota: questo è quanto ho letto nell’HOWTO e perciò non sono in grado di dire quali software siano buoni o cattivi nel creare le partizioni. Ho solo potuto sperimentare che laddove ho creato le partizioni con l’installer di Ubuntu sono riuscito a recuperare tutto, mentre su un hard disk esterno su cui la stessa operazione era stata fatta con Windows non sono riuscito.

Una volta che gpart avrà finito di analizzare il vostro disco vi mostrerà un output simile a questo.

Begin scan…
Possible partition(Linux ext2), size(1200Mb), offset(0Mb)
Possible partition(Windows NTFS), size(1200Mb), offset(1200Mb)
Possible partition(Linux ext2), size(1004Mb), offset(2402Mb)
Possible partition(Windows NTFS), size(1600Mb), offset(4102Mb)
End scan.
Checking partitions…
* Warning: partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX) ends beyond disk end .
Partition(Linux ext2 filesystem): primary
Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): primary
Partition(Linux ext2 filesystem): primary
Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): invalid primary
Ok.
Guessed primary partition table:
Primary partition(1)
type: 131(0×83)(Linux ext2 filesystem)
size: 1200mb #s(2457880) s(63-2457942)
chs: (0/1/1)-(152/254/61)d (0/1/1)-(152/254/61)r
Primary partition(2)
type: 007(0×07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
size: 1200mb #s(2457880) s(2457944-4915823)
chs: (152/254/63)-(305/253/60)d (152/254/63)-(305/253/60)r
Primary partition(3)
type: 131(0×83)(Linux ext2 filesystem)
size: 1004mb #s(2056256) s(4919781-6976036)
chs: (306/61/49)-(434/60/47)d (306/61/49)-(434/60/47)r
Primary partition(4)
type: 000(0×00)(unused) size: 0mb #s(0) s(0-0) chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Ora si tratta di interpretare con molta attenzione i risultati di gpart per capire dove creare a mano con fdisk le partizioni, una alla volta, e provare subito a montarle con mount. Se abbiamo eseguito bene i calcoli e le conversioni tra byte e blocchi allora la partizione verrà montata. L’interpretazione dell’output di gpart è la parte più delicata e al fine di evitare errori è necessario munirsi di carta, penna e calcolatrice. Inoltre suggerisco di basarsi sui blocchi del disco piuttosto che sui byte, in quanto gpart potrebbe anche effettuare degli arrotondamenti. In questo modo sarà possibile ricreare le partizioni con fdisk fornendo i blocchi di inizio e fine partizione. Se gpart ha svolto bene il suo lavoro, non c’è da sbagliare.

Per capire esattamente come agire mi ci sono volute oltre due ore di tentativi e letture, perciò credo sia normale se all’inizio troverete difficoltà. Comunque con sangue freddo e la giusta determinazione, è possibile porre rimedio al disastro.

Emule AdunanzA su Linux

Thursday, May 7th, 2009

Non posso certo dire di essere un downloader, però qualche volta utilizzo anche io emule. Chi utilizza linux saprà bene come l’alternativa aMule sia molto indietro con lo sviluppo, e densa di fastidiosi bug, rispetto al progetto ufficiale, Emule appunto.
Come se ciò non bastasse, le modifiche introdotte in aMule devono essere introdotte in aMule Adunanza, la versione modificata per gli utenti della rete Fastweb, introducendo così ulteriori attese e ulteriori bug (senza nulla togliere a Mr_hyde e i tester che portano avanti la cosa).

Viste le cattive premesse ho pensato di poter utilizzare Emule per Windows all’interno della macchina virtuale Windows XP che uso per vari scopi, di modo da avere tutte le caratteristiche e la stabilità del software originario.
Per far questo è bastato installare Emule su Windows XP virtualizzato e configurare il NAT. Questo varia a seconda del software di virtualizzazione utilizzato. Personalmente quello che preferisco, per varie ragioni (licenza, funzionalità, semplicità) è VirtualBox, ora sviluppato da Sun.
VirtualBox utilizza il proprio motore interno per effettuare il NAT delle connessioni, di modo da non dover richiedere fastidiose configurazioni con iptables (per coloro che non le sanno fare, o che non ne hanno voglia), con conseguenti pro e contro, dato che il tutto avviene completamente in userspace. Comunque per istruire il motore di VirtualBox per effettuare correttamente il NAT delle connessioni è sufficiente dare una sola volta i comandi che seguono.

VBoxManage setextradata "Windows XP PRO"
        "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestemule/Protocol" TCP
VBoxManage setextradata "Windows XP PRO"
        "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestemule/GuestPort" 4662
VBoxManage setextradata "Windows XP PRO"
        "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestemule/HostPort" 4662

VBoxManage setextradata "Windows XP PRO"
        "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestemule1/Protocol" UDP
VBoxManage setextradata "Windows XP PRO"
        "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestemule1/GuestPort" 4672
VBoxManage setextradata "Windows XP PRO"
        "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestemule1/HostPort" 4672

Windows XP PRO è il nome della macchina virtuale, e il resto dovrebbe essere abbastanza auto-esplicativo. Per ulteriori informazioni si consulti la guida di VirtualBox.

Sostituire NetworkManager con wicd in Ubuntu

Monday, November 19th, 2007

Ovvero Ho dei problemi ma non so se posso parlarne… (cit.)

…con nm-applet e il famigerato NetworkManager di Gnome.
NetworkManager e` un framework costruito sopra DBUS e HAL capace di collegare la vostra scheda wireless e non, a qualunque tipologia di rete, senza troppe sofferenze. Grazie alla comoda applet infatti e` possibile scegliere da un menu a tendina la rete cui ci si vuole collegare, A PATTO CHE TUTTO FUNZIONI CORRETTAMENTE.

nm-applet

Il problema purtroppo e` che ci sono molti bug in NetworkManager e spesso non funziona. Inoltre c’e` una cosa che non mi e` mai piaciuta, ovvero il fatto che sia necessario un intervento dell’utente per effettuare l’accesso alla rete. Insomma e` necessario che l’utente faccia login su GDM, dando all’applet la possibilita`  di partire.

Cosi` stamattina mentre cercavo una soluzione sono incappato in un nuovo progettino: wicd. Si tratta di un altro network manager con tutte le funzionalita`  che possiede il NetworkManager di Gnome piu` delle altre che ho sempre considerato gravi mancanze da parte del NetworkManager originale.

  • Possibilita`  di scegliere un indirizzo IP statico, mentre in NetworkManager ne si puo` ottenere uno esclusivamente con DHCP. Inutile dire quanto sia fastidioso qualora ci siano delle porte nattate.
  • Connessione al boot, mentre come dicevo prima, NetworkManager richiede l’intervento dell’utente.
  • Possibilita` di eseguire script pre/post-connessione (nella versione di testing).

La cosa piu` importante comunque e` l’installazione assolutamente semplice. Infatti basta aggiungere wicd ai propri repository cosi`.

Prima, per sicurezza facciamo un backup di /etc/apt/sources.list.

sudo -s
cp -v /etc/apt/sources.list{,.bak}

Quindi, sempre come root, aggiorniamo il file sources.list.

cat >> /etc/apt/sources.list << "EOF"
# Repository per wicd
deb http://apt.wicd.net feisty extras
EOF

Importante! Si raccomanda di copiare e incollare i comandi cosi` come sono. Se non vi fidate e avete cognizione di causa, potete sempre fare a mano.

Il bello e` che non c’e` bisogno di nessuna configurazione e che tutto questo non va in conflitto con il NetworkManager originale, perche` quest’ultimo viene automaticamente disinstallato, mentre vengono copiati gli script di avvio di wicd al posto loro, in /etc/rcN.d.L’unica cosa da fare, una volta installato il programma, e` aprire una sola volta Applicazioni, Internet, Wicd per configurare la rete.

Glamodrama in Do minore

Saturday, November 3rd, 2007

DirectX 9.0

La causa di tutto. Io volevo solo aggiornarle o al massimo reinstallarle, ma loro non volevano. Non volevano e basta. Il loro istinto di autoconservazione è bastato per portare Windows XP al punto di non ritorno, ovvero quel punto oltre il quale l’unica cosa da fare è formattare.
Pensate che le DirectX per paura di essere sovrascritte o forse di essere rimpiazzate dalle OpenGL, hanno un installer che prima di procedere con l’effettiva installazione delle librerie controlla che queste non siano già  presenti nel sistema.

E bravu l’installer se non fosse per il fatto che ci sono delle situazioni in cui hai bisogno di forzare la reinstallazione delle librerie. E qui diventa davvero complicata la cosa perché non si possono nemmeno disinstallare e poi reinstallare senza l’ausilio di strumenti di terze parti dall’imprevedibile comportamento, e ovviamente a pagamento.

A quel punto quando seguendo consigli di <em>regeditor wannabe</em> trovati qua e là  per i forum più sfigati del pianeta, hai smerdato completamente Windows ma te ne fotti perché tanto sono anni che tieni tutta la roba su linux, dici (con la voce del prof.™):

Eh! Cazzo me ne fotte? Formatto.

E allora butti dentro il cd di XP. Sai già  che ti sovrascriverà  l’MBR e che dovrai avviare una live di linux per reinstallare GRUB perché l’hai fatto mille volte ma a volte ci si mette di mezzo un destino beffardo.
Si perché stavolta l’installer di Windows XP non parte. Allora con la stessa non chalance che ti ha spinto a formattare e sempre con la voce del prof.™ dici:

Eh! Cazzo me ne fotte? Metto il 2000 che funziona anche meglio.

Errori che si pagano

Allora vai con Windows 2000, arrivi al partizionamento, gli destini i 50 GB che prima erano di XP, scrivi la tabella delle partizioni e gli dici dove installare 2000. A quel punto però ti accorgi che la tabella delle partizioni non è più consistente: sono comparse partizioni che prima non c’erano e altre hanno cambiato dimensione.

Cominci a preoccuparti.

Fai bene a preoccuparti.

Sai quali sono le cose da fare:

  1. Uscire subito dall’installazione
  2. Far partire une live qualunque perché GRUB ovviamente non c’è più
  3. Accorgersi che non hai più /dev/sda{1,2,5,6,7,8,9} ma soltanto /dev/sda
  4. Bestemmiare

Spatatrac!

Quindi l’amara e dolorosa conclusione: Windows 2000 è ancora più infimo di Windows XP, infatti oltre a raschiare il boot loader, raschia anche la tabella delle partizioni, grattugiando con forza tutti i 512 byte dell’MBR. Dopo aver capito cosa è successo pensi ai tuoi 60 GB di dati personali ai quali non puoi più accedere. Ok… Sangue freddo. Non ci puoi accedere ma sono ancora là . È una situazione disarmante quanto stimolante ed è solo questo che ti impedisce di disperarti.

Il Contrattacco

Capisci che devi reagire. Hai già  vissuto situazioni così: finché non hai partita vinta sul computer non ti stacchi dalla tastiera, ignaro del fatto che lui ha molta più pazienza di te. Comunque avvii subito Firefox e apri su di un numero paurosamente alto di schede i risultati della ricerca partition recovery, reiserfs recovery, partition table restore. Quindi ti connetti subito a Jabber alla ricerca del fedele compare di disavventure nonché esperto di disaster recovery (più della parte disaster in realtà ) Nasperrio Da Carl.

A quel punto riprendi a raccontare la tua disavventura in prima persona.

Sir Nasperrio Da Carl Fitzpatrick

RIDE. Appena gli espongo il problema RIDE. Poi capisce che è grave. RIDE. RIDO. Perché effettivamente fa ridere, ma il peggio deve ancora arrivare. A quel punto la chat non basta. Sono al telefono con Nasperrio mentre in chat gli incollo l’output di comandi di basso livello con dozzine di parametri e come argomento finale qualcosa in /dev.

Comunque unendo le forze arriviamo al Partition Rescue HOW-TO, e constatiamo che ci troviamo nel caso peggiore e che potesse capitare: recuperare partizioni logiche. Quindi quello che bisogna fare è sperare che il programma che hai usato per il partizionamento si sia comportato bene, mettendo dei marcatori a inizio e fine partizione.

A questo punto entra in gioco gpart.

gpart  tries to guess which partitions are on a hard disk.
If the primary partition table has been lost,  overwritten
or  destroyed  the  partitions still exist on the disk but
the operating system cannot access them.

Comunque gpart fa il suo sporco lavoro e lo fa anche piuttosto bene. All’inizio qualche difficoltà  per interpretare i risultati anche perchè servivano gli offset in settori delle partizioni, mentre gpart li forniva in megabyte. E chi ha mai avuto a che fare con queste cose? E poi gpart dava i risultati arrotondando al megabyte. Quindi non era preciso. Fortunatamente con una scansione più accurata gpart è stato in grado di darmi gli offset in settori.

Così con 8 shell aperte e con pagine man che parlavano dei riscontri che tutto ciò avrebbe avuto sulla mia vita sociale (giuro c’era scritto ma non mi ricordo dove) ho ricreato una porzione della tabella delle partizioni con fdisk, dando i punti di inizio e di fine delle singole partizioni.
Ha funzionato e sono riuscito a montare la home (dopo svariati tentativi ovviamente) e a recuperare tutti i dati. Quindi ho distrutto tutto e ho reinstallato nell’ordine Windows XP e Ubuntu 7.10.

Epilogo

Ma perché tutto questo? Bè… Mi era venuta voglia di giocare a Silent Hill 4, ma questo si lamentava di alcune mancanze della mia scheda video (estensioni pixel shader), sebbene non fosse vero. Da qui il disaster. Dopo il recovery, la prima cosa che ho fatto è stata reinstallare Silent Hill 4, farlo andare a forza, vedere l’introduzione, prendere paura a causa della natura horror e ansiogena del gioco, quindi uscire immediatamente.

2 Comments

Category Hacks | Tags:


Be aware of pinciaoche™

Friday, December 1st, 2006

Continuano le difficoltà  nasali, visto che mi sono preso un raffreddore coi fiocchi (nel naso), di quelli che non ti lasciano respirare insomma. E questo mi dispiace visto che volevo fare una capatina da HM. Di studiare in queste condizioni ovviamente non se ne parla, perciò penso che passerò la giornata davanti a Warcraft 3. Nei momenti liberi terminerà di traslocare.

Eh si, perché ho cambiato stanza. Adesso occupo una stanza molto più grande, anche se non ho veramente nulla da ridire nei confronti della vecchia stanza, che, come recita questo post è in grado di accogliere in maniera più che confortevole ben quattro persone.

Oltre a questo ieri io e il mio socio brail (ma lui preferirebbe essere chiamato presidente, d’altro canto io preferirei chiamarlo pinciaoche, mangiamerda, gettafumo, tegolaro) abbiamo consegnato il progetto di Sicurezza nei sistemi di calcolo: un firewall con iptables.

Figurone, valutato come più che ottimo e con tanto di domanda

Ma voi questo lo fate per lavoro?

Insomma siamo stati dei fighi, perciò niente di nuovo.

Ovviamente abbiamo dovuto studiare, e un ringraziamento particolare e sentito va a Simone Piccardi autore di ottima documentazione riguardante l’argomento. Ho appena saputo che Simone ha apprezzato molto i nostri ringraziamenti :) . Grazie ancora!

Segue la parte tecnica, insomma, il firewall, che magari potrà  essere d’utilità  per qualcuno. (Trenqui Lagranz, tanto chi ci viene qui?)

#!/bin/sh
#
# Progetto di Sicurezza nei sistemi di calcolo per l'anno 2006/2007
#
# Luca Bagante   4XXXXX
# Stefano Lampis 4XXXXX
#

#
# Scenario
#
# Nel nostro scenario abbiamo 5 host appartenenti a 4 sottoreti di classe C.
# 10.126.0.1 su tap0  : Computer in DMZ con in esecuzione i servizi www domain
#                       smtp imap2
# 10.126.0.2 su tap0  : In realta` si tratta dello stesso host di sopra, con un
#                       ulteriore indirizzo IP allo scopo di simulare un altro host
#                       che faccia da mirror al web server dell'host precedente.
# 10.126.1.1 su tap1  : Host nella rete degli uffici.
# 10.126.2.1 su tap2  : Host nella rete degli uffici cui e` proibita la navigazione nel web.
# 10.126.3.1 su tap3  : Computer adibito all'amministrazione, da qui l'amministratore puo`
#                       collegarsi via SSH al firewall.
#
# NOTA
# Al fine di abilitare il NAT abbiamo nascosto le sottoreti virtuali al
# router centrale. Abbiamo cambiato gli indirizzi IP
# da 10.26.Y.1
# a 10.126.Y.1
#

#
# Protezioni a livello kernel
#
# Queste protezioni possono (e molte lo sono) essere attivate via iptables
# ma nel campo della sicurezza la ridondanza non fa mai male.
#

# Protezione per i pacchetti di tipo echo request diretti in broadcast
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disabilita i pacchetti il cui instradamento è insito nel pacchetto stesso.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# Protezione da attacchi di tipo syn flood.
# Potrebbe degradare le prestazioni, inoltre nel kernel è disabilitato di
# default.
#echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Disabilita i pacchetti ICMP di tipo redirect
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# Disabilita l'invio dei pacchetti di sopra
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# Abilita la protezione antispoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# Effettua il log dei pacchetti con indirizzi impossibili.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

#
# Politiche
#

# Vogliamo che di default vengano scartati tutti i pacchetti.
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Riportiamo tutto allo stato iniziale, azzerando catene, regole, contatori,
# nel caso che lo script venga invocato direttamente piuttosto che da un altro
# script sysVinit-like.
iptables -F
iptables -X
iptables -Z

iptables -t nat -F
iptables -t mangle -F

#
# Catene definite dall'utente
#

# Per prima cosa stabiliamo una serie di regole relative ai pacchetti da
# accettare in più circostanze e mettiamole in una nuova catena.
# La ricezione di questi pacchetti è sempre sicura.
iptables -N allowed

# Questo va fatto per consentire i pacchetti appartenenti a connessioni
# stabilite o correlate.
iptables -A allowed -m state --state ESTABLISHED,RELATED -j ACCEPT

# Consentiamo i pacchetti ICMP non pericolosi, o utili.
iptables -A allowed -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A allowed -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A allowed -p icmp --icmp-type echo-request -j ACCEPT
iptables -A allowed -p icmp --icmp-type fragmentation-needed -j ACCEPT

# Creiamo una catena per i servizi raggiungibili dall'esterno.
iptables -N services

# Webserver e mirror.
iptables -A services -d 10.126.0.1 -p tcp -m multiport \
	--destination-ports 80,443 -j ACCEPT
iptables -A services -d 10.126.0.2 -p tcp -m multiport \
	--destination-ports 80,443 -j ACCEPT

# Posta
iptables -A services -d 10.126.0.1 -p tcp -m multiport --destination-ports \
	25,143 -j ACCEPT

# Altro servizio
iptables -A services -d 10.126.0.1 -p tcp --dport 8080 -j ACCEPT

# DNS
iptables -A services -d 10.126.0.1 -p udp --dport 53 -j ACCEPT

# Raggruppa in maniera logica tutto il traffico tra le sottoreti e verso
# Internet
iptables -N forwarding

# La DMZ esce via http e ftp solo per effettuare gli aggiornamenti da
# security.debian.org che facciamo corrispondere a server.math.unipd.it
# in mancanza di accessi verso Internet.
iptables -A forwarding -m state --state NEW -p tcp -i tap0 -o eth0 \
	-s 10.126.0.0/24 -d security.debian.org -m multiport --destination-ports \
	21,80 -j ACCEPT

# La DMZ può contattare DNS server all'esterno.
iptables -A forwarding -m state --state NEW -p udp -i tap0 -o eth0 \
	-s 10.126.0.0/24 --dport 53 -j ACCEPT

# La sottorete in tap1 può accedere ai seguenti servizi.
iptables -A forwarding -m state --state NEW -p tcp -i tap1 -o eth0 \
	-s 10.126.1.0/24 -m multiport --destination-ports 21,22,25,80,110,143,443 \
	-j ACCEPT

iptables -A forwarding -m state --state NEW -p tcp -i tap1 -o tun0 \
	-s 10.126.1.0/24 --dport 80 -j ACCEPT

# NASELLO
# Meta` della sottorete non puo` uscire via SSH.
# iptables -A forwarding -m state --state NEW -p tcp -i tap2 -o eth0 \
#	-s 10.126.2.0/25 --dport 22 -j DROP

# La sottorete in tap2 può accedere ai servizi di sopra tranne la navigazione
# sul web.
iptables -A forwarding -m state --state NEW -p tcp -i tap2 -o eth0 \
	-s 10.126.2.0/24 -m multiport --destination-ports 21,22,25,110,143 -j ACCEPT

# La sottorete in tap3 può accedere agli stessi servizi di quella in tap1.
iptables -A forwarding -m state --state NEW -p tcp -i tap3 -o eth0 \
	-s 10.126.3.0/24 -m multiport --destination-ports 21,22,25,80,110,143,443 \
	-j ACCEPT

# Tutte le sottoreti hanno accesso alla DMZ per cio` che riguarda i servizi elencati.
iptables -A forwarding -m state --state NEW -p tcp -i tap+ -o tap0 \
	-s 10.126.0.0/16 -d 10.126.0.0/24 -m multiport --destination-ports \
	22,25,80,143,443,8080 -j ACCEPT
iptables -A forwarding -m state --state NEW -p udp -i tap+ -o tap0 \
	-s 10.126.0.0/16 -d 10.126.0.0/24 --dport 53 -j ACCEPT

iptables -A forwarding -m state --state NEW -p tcp -i tun0 -o tap0 \
	-d 10.126.0.0/24 -m multiport --destination-ports \
	25,80,143,443,8080 -j ACCEPT

#
# Attuazione delle regole
#

# INPUT chain
#iptables -A INPUT -j LOG --log-prefix "INPUT"
# Il firewall accetta sempre connessioni generate localmente.
iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# Protezione contro lo spoof degli indirizzi IP.
iptables -A INPUT -i eth0 -s 10.0.0.0/8     -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/12  -j DROP
iptables -A INPUT -i eth0 -s ! 192.168.84.0/24 -j DROP

iptables -A INPUT -j allowed

# OpenVPN
# Inseriamo un controllo anche sul MAC address. Questo ovviamente e` possibile
# solo nella nostra realta` dove i due estremi della VPN risiedono sullo
# segmento di rete.
iptables -A INPUT -m state --state NEW -p udp -s 192.168.84.27 \
	-m mac --mac-source 00:12:3f:ab:01:e1 --dport 1194 -j ACCEPT

# Consente a questo host che fa parte dell'amministrazione di connettersi
# via SSH.
iptables -A INPUT -m state --state NEW -p tcp -i tap3 -s 10.126.3.1 --dport 22 \
	-j ACCEPT

# Log di tutto il resto
iptables -A INPUT -j LOG --log-prefix "INPUT DROP: "

# OUTPUT chain

# Le connessioni dirette a localhost sono sempre permesse.
iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

iptables -A OUTPUT -j allowed

iptables -A OUTPUT -p udp -d 192.168.84.27 --dport 1194 -j ACCEPT

# Il firewall può collegarsi a Internet solo per effettuare gli aggiornamenti.
iptables -A OUTPUT -m state --state NEW -p tcp -o eth0 -d security.debian.org \
	-m multiport --ports 21,80 -j ACCEPT

# Il firewall può interrogare server DNS esterni e quello in DMZ.
iptables -A OUTPUT -m state --state NEW -p udp --dport 53 -o eth0 -j ACCEPT

iptables -A OUTPUT -m state --state NEW -p udp --dport 53 -o tap0 -j ACCEPT

# Log di tutto il resto
iptables -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "

# FORWARD chain
iptables -A FORWARD -j allowed

# Servizi raggiungibili dall'esterno
iptables -A FORWARD -i eth0 -o tap0 -m state --state NEW -j services

# Pacchetti che vengono instradati
iptables -A FORWARD -i tap+ -j forwarding

iptables -A FORWARD -i tun0 -j forwarding

# Log di tutto il resto
iptables -A FORWARD -j LOG --log-prefix "FORWARD DROP: "

#
# NAT
#
# Per prima cosa dobbiamo mascherare i pacchetti, poiché escono tutti
# con lo stesso IP.
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.84.26

# Log di tutto il resto
iptables -t nat -A POSTROUTING -o eth0 -j LOG --log-prefix "POSTROUTING DEBUG: "

# Il webserver in DMZ è raggiungibile dall'esterno.
# Vengono specificati due indirizzi IP perché nel nostro immaginario esistono
# un web server e un suo mirror.
# In questo modo si ottiene una forma semplificata di bilanciamento del carico.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
	--to-destination 10.126.0.1-10.126.0.2

# Anche il server smtp e imap
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --destination-ports \
	25,143,8080 -j DNAT --to-destination 10.126.0.1

# Anche il server DNS.
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j DNAT \
	--to-destination 10.126.0.1

# Log di tutto il resto
iptables -t nat -A PREROUTING -i eth0 -j LOG --log-prefix "PREROUTING DEBUG: "