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.

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 ?????