Il blog è stato spostato! Redirecting...

Stai per essere spostato sul nuovo indirizzo. Se non funziona vai su http://www.lejubila.net e aggiorna il tuo bookmark.

9.2.09

Migrazione a Wordpress


Come potete vedere il blog è stato migrato da Blogger a Wordpress e con l’occasione è stato aperto il nuovo dominio che lo ospita www.lejubila.net.

Ho copiato tutti i vecchi articoli nella nuova gestione e corretto eventuali problemi insorti durante l’importazione da Blogger, comunque sia non è detto che possano essere rimasto qualche errore in qua e in la. Nell’eventualità sono gradite segnalazioni.

Con questo nuovo corso, mi piacerebbe iniziare uan serie di post rigurado le “letture” fatte non necessariamente legate al mondo dell’informatica (fumetti/libri/altro…)

Il blog è in evoluzione, nei prossimi giorni ci saranno sicuramente modifiche e miglioramenti e tempo permettendo anche nuovi post.

Un saluto a tutti.

26.1.09

Cavo seriale per la Fonera: usiamo quello del cellulare

Per collegarsi via seriale alla fonera è necessario un apposito cavo il cui costo è di diverse decine di euro. In alternativa a questo è possibile utilizzare anche il cavo seriale che accompagnava alcuni vecchi cellulari. Qui sotto riporto il link che descrive i telefoni in questione e i diversi schemi dei cavi.

http://www.hidaba.com/2007/11/19/cavo-seriale-per-fonera/

7.1.09

Linksys wrt54gl e dd-wrt: utilizzare i led SecureEasySetup come indicatore di connettività

Il firmware originale del wrt54gl implementa il cosiddetto SecureEasySetup, ovvero la possibilità di switchare in un security mode più o meno restrittivo, e dandone indicazione per mezzo del led con il logo Cisco System (immagine qui accanto).

La cosa interessante è che con il firmware dd-wrt è possibile fare accendere o spengere tale led a piacimento in quanto collegato ad una interfaccia gpio (general purpose input output).
In realtà non è un solo led ma bensì due che quando accesi rispettivamente sono di colore bianco e arancio.

Come descrivevo in altri post, uso un Linksys wrt54gl con firmware dd-wrt v.24 come repeater per collegarmi ad internet per mezzo di un router wifi che stà dietro una rete wireless.
Utilizzando questo tipo di modalità può capitare, molto raramente, che cada la connessione wirless e che quindi internet non sia più raggiungibile. Altri problemi di connettività, che per la verità di verificano più spesso, sono legati a disfunzioni del provider con "guasti" sulla linea.

Per distinguere questi due casi a colpo d'occhio ho deciso di pilotare i led sopra indicati e di accenderli/spengerli in base al caso verificato.

Ecco qui di seguito i diversi casi che si possono verificare:

Led arancione (ambra) accesso: connessione internet funzionante

















Led bianco acceso: connessione internet non funzionate ma gateway raggiungibile (molto probabilmente il malfunzionamento è dovuto da un "guasto" del provider)

















Nessun led accesso: connessione ad internet non funzionante a causa connessione con il gateway interrotta

















L'interfaccia gpio presente sul wrt54gl pilota anche altri led (output) e pulsanti (input), per un approfondimento su questo aspetto rimando alla pagina del wiki di dd-wrt Useful_Scripts - GPIO_Info_for_Linksys_WRT.
Per quanto ci interessa basta sapere che il led arancione si accende con
gpio disable 3
e si spenge con
gpio enable 3

mentre il led bianco si accende con
gpio disable 2
e si spenge con
gpio enable 2

Per implementare la funzione descritta sopra ho realizzato un semplice script che richiamo ogni minuto dal crontab.

Lo script è il seguente:

upline
#!/bin/sh
#
ambra_on="gpio disable 3"
ambra_off="gpio enable 3"
bianco_on="gpio disable 2"
bianco_off="gpio enable 2"

date > /tmp/upline.log

# Check connessione internet
ping -c 5 google.com >> /tmp/upline.log
if [ $? == 0 ]; then
# accende luce ambra
echo "ambra on"
$bianco_off
$ambra_on
else
# controllo connessione default gateway
ping -c 5 `findgw -1` >> /tmp/upline.log
if [ $? == 0 ]; then
# accende luce bianca
echo "bianco on"
$ambra_off
$bianco_on
else
# spenge tutto
echo "tutto off"
$bianco_off
$ambra_off
fi
fi

Come è possibile vedere la verifica sul funzionamento di internet viene eseguita impartendo un ping ad un host pubblico sicuramente funzionante, in questo caso google.com, mentre sempre con un ping viene testata la connessione con il gateway il cui indirizzo viene ricavato con lo script findgw il cui codice è il seguente

#!/bin/sh
#
# Mostra il default gateway

SCRIPT=`basename $0`

if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
echo -e "\n$SCRIPT v 0.2 01/01/2009\n"
echo -e "Parametri:"
echo -e " -h, --help\tQuesto messaggio"
echo -e " -1\t\tSe ci sono piu' default gateway ne restituisce soltanto il primo"
echo -e ""
exit 0
fi

ONLYFIRST=""

if [ "$1" == "-1" ]; then
ONLYFIRST="-m 1"
fi

route -n |grep $ONLYFIRST ^0.0.0.0 | tr -s ' ' | cut -d' ' -f2

exit 0

L'inserimento del comando upline nel crontab avviene inserendo questa linea
* * * * * root /jffs/usr/bin/upline
direttamente dall'interfaccia web di dd-wrt posizionandosi sul menu "Amministrazione/Gestione/Cron":











Gli script sopra menzionati sono stati posizionati nel path /jffs/usr/bin/ dopo che è stato abilitato il supporto al filesystem jffs2 sempre da interfaccia grafica nel menu "Amministrazione/Gestione/Jffs2":

3.1.09

Linksys wrt54gl con dd-wrt: repeater + wan cablata

Come descritto nel post Configurare DD-WRT come repeater sul SysLink wrt54gl (come utilizzare l'adsl del vicino via wifi) alcuni anni fa ho sotto scritto un contratto adsl "Alice Night & WeekEnd". Tale contratto ha la caratteristica di essere flat nel fine settimana, nei giorni festivi e durante le ore notturne, invece durante le ore giornaliere diventa a tariffa oraria.

Sempre come viene descritto nel post sopra mensionato, per ovviare al pagamento della tariffa oraria del mio contratto, utilizzo il mio LinkSys wrt54gl configurato in "repeater mode" per connettermi tramite il router wireles del mio vicino di casa che gentilmente mi ha offerto la sua connessione ad internet.

Grato di tanta gentilezza mi sembrava troppo approfittare anche delle ore che il mio contratto mi offriva come flat (sennò cosa lo pago a fare), così grazie ad uno script opportunamente richiamato dal crontab del LinkSys eseguo lo switch tra il repeat mode e la wan wired del mio wrt54gl.

Per cominciare diamo un'occhiata a come vengono riconosciute le interfacce di rete che ci offre il nostro wrt. Per fare questo dobbiamo accedere al SysLink tramite ssh e lanciare il comando ifconfig, oppure lanciare lo stesso comando da interfaccia web dalla sezione Amministrazione/Comandi. In entrami i casi l'output restituito sarà simile al seguente:

br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:9C
inet addr:192.168.50.254 Bcast:192.168.50.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:426633 errors:0 dropped:0 overruns:0 frame:0
TX packets:328798 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:41495329 (39.5 MiB) TX bytes:347531594 (331.4 MiB)

br0:0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:9C
inet addr:169.254.255.1 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:9C
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:308010 errors:0 dropped:0 overruns:0 frame:0
TX packets:210662 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:32081067 (30.5 MiB) TX bytes:224160287 (213.7 MiB)
Interrupt:4

eth1 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:9E
inet addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:557551 errors:0 dropped:0 overruns:0 frame:1013636
TX packets:667635 errors:400 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:363743762 (346.8 MiB) TX bytes:194900554 (185.8 MiB)
Interrupt:2 Base address:0x5000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MULTICAST MTU:16436 Metric:1
RX packets:17312 errors:0 dropped:0 overruns:0 frame:0
TX packets:17312 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1382846 (1.3 MiB) TX bytes:1382846 (1.3 MiB)

vlan0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:9C
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:307549 errors:0 dropped:0 overruns:0 frame:0
TX packets:209876 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:26485558 (25.2 MiB) TX bytes:223131703 (212.7 MiB)

vlan1 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:9C
inet addr:192.168.2.254 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:460 errors:0 dropped:0 overruns:0 frame:0
TX packets:786 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:51279 (50.0 KiB) TX bytes:82716 (80.7 KiB)

wl0.1 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:9F
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)


Le interfacce presenti sono le seguenti:
  • br0, è un bridge che rappresenta l'interfaccia sulla rete locale, il bridge che collega le due interfacce vlan0 e wl0.1, ovvero le porte dello switch presente sul linksys più la rete wireless
  • br0:0, interfaccia virtuale usata per assegnare un secondo ip alla rete locale (
    Dd-wrt: indirizzo ip di emergenza)
  • eth0, controller di rete programmabile su cui vengono definite le due vlan0 e vlan1
  • eth1, interfaccia wireless
  • lo, loopback
  • vlan0, vlan creata sul controller eth0, che rappresenta le quattro porte della rete locale dello switch presente sul LinkSys
  • vlan1, vlan creata sul controller eth0, che rappresenta la porta wan dove in un'installazione classica viene collegato un modemo/router adsl
  • wl0.1, interfaccia virtuale configurata come access point
Ricapitolando le interfacce che più ci interessano sono queste:
  • br0, la nostra rete locale con indirizzo 192.168.50.254
  • eth1, interfaccia che si affaccia sulla rete a cui siamo collegati in "repeater mode" (quella del vicino di casa) con indirizzo192.168.0.254;
  • vlan1, questa è porta wan del nostro LinkSys con indirizzo 192.168.2.254

In definitiva il wrt54gl si affaccia su tre reti:
  • la rete locale, 192.168.50.0/24
  • la rete del vicini di casa 192.168.0.0/24
  • la wan 192.168.2.0/24
Nella configurazione in "repeter mode" l'interfaccia che funge da wan viene assegnata a eth1, mentre vlan1 (la wan reale) non viene considerata; avremo il risultato che tutta la configurazione della connessione ad internet impostata da interfaccia web sarà applicata ad eth1.















Come è possibile vedere dall'immagine qui sopra, come gateway viene utilizzato l'ip 192.168.0.1 ovvero il router wireless che sta sulla rete a cui accediamo in "repeater mode" (quella del vicino di casa), avendo così una tabella di routing come segue:

Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 vlan1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth1

A questo punto volendo switchare il default gateway su router collegato sulla porta wan del nostro LynkSys eseguo questo script:

enablegw_casa

#!/bin/sh
date > /tmp/enablegw_casa.log

ifconfig vlan1 192.168.2.254 up
sleep 10
pingcheck 192.168.2.1
if [ $? == 0 ]; then
echo -e "\n router acceso\n" >> /tmp/enablegw_casa.log
if [ "$(findgw|grep 192.168.2.1)" != "192.168.2.1" ]; then
echo -e "\n default gw 192.168.2.1 abilitato\n" >> /tmp/enablegw_casa.log
route add default gw 192.168.2.1
stopservice ddns
startservice ddns
else
echo -e "\n default gw 192.168.2.1 gia abilitato\n" >> /tmp/enablegw_casa.log
fi
else
echo -e "\n router spento\n" >> /tmp/enablegw_casa.log
fi

Lo script provvede ad abilitare ed assegnare in indirizzo ip all'interfaccia wan
ifconfig vlan1 192.168.2.254 up
attende alcuni secondi dopo di che verifica che il router che fungerà da gateway (192.168.2.1) sia raggiungibile, per fare questo mi avvalgo dello script pingcheck
pingcheck 192.168.2.1
Se l'esito è positivo e non è già presente come default gateway il router adsl (192.169.2.1) questo viene impostato
route add default gw 192.168.2.1
dato che utilizzo anche un servizio di dynamic dns per potere accedere alla mia lan da remoto, vengono impartiti i comandi seguenti per riavviare il servizio che si occupa di aggiornare l'indirizzo pubblico con cui esce il SysLink su internet
stopservice ddns
startservice ddns
Ci sono alcuni script di servizio che vengono richiamati da enablegw_casa che sono pingchek che controlla la raggiungibilità di un host e findgw che restituisce in output i gateway di default.

pingcheck
#!/bin/sh
#
# Esegue il ping su una serie di indirizzi forniti come argomento,
# se uno do questo fallisce esce con errore se tutti i ping hanno successo esce senza errori.

SCRIPT=`basename $0`

if [ $# = 0 ]; then
echo -e "$SCRIPT v 0.1 15/05/2008\nNessun argomento passato: $SCRIPT addres [addres [addres [..] ] ]"
exit 1
fi

ADDRESES=$@

for ADDRES in $ADDRESES; do
ping -c 25 $ADDRES
#&> /dev/null
PINGCHECK=$?
if [ $PINGCHECK != 0 ]; then
echo "$SCRIPT FAIL $ADDRES"
exit 1
fi
done

echo "$SCRIPT OK"
exit 0

findgw
#!/bin/sh
#
# Mostra il default gateway

SCRIPT=`basename $0`

if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
echo -e "\n$SCRIPT v 0.2 01/01/2009\n"
echo -e "Parametri:"
echo -e " -h, --help\tQuesto messaggio"
echo -e " -1\t\tSe ci sono piu' default gateway ne restituisce soltanto il primo"
echo -e ""
exit 0
fi

ONLYFIRST=""

if [ "$1" == "-1" ]; then
ONLYFIRST="-m 1"
fi

route -n |grep $ONLYFIRST ^0.0.0.0 | tr -s ' ' | cut -d' ' -f2

exit 0

Una volta eseguito enablegw_casa se tutto sara andato nel modo giusto usciremo su internet dal router adsl collegato sulla porta wan del nostro wrt54gl.

A questo punto per ritornare alla situazione originale basterà eseguire lo script disablegw_casa che pensera a eliminare come default gateway l'ip 192.168.2.1 e a disabilitare l'interfaccia vlan1:

disablegw_casa
#!/bin/sh

route del default gw 192.168.2.1
ifconfig vlan1 down
stopservice ddns
startservice ddns
E' da tenere presente che sul wrt54gl è stato attivato il supporto al filesystem jffs e che tutti gli script sopra indicati sono posizionati in /jffs/usr/bin/.

Per concludere, personalente ho inserito i due comandi nel crontab del SysLink in modo che vengano eseguiti agli opportuni orari per switchare da una gateway a l'altro.

40 7 * * 1-5 root /jffs/usr/bin/disablegw_casa
05 21 * * 1-5 root /jffs/usr/bin/enablegw_casa

L'inserimento di tali linee nel crontab è possibile dall'interfaccia web di dd-wrt dal menù Amministrazione/Gestione/Cron

29.12.08

Connessione ssh verso un host remoto dietro nat grazie ad un tunnel comandato a distanza

Dopo avere visto come accedere tramite tunnel ssh ad un host remoto dietro nat (Connessione ssh verso un host dietro nat), vediamo come attivare/disattivare tale tunnel grazie ad un semplice file di testo posto sul web server del host che fungerà da host pubblico.

Elementi in gioco:
  • host-dietro-nat: host su cui vogliamo accedere, sarà lui a creare il tunnel
  • server-pubblico: server pubblico a cui abbiamo accesso e che conterrà il file di testo con il comando per aprire o chiudere il tunnel; per accedere a server-pubblico dovremo bussare alla porta 1234
Cosa vogliamo ottenere:
Vogliamo che host-dietro-nat controlli periodicamente un file sul server web server-pubblico e in base a questo apra/chiuda un tunnel ssh sempre verso server-pubblico. Una volta aperto il tunnel ssh dal server pubblico potremo accedere ad host-dietro-nat con un semplice ssh -p 2222 localhost impoartito su server-pubblico.

File con comando:
Il file contenente il comando per aprire/chidere la connessione ssh deve risiedere sulla web root di server-pubblico ed è nominato o.txt. Deve contenere uno dei seguenti caratteri seguito dal ritorno a capo (\n)
  • r: reset - killa ssh bussanti, ssh tunnel e riapre il tunnel
  • o: open - apre il tunnel
  • c: close - chiude il tunnel (killa ssh bussanti e ssh tunnel)

Vediamo gli script che dovranno essere eseguiti da host-dietro-nat:

open-tunnel-ssh.sh
#!/bin/sh
COMANDO=`wget -q -O - http://server-pubblico/o.txt`

echo "COMANDO=$COMANDO"

if [ "$COMANDO" == "r" ] || [ "$COMANDO" == "c" ]; then
echo "reset"
kill_ssh_bussanti
kill_ssh_tunneling
fi

if [ "$COMANDO" == "r" ] || [ "$COMANDO" == "o" ]; then

PORTAAPERTA=`ps |grep "[s]sh -f -N -R 2222" | wc -l`

if [ "$PORTAAPERTA" == "0" ]; then
echo "sto bussando"
ssh -p 1234 server-pubblico &
sleep 10
echo "apro il tunnel"
ssh -f -N -R 2222:localhost:22 user@server-pubblico

kill_ssh_bussanti
fi
fi


kill_ssh_tunneling
#!/bin/sh
echo "killo ssh tunneling"
for KPID in `ps |grep "[s]sh -f -N -R 2222" | tr -s ' ' | cut -d ' ' -f 2 `; do
kill -9 $KPID
done


kill_ssh_bussanti
#!/bin/sh
echo "killo ssh bussanti"
for KPID in `ps | grep "[s]sh -p 1234" | tr -s ' ' | cut -d ' ' -f 2 `; do
kill -9 $KPID
done


Vediamo i passi che eseguire lo script open-tunnel-ssh.sh:
  • recupera il comando da eseguire inserendolo nella variabile COMANDO (wget -q -O - http://server-pubblico/o.txt)
  • chiude eventuali richieste di port knocking ed eventuali tunnel aperti quando il comando è reset o close grazie agli script kill_ssh_bussanti e kill_ssh_tunneling
  • se il comando impartito è reset oppure open prosegue bussando a server-pubblico (sh -p 1234 server-pubblico &) e aprendo il tunnel ssh verso server-pubblico (ssh -f -N -R 2222:localhost:22 user@server-pubblico)
Si da per scontato che il tutto funziona utilizzando la chiave pubblica ssh di host-dietro-nat in modo che ssh non richieda la password di autenticazione.

Una volta inserito nel crontab di host-dietro-nat lo script open-tunnel-ssh.sh potremo aprire o chiudere il tunnel grazie al contenuto del file o.txt residente su server-pubblico.

23.12.08

Backup di siti ftp con lftp

Avendo la necessità di eseguire il backup di un sito ftp ho fatto un po di ricerche e ho scoperto che con lftp è possibile eseguire la copia ricorsiva dei dati presenti sul sito prelevando soltanto i file/directory variati dal ultimo backup.

Basterà impartire il comando
lftp -f commandfile

dove commandfile sarà un file contenente i comandi che lftp dovrà eseguire, che potranno essere i seguenti:

open -u user,password sito_ftp/path/da/backuppare
mirror --verbose
quit


Con open indichiamo l'utente e password (separati dalla virgola) utilizzati per collegarsi a sito_ftp dove sarà possibile indicare anche il path iniziale.
Il comando mirror invece permette di lanciare il backup che per default viene eseguito da remoto a locale, ma con l'opzione -R sarà possibile fare anche il contrario. mirror possiede molti parametri di cui rimando alla man page per approfondimenti.
Con quit invece usciremo dalla sessione ftp.

Se tutto va bene una volta eseguito il comando come sopra indicato ci ritroveremo nella directory corrente il mirror del nostro sito ftp.

22.12.08

Come un telefono ip può mettere in ginoccio un server di produzione

All'avvicinarsi della vigilia di Natale mi accingevo a trascorrere con la massima tranquillità questi due giorni lavorativi.

Purtroppo così non è stato, inspiegabilmente domenica pomeriggio il server aziendale ha iniziato a manifestare problemi di connettività sulla rete.
Iniziando il turno lavorativo di produzione alle 6,00 del mattino, ho rimesso la sveglia ad un orario ASSURDO per presentarmi in ditta all'alba in modo da potere constatare cosa diavolo era successo.

Arrivo alle 6,02, sostituisco la patch che collega il server allo switch. Tentativo inutile.
Dopo varie verifiche, riavvio lo switch, ma anche questo non da esito positivo.
Ok, è la scheda di rete guasta, vai con la sostituzione. Niente di niente !!!!!!
Cosa cavolo sta succedendo.
A questo punto impartisco un bel

ifconfig eth0 down

e butto giù la scheda di rete del server.
Da un altro host azzero la tabella di arp

arp -d 172.26.1.1


eseguo un ping sul server

ping 172.26.1.1


host irraggiungibile, ricontrollo la tabella di arp e stranamente trovo un mac address per l'ip del server.
Una rapida ricerca e scopro che tale mac address appartiene ad un telefono ip Grandstream. Fortunatamente in ditta ce n'è soltanto uno di tale marca. Mi dirigo verso l'oggetto incriminato e strappo via la patch che lo collega alla rete.

Ora tutto torna a funzionare, il telefono è guasto e per qualche strano motivo rispondeva lui alle richieste arp, non solo del server ma anche di altri pc windows.

Alla fine, dopo più di 4 ore di stress, la situazione è tornata sotto controllo.


Aggiornamento del 23/12/2008:
Ieri dopo che si sono calmate le acque, ho provveduto a posizionare un altro telefono voip GRANDSTREAM Budge Tone-200, stessa marca/modello di quello incriminato.

STAMANI SI E' RIPRESENTATO IL PROBLEMA !!!!!!

Ma cosa hanno questi maledetti telefoni, qualcuno ha riscontrato problemi simili ?????

19.11.08

Wake on lan (wol) su Dd-wrt da command line ssh

Avendo accesso solo tramite ssh al nostro dd-wrt è possibile utilizzare il wol anche da shell

/usr/sbin/wol -i 192.168.50.255 aa:bb:cc:dd:ee:ff

dove 192.168.50.255 è l'indirizzo di brodcast del segmento di lan dove è posizionato l'host da svegliare, mentre aa:bb:cc:dd:ee:ff è il suo mac address.

18.11.08

Dizionari per attacchi bruteforce

http://packetstormsecurity.org/Crackers/wordlists/

Attaccare Windows con la Null Session

Segnalo a questo link l'articolo in oggetto presente su PillolHacking che descrive l'utilizzo della null session come strumento di hacking su sistemi windows.

28.10.08

fonKounter, contatore e statistiche di accesso per il tuo sito web senza mysql (e installazione su Aruba)

Recentemente realizzando il sito web di un cliente ho avuto la necessita di implementarvi un contatore di accessi con relative statistiche.
Esistono molti prodotti open source di ottimo livello ma la maggior parte necessitano php e mysql lato server per funzionare. Avendo solo a disposizione php dovevo trovare qualcosa di diverso. Dopo un pò di ricerche ho trovato l'ottimo funKounter. Questo non necessita di mysql in quanto archivia i dati di accesso su dei semplici file di testo.


Vediamo come installarlo:

Scarichiamo il pacchetto da qui e decomprimiamolo.
Troviamo dentro fkounter5/conf/ il file di configurazione di esempio conf_sample.php
Copiamo il file sostituendo _sample con un identificativo a piacere del contatore che vogliamo creare,
questo sarà l'id a cui fare riferimento. Per esempio io per il blog ho scelto 'blog'.

Editando il file troviamo diversi parametri da impostare, di cui alcuni:

$cnf__mtime_unique_accs
intervallo di tempo espresso in minuti dentro il quale il conteggio delle visite di una pagina viene ignorata se un'utente la visita più volte, normalmente è impostato a 30.

$cnf__count_per_pages
se lo stesso contatore e posizionato su più pagine dello stesso sito, questo parametro indica se incrementare le visite per ogni pagina visitata da un'utente o soltanto sulla prima raggiunta

$cnf__last_entries
numero delle ultime visite di cui mantenere il dettaglio, normalmente impostato a 15, io l'ho portato a 100

Per approfondimenti rimando al manuale ufficiale.

Una volta terminata la configurazione, la cartella fkounter5 potrà essere uplodata direttamente sulla root del nostro spazio web.


Inserimento del contatore nelle pagine web:

L'inserimento avviene semplicemente tramite codice javascript, di cui abbiamo tre possibilità:










l'id a cui si fa riferimento nel codice js è quello associato al file di configurazione editato
precedentemente, in questo l'id è blog per il file di configurazione conf_blog.php

Visualizzazione delle statistiche:


A questo punto la visualizzazione delle statistiche avverrà puntando il browser al file /fkounter5/stats.php?id=blog del nostro spazio web,
esempio http://www.miospazioweb.it/fkounter5/stats.php?id=blog


Installazione su Aruba:

Il sito sviluppato per il cliente di cui parlavo al inizio è ospitato su Aruba. Seguendo le istruzioni sopra indicate però funKounter non funziona, in quanto durante il primo accesso al contatore, il programma non riesce a creare alcune directory di servizio necessarie alla memorizzazione dei dati. Ho risolto il problema creandole direttamente a mano del pannello di controllo di Aruba e sono:
back
data

temp

tutte da creare sotto fkounter5


Conclusioni:


fanKounter è stato utilizzato anche per questo blog, se volete dare un'occhiata alle statistiche potete farlo dal link in alto a destra o a fondo pagina.

Buon conteggio a tutti.

24.10.08

Udev e seriali usb

Ho avuto la necessità di installare 4 adattatori usb-seriale su un pc ubuntu 8.04.
Il device creato da udev all'inserimento dell'adattatore doveva puntare link simbolico che fosse sempre lo stesso in corrispondenza dell'adattatore, in modo da riconosce univocamente la seriale.

Questo è quanto ho inserito in /etc/udev/rules.d/10-local.rules

#
# Regole udev per assegnare un link simbolico
# al device in base alla porta usb dove viene
# collegato il cavo usb-seriale
# La regola discriminante è il parametro KERNELS
# (Es.: KERNELS=="1-2:1.0")
#
# Per ricavare il valore KERNELS assegnato alla porta usb
# che ci interessa proseguire come segue
# 1. collegare alla porta usb il convertitore usb-seriale
# in modo che venga creato il device /dev/ttyUSB0
# 2. eseguire il comando udevinfo -p /sys/class/tty/ttyUSB0 -a
# 3. a vide verrà presentato un output simile al seguente,
# il valore che ci interessa è quello riportato alla voce KERNELS:
#
# looking at device '/class/tty/ttyUSB0':
# KERNEL=="ttyUSB0"
# SUBSYSTEM=="tty"
# DRIVER==""
# ATTR{dev}=="188:0"
#
# looking at parent device '/devices/pci0000:00/0000:00:02.0/usb1/1-3/1-3:1.0/ttyUSB0':
# KERNELS=="ttyUSB0"
# SUBSYSTEMS=="usb-serial"
# DRIVERS=="pl2303"
#
# looking at parent device '/devices/pci0000:00/0000:00:02.0/usb1/1-3/1-3:1.0':
#
# KERNELS=="1-3:1.0" <=== QUESTO E' IL VALORE CHE CI INTERESSA
#
# SUBSYSTEMS=="usb"
# DRIVERS=="pl2303"
# ATTRS{modalias}=="usb:v067Bp2303d0400dc00dsc00dp00icFFisc00ip00"
# ATTRS{bInterfaceProtocol}=="00"
# ATTRS{bInterfaceSubClass}=="00"
# ATTRS{bInterfaceClass}=="ff"
# ATTRS{bNumEndpoints}=="03"
# ATTRS{bAlternateSetting}==" 0"
# ATTRS{bInterfaceNumber}=="00"
#
#

KERNEL=="ttyUSB[0-9]*", KERNELS=="1-1:1.0", NAME="%k", SYMLINK="seriale1", GROUP="dialout", OPTIONS="last_rule"

KERNEL=="ttyUSB[0-9]*", KERNELS=="1-2:1.0", NAME="%k", SYMLINK="seriale2", GROUP="dialout", OPTIONS="last_rule"

KERNEL=="ttyUSB[0-9]*", KERNELS=="1-3:1.0", NAME="%k", SYMLINK="seriale3", GROUP="dialout", OPTIONS="last_rule"

KERNEL=="ttyUSB[0-9]*", KERNELS=="1-4:1.0", NAME="%k", SYMLINK="seriale4", GROUP="dialout", OPTIONS="last_rule"

14.10.08

Generatore di file favicon

Segnalo un ottimo e semplice tool online che a partire da un'immagine fornita permette di generare il corrispondente file favicon.

http://tools.dynamicdrive.com/favicon/

10.10.08

Backup di un server remoto da un client con ssh

In alternativa Backup su client remoto con tar e ssh ho illustrato come eseguire un backup di un disco locale su un host remoto, qui invece parlo del contrario, ovvero di come eseguire il backup dati di un server remoto direttamente da un client.

ssh user@server 'tar cf - /home /etc /var /usr/local /lib' > ./backup.tar

con il comando supra eseguiamo il backup delle directory /home /etc /var /usr/local /lib dell'host server nel file locale backup.tar

6.8.08

Usare dd-wrt come client ssh con autenticazione con chiave pubblica

In queste note cercherò di dare una piccola illustrazione su come riuscire ad utilizzare dropbear, il server/client ssh di dd-wrt, come client con autentificazione a chiave pubblica.

Innanzi tutto abbiamo bisogno di generare la chiave pubblica, questa può essere creata a partire dalla chiave privata già presente su dd-wrt oppure da una nuova che possiamo creare noi.

La creazione della chiave privata avviene tramite il comando dropbearkey:

dropbearkey -t rsa -f file_private_key.db

con -t possiamo specificare la chiave che può essere di tipo rsa o dss, mentre con -f indichiamo in quale file salvare la chiave privata. Ci verrà chiesto anche la passfrase da utilizzare per crittografare la chiave, che potrà anche non essere inserita se vogliamo che al momento del login del client ssh non venga richiesta nessuna password.

Una volta che abbiamo la chiave privata possiamo creare la chiave pubblica così

dropbearkey -y -f file_private_key.db

oppure così per partire dalla chiave privata già presente in dd-wrt

dropbearkey -y -f /tmp/root/.ssh/ssh_host_rsa_key

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgwCRmLfMW6fd
UTSxFdZyH8QTdrRn4QmuRPTF7vJOSCEoPfk7oo05OpMfKEZp
d7+pgQmCP4UjINHaX34dEoCah6aL4U6bH6QFLrCpk5H3DQap
OmFTVqW25/59ZHJEnRRei8o6DUJKh1g9776yP3X9+XtQ+Pucn
zuDpMK3FzWUK/qOEM57 david@nbdavid
Fingerprint: md5 ce:e8:a8:cf:d9:ed:11:63:ec:49:0e:b5:de:e3:cf:38


l'output risultante sarà composto dalla chiave pubblica più il fingerprint, quello che a noi interessa è la chiave pubblica che potrà essere inserita nel file authorized_keys del server ssh a cui vogliamo accedere.

Però c'è un problema, l'implementazione di dropbear presente su dd-wrt (o almeno dd-wrt per SysLink 54GL) non supporta l'opzione -y che è quella che ci permette di generare la chiave pubblica, infatti con il comando sopra indicato non verrò generato nessun output.

Come risolvere il problema ?
Abbiamo bisogno di un'implementazione di dropbear funzionante su un altro pc, copiarci la chiave privata e generare li sopra la chiave pubblica da distribuire sui server ssh interessati.

È opportuno fare ATTENZIONE che la chiave privata non vada in mani sbagliate per non cadere in gravi problemi di sicurezza.

da dd-wrt copio la chiave privata su Ubuntu:
dd-wrt# scp /tmp/root/.ssh/ssh_host_rsa_key user@ubuntu:ssh_host_rsa_key.dd-wrt

installo dropbear su ubuntu:
ubuntu# sudo apt-get install dropbear

genero la chiave pubblica a partire da quella privata e la metto in ssh_host_rsa_key.pub:
ubuntu# dropbear -y ssh_host_rsa_key.dd-wrt | grep -v Fingerprint > ssh_host_rsa_key.pub

ricopio la chiave privata appena generata su dd-wrt:
ubuntu# scp ssh_host_rsa_key.pub user@dd-wrt:.ssh/.

ora per motivi di sicurezza eliminiamo sia la chiave privata sia quella pubblica appena generata dal pc di transito.

A questo punto su dd-wrt avremo la chiave pubblica appena creata nel file /tmp/root/.ssh/ssh_host_rsa_key.pub da utilizzare per essere distribuita su i server a cui vorremo accedere. Ricordiamo che dd-wrt utilizza filesystem volatile, nel momento che lo riavvieremo il file sparirà quindi è opportuno conservarlo in una memoria non volatile, magari una partizione jffs sempre sullo stesso dd-wrt.

Una volta impostata la chiave pubblica sul server interessato potremo accederci da dd-wrt in questo modo:

ssh user@server -i /tmp/root/.ssh/ssh_host_rsa_key

con l'opzione -i dobbiamo indicare la chiave privata da utilizzare per la connessione.

Nel caso non avessimo utilizzato una passfrase non ci verrà richiesta nessuna password di accesso. Se vogliamo utilizzare ssh come client all'interno di uno script shell potrebbe essere opportuno indicare l'opzione -y con la quale non viene chiesta nessuna conferma sul fingerprint.

Gestore degli appunti anche su Ubuntu Hardy Heron

Nella precedente incarnazione di Ubuntu usavo con soddisfazione Glipper come gestore della clipboard. Purtroppo in Ubuntu 8.04 questo ha problemi di avvio e il 90% delle volte si blocca inesorabilmente.

Grazie a Pedro Fragoso, che ha fixato il problema, possiamo continuare ad usare il nostro gestore degli appunti preferito.

Troviamo il pacchetto da lui creato qui http://launchpadlibrarian.net/14965046/glipper_1.0-1ubuntu2%7Eppa1_i386.deb

4.8.08

Notificare in una dialogbox la posta in arrivo su Thunderbird

Thunderbird 2.0 ha già un sistema di notifica della posta in arrivo. Nel momento in cui arriva un nuovo messaggio questo viene notificato con una piccola casella di testo in basso a destra che ci informa sul nuovo evento. Questa però rimane presente a video solo per qualche secondo, così che se siamo un po' distratti o ho non siamo presenti davanti al pc la notifica ci sfugge.

Quello di cui avremmo bisogno sarebbe un bel messaggio a video che scompare solo dopo averci cliccato. Niente problema, quanto detto può essere realizzato grazie ai seguenti tre strumenti:
Scarichiamo MailBox Alert da qui e installiamolo su Thunderbird dal menù "Strumenti / Componenti aggiuntivi"
Installiamo Zenity da linea di comando con:
sudo apt-get install zenity

Creiamo il nostro script ad hoc che verrà richiamato da MailBox Alert ed eseguirà la notifica della posa in arrivo. Sempre da linea di comando eseguire
gksudo gedit /usr/local/bin/notifica-nuova-mail.sh
ed in collare dentro il file di testo il seguente script:

#!/bin/bash

zenity --info --text="A T T E N Z I O N E \! \! \!\n\nC'E' UN NUOVO MESSAGGIO\n\nCONTROLLA LA POSTA"
thunderbird

dopo di che salvare ed uscire.


Adesso configuriamo MailBox Alert in modo da richiamare il mostro script quando c'è nuova posta in arrivo.
Da Thunderbird andiamo sul menù "Strumenti / Opzioni MailBox Alert" selezioniamo la checkbox "Esegui un comando", nella casella di testo inseriamo il path del nostro script /usr/local/bin/notifica-nuova-mail.sh e confermiamo cliccando sul pulsante "OK"


Adesso non ci rimane altro che aspettare una nuova mail.