27/11/2011

IP pubblico blacklistato da out.virgilio.it

Da un po' di tempo a questa parte mi capita di non ricevere le notifiche via mail da qualcuno dei miei server. Purtroppo ciò accade saltuariamente ed in modo pseudorandom, quindi per mettere bene a fuoco la problematica ho dovuto effettuare un'attenta analisi degli eventi.

blacklist.jpg

Ma andiamo con ordine. Ieri, dopo aver aperto il mio client di posta elettronica, mi sono accorto che mancavano TUTTE le email di notifica del mio server casalingo (qualche giorno prima mi era successo la stessa cosa con il server di un amico commercialista). Accedo quindi alla shell via SSH e lancio il comando:

nightfly@nightbox:~$ cat /var/log/exim4/mainlog | grep mioindirizzoemail

Una delle entry riportava le seguenti informazioni:

** *@nightbox.it R=hub_user_smarthost T=remote_smtp_smarthost: SMTP error from remote mail server after MAIL FROM:<> SIZE=2430: host rm.virgilio.it [62.211.72.20]: 550 mail not accepted from blacklisted IP address [188.11.59.93]

Uhm, il mio IP pubblico, ovvero 188.11.59.93 è stato blacklistato dall'SMTP di virgilio... ma per quale motivo?

Mi collego dunque al sito www.senderbase.org e digito il mio indirizzo IP pubblico. Come risultato mi becco una bella schermata in cui c'è scritto che l'IP da me digitato è classificato come poor ed è stato inserito nella pbl di spamhaus.org. Bene, ma cosa diavolo è questa pbl? Cito testualmente:

The Spamhaus PBL is a DNSBL database of end-user IP address ranges which should not be delivering unauthenticated SMTP email to any Internet mail server except those provided for specifically by an ISP for that customer's use. The PBL helps networks enforce their Acceptable Use Policy for dynamic and non-MTA customer IP ranges.

Ok, quindi il problema è dovuto al fatto che ho inviato le email al mio MTA (out.virgilio.it) senza essermi prima autenticato. Inoltre, il controllo viene effettuato solo sugli IP pubblici che iniziano con 188.*, ovvero gli ultimi (in ordine di tempo) messi a disposizione per gli utenti di Aliceadsl.

Ne è la riprova il fatto che gli altri server che utilizzano un IP pubblico diverso da 188.* non vengono blacklistati, nonostante continuino a non usare l'autentica per connettersi all'SMTP di virgilio.

Per completezza, queste sono le blacklist su cui si basa l'SMTP citato in precedenza:

http://www.spamhaus.org
http://ipremoval.sms.symantec.com
http://cbl.abuseat.org
http://psbl.surriel.com

Ma come fare per risolvere il problema? Semplice, basta fare in modo che venga utilizzata l'autentica in fase di invio dei messaggi email (soluzione definitiva), oppure cambiare indirizzo IP pubblico, sperando che non ce ne venga assegnato nuovamente uno del blocco 188.* (soluzione temporanea).

A presto.

Aggiornamento

A quanto pare il controllo sull'autenticazione SMTP è stato esteso anche ad altri netblock, ad esempio il 79.*. Dunque vi consiglio di settare l'autentica per lo smarthost (se utilizzate exim4 come mail server locale, potete trovare informazioni utili in questo post).

24/11/2011

Smarthost authentication con exim4

In questo post ho discusso i meccanismi che regolano il funzionamento delle blacklist sull'SMTP out.virgilio.it

Ora vedremo come abilitare l'autentica per lo smarthost (ovvero l'MTA) utilizzato da exim4.

exim4.png

La procedura è quasi banale, basta modificare il contenuto del file passwd.client presente nella directory /etc/exim4, inserendo una stringa così formata:

smarthost:username@dominio:password

Ad esempio, se il nostro exim4 utilizza come smarthost out.virgilio.it, dovremo editare il file citato in precedenza, aggiungendo la seguente entry:

out.virgilio.it:vostroindirizzo@virgilio.it:vostrapassword

Per verificare la correttezza di tale procedura ho effettuato uno sniffing dei pacchetti da e verso lo smarthost. Ecco i dump (parziali):

Senza autentica

No.     Time        Source                Destination           Protocol Info
      1 0.000000    172.16.*.*            212.48.20.24          TCP      58336 > smtp [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=164278477 TSER=0 WS=6

No.     Time        Source                Destination           Protocol Info
      2 0.049538    212.48.20.24          172.16.*.*            TCP      smtp > 58336 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1380 TSV=262597959 TSER=164278477 WS=7

No.     Time        Source                Destination           Protocol Info
      3 0.049655    172.16.*.*            212.48.20.24          TCP      58336 > smtp [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=164278490 TSER=262597959

No.     Time        Source                Destination           Protocol Info
      4 0.097831    212.48.20.24          172.16.*.*            SMTP     S: 220 fep-mail-smtpout-l2c.virgilio.net ESMTP Service ready

No.     Time        Source                Destination           Protocol Info
      5 0.097934    172.16.*.*            212.48.20.24          TCP      58336 > smtp [ACK] Seq=1 Ack=60 Win=5888 Len=0 TSV=164278502 TSER=262598009

No.     Time        Source                Destination           Protocol Info
      6 0.098125    172.16.*.*            212.48.20.24          SMTP     C: EHLO nightbox

No.     Time        Source                Destination           Protocol Info
      7 0.145662    212.48.20.24          172.16.*.*            TCP      smtp > 58336 [ACK] Seq=60 Ack=16 Win=5888 Len=0 TSV=262598057 TSER=164278502

No.     Time        Source                Destination           Protocol Info
      8 0.146254    212.48.20.24          172.16.*.*            SMTP     S: 250-fep-mail-smtpout-l2c.virgilio.net | 250-DSN | 250-8BITMIME | 250-PIPELINING | 250-HELP | 250-AUTH=LOGIN | 250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN | 250-DELIVERBY 300 | 250 SIZE 31457280

No.     Time        Source                Destination           Protocol Info
      9 0.164391    172.16.*.*            212.48.20.24          SMTP     C: MAIL FROM:<nightfly@nightfly.*.*> SIZE=1405 | RCPT TO:<nazareno.latella@*.*> | DATA

No.     Time        Source                Destination           Protocol Info
     10 0.211331    212.48.20.24          172.16.*.*            SMTP     S: 250 MAIL FROM:<nightfly@nightfly.*.*> OK

No.     Time        Source                Destination           Protocol Info
     11 0.211789    212.48.20.24          172.16.*.*            SMTP     S: 250 RCPT TO:<nazareno.latella@*.*> OK

No.     Time        Source                Destination           Protocol Info
     12 0.212137    172.16.*.*            212.48.20.24          TCP      58336 > smtp [ACK] Seq=112 Ack=338 Win=6912 Len=0 TSV=164278531 TSER=262598123

No.     Time        Source                Destination           Protocol Info
     13 0.436690    212.48.20.24          172.16.*.*            SMTP     S: 354 Start mail input; end with <CRLF>.<CRLF>

No.     Time        Source                Destination           Protocol Info
     14 0.437121    172.16.*.*            212.48.20.24          IMF      subject: prova, from: * <*@nightfly.*.*>rn,

No.     Time        Source                Destination           Protocol Info
     15 0.511319    212.48.20.24          172.16.*.*            SMTP     S: 250 <4EC124BD001803F0> Mail accepted

No.     Time        Source                Destination           Protocol Info
     16 0.548011    172.16.*.*            212.48.20.24          TCP      58336 > smtp [ACK] Seq=497 Ack=422 Win=6912 Len=0 TSV=164278615 TSER=262598423

No.     Time        Source                Destination           Protocol Info
     17 0.582529    172.16.*.*            212.48.20.24          SMTP     C: QUIT

No.     Time        Source                Destination           Protocol Info
     18 0.582574    172.16.*.*            212.48.20.24          TCP      58336 > smtp [FIN, ACK] Seq=503 Ack=422 Win=6912 Len=0 TSV=164278623 TSER=262598423

No.     Time        Source                Destination           Protocol Info
     19 0.629901    212.48.20.24          172.16.*.*            SMTP     S: 221 fep-mail-smtpout-l2c.virgilio.net QUIT

No.     Time        Source                Destination           Protocol Info
     20 0.630006    172.16.*.*            212.48.20.24          TCP      58336 > smtp [RST] Seq=503 Win=0 Len=0

No.     Time        Source                Destination           Protocol Info
     21 0.630223    212.48.20.24          172.16.*.*            TCP      smtp > 58336 [ACK] Seq=466 Ack=504 Win=5114624 Len=0

No.     Time        Source                Destination           Protocol Info
     22 0.630240    172.16.*.*            212.48.20.24          TCP      58336 > smtp [RST] Seq=504 Win=0 Len=0


Con autentica

No.     Time        Source                Destination           Protocol Info
      1 0.000000    172.16.*.*            212.48.20.24          TCP      58305 > smtp [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=164205424 TSER=0 WS=6

No.     Time        Source                Destination           Protocol Info
      2 0.050120    212.48.20.24          172.16.*.*            TCP      smtp > 58305 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1380 TSV=262305745 TSER=164205424 WS=7

No.     Time        Source                Destination           Protocol Info
      3 0.050177    172.16.*.*            212.48.20.24          TCP      58305 > smtp [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=164205437 TSER=262305745

No.     Time        Source                Destination           Protocol Info
      4 0.115507    212.48.20.24          172.16.*.*            SMTP     S: 220 fep-mail-smtpout-l2c.virgilio.net ESMTP Service ready

No.     Time        Source                Destination           Protocol Info
      5 0.115532    172.16.*.*            212.48.20.24          TCP      58305 > smtp [ACK] Seq=1 Ack=60 Win=5888 Len=0 TSV=164205453 TSER=262305811

No.     Time        Source                Destination           Protocol Info
      6 0.115639    172.16.*.*            212.48.20.24          SMTP     C: EHLO nightbox

No.     Time        Source                Destination           Protocol Info
      7 0.162612    212.48.20.24          172.16.*.*            TCP      smtp > 58305 [ACK] Seq=60 Ack=16 Win=5888 Len=0 TSV=262305858 TSER=164205453

No.     Time        Source                Destination           Protocol Info
      8 0.163306    212.48.20.24          172.16.*.*            SMTP     S: 250-fep-mail-smtpout-l2c.virgilio.net | 250-DSN | 250-8BITMIME | 250-PIPELINING | 250-HELP | 250-AUTH=LOGIN | 250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN | 250-DELIVERBY 300 | 250 SIZE 31457280

No.     Time        Source                Destination           Protocol Info
      9 0.163651    172.16.*.*            212.48.20.24          SMTP     C: AUTH CRAM-MD5

No.     Time        Source                Destination           Protocol Info
     10 0.217604    212.48.20.24          172.16.*.*            SMTP     S: 334
(digest username)

No.     Time        Source                Destination           Protocol Info
     11 0.217920    172.16.*.*            212.48.20.24          SMTP     C:
(digest password)

No.     Time        Source                Destination           Protocol Info
     12 0.303846    212.48.20.24          172.16.*.*            TCP      smtp > 58305 [ACK] Seq=338 Ack=117 Win=5888 Len=0 TSV=262306000 TSER=164205479

No.     Time        Source                Destination           Protocol Info
     13 0.345052    212.48.20.24          172.16.*.*            SMTP     S: 235 CRAM-MD5 authentication successful

No.     Time        Source                Destination           Protocol Info
     14 0.363227    172.16.*.*            212.48.20.24          SMTP     C: MAIL FROM:<nightfly@nightfly.*.*> SIZE=1405 AUTH=nightfly@nightfly.*.* | RCPT TO:<nazareno.latella@*.*> | DATA

No.     Time        Source                Destination           Protocol Info
     15 0.410026    212.48.20.24          172.16.*.*            TCP      smtp > 58305 [ACK] Seq=378 Ack=247 Win=6912 Len=0 TSV=262306106 TSER=164205515

No.     Time        Source                Destination           Protocol Info
     16 0.410494    212.48.20.24          172.16.*.*            SMTP     S: 250 MAIL FROM:<nightfly@nightfly.*.*> OK

No.     Time        Source                Destination           Protocol Info
     17 0.410923    212.48.20.24          172.16.*.*            SMTP     S: 250 RCPT TO:<nazareno.latella@*.*> OK

No.     Time        Source                Destination           Protocol Info
     18 0.410978    172.16.*.*            212.48.20.24          TCP      58305 > smtp [ACK] Seq=247 Ack=472 Win=6912 Len=0 TSV=164205527 TSER=262306106

No.     Time        Source                Destination           Protocol Info
     19 0.532271    212.48.20.24          172.16.*.*            SMTP     S: 354 Start mail input; end with <CRLF>.<CRLF>

No.     Time        Source                Destination           Protocol Info
     20 0.532658    172.16.*.*            212.48.20.24          IMF      subject: prova, from: * <*@nightfly.*.*>rn,

No.     Time        Source                Destination           Protocol Info
     21 0.630124    212.48.20.24          172.16.*.*            SMTP     S: 250 <4EC124BD0017FEC2> Mail accepted

No.     Time        Source                Destination           Protocol Info
     22 0.668193    172.16.*.*            212.48.20.24          TCP      58305 > smtp [ACK] Seq=632 Ack=556 Win=6912 Len=0 TSV=164205592 TSER=262306326

No.     Time        Source                Destination           Protocol Info
     23 0.697248    172.16.*.*            212.48.20.24          SMTP     C: QUIT

No.     Time        Source                Destination           Protocol Info
     24 0.697297    172.16.*.*            212.48.20.24          TCP      58305 > smtp [FIN, ACK] Seq=638 Ack=556 Win=6912 Len=0 TSV=164205599 TSER=262306326

No.     Time        Source                Destination           Protocol Info
     25 0.743766    212.48.20.24          172.16.*.*            SMTP     S: 221 fep-mail-smtpout-l2c.virgilio.net QUIT

No.     Time        Source                Destination           Protocol Info
     26 0.743892    172.16.*.*            212.48.20.24          TCP      58305 > smtp [RST] Seq=638 Win=0 Len=0

No.     Time        Source                Destination           Protocol Info
     27 0.744116    212.48.20.24          172.16.*.*            TCP      smtp > 58305 [ACK] Seq=600 Ack=639 Win=5081856 Len=0

No.     Time        Source                Destination           Protocol Info
     28 0.744152    172.16.*.*            212.48.20.24          TCP      58305 > smtp [RST] Seq=639 Win=0 Len=0

Come potete notare, il metodo di autenticazione di default utilizzato dall'SMTP è CRAM-MD5.

Infine, riavviamo exim4 mediante il comando:

nightfly@nightbox:/etc/exim4$ sudo service exim4 restart

ed abbiamo finito.

A presto.

23/11/2011

autovodafone versione 0.2: URL-encoding completo e meccanismi di controllo

Come avevo già preannunciato in questo post, ecco la versione 0.2 dello script bash per l'invio di MMS gratis mediante Vodafone.it:

mms2.jpg

#!/bin/bash

#File di log
FILELOG=/var/log/autovodafone

ROOT_UID=0

#Controllo che lo script venga eseguito da root
if [ "$UID" -ne "$ROOT_UID" ];then

        ERRORE1="Errore 1: Devi essere root per eseguire lo script"
        echo $ERRORE1
        echo "$(date) $ERRORE1" >> $FILELOG
        exit 1

fi

data=$(date)

echo "Inserisci il destinatario:"

read destinatario

echo "Inserisci l'oggetto del messaggio:"

read oggetto

echo "Inserisci il testo del messaggio:"

read testo

echo "$testo" > text

cat text | sed -f urlencoding.sed > encoded

enc=$(cat encoded)

curl -c cookiev.txt -F "username=vostrousername" -F "password=vostrapassword" https://www.vodafone.it/190/trilogy/jsp/login.do 2&>1
curl -b cookiev.txt --data "recipient=$destinatario&subjecttosend=$oggetto&SmilName=&TextName=$enc&ImageName=&AudioName=&nextPage=/web/servletresult.html" http://mmsviaweb.net.vodafoneomnitel.it/WebComposer/web/elaborapop.jsp | grep -o -E '"s*(.*)>(.*)"' > out

sed -n '2p' out > out1

sed -e s/"//g out1 > out2

sed -e "s/ /+/g" out2 > out3

url="http://mmsviaweb.net.vodafoneomnitel.it"

url1=$(cat out3)

url2=$(echo "$url$url1")

curl -b cookiev.txt $url2 > result

if grep -q "SendMessage=1" result;then

echo "$data: messaggio inviato" >> $FILELOG

else

echo "$data: il messaggio non e' stato inviato" >> $FILELOG

fi

rm out

rm cookiev.txt

rm text

rm encoded

rm result

exit 0

Nella fattispecie, ho creato il file urlencoding.sed per la codifica del testo relativo all'MMS, il cui contenuto è il seguente:

s/%/%25/g
s/ /%20/g
s/ /%09/g
s/!/%21/g
s/"/%22/g
s/#/%23/g
s/$/%24/g
s/&/%26/g
s/'''/%27/g
s/(/%28/g
s/)/%29/g
s/*/%2a/g
s/+/%2b/g
s/,/%2c/g
s/-/%2d/g
s/./%2e/g
s///%2f/g
s/:/%3a/g
s/;/%3b/g
s//%3e/g
s/?/%3f/g
s/@/%40/g
s/[/%5b/g
s//%5c/g
s/]/%5d/g
s/^/%5e/g
s/_/%5f/g
s/`/%60/g
s/{/%7b/g
s/|/%7c/g
s/}/%7d/g
s/~/%7e/g
s/      /%09/g

Ho voluto avvalermi di sed per omogeneità, ciò non significa che tale operazione non sia fattibile attraverso linguaggi di scripting esterni (ad esempio perl).

Inoltre, mediante le seguenti righe di codice:

if grep -q "SendMessage=1" result;then

echo "$data: messaggio inviato" >> $FILELOG

else

echo "$data: il messaggio non e' stato inviato" >> $FILELOG

fi

ho previsto dei controlli (molto basilari) relativi all'esito dell'operazione di inoltro degli MMS, il cui risultato verrà salvato sul file di log (con data e ora).

Qualunque suggerimento per estendere e/o migliorare lo script rimane comunque il benvenuto.

A presto.

22/11/2011

Reverse engineering sul servizio MMS via Web di Vodafone.it

Ormai da qualche tempo il servizio MMS via Web di Vodafone.it è stato sospeso. Ne è la riprova il fatto che sul sito non esiste più il link che ci consentiva di accedere all'interfaccia per l'invio degli MMS.

Nonostante ciò non mi sono dato per vinto ed ho iniziato ad esaminare il file VodafoneMMS.py di MoioSMS. Grazie a questa analisi ho individuato la URL che identifica l'interfaccia per l'invio degli MMS, ovvero:

http://mmsviaweb.net.vodafoneomnitel.it/WebComposer/web/mms.jsp

Inolte, per poter visualizzare tale pagina è necessario che prima vi logghiate sul sito della Vodafone, in modo da salvare in un cookie l'ID della sessione (JSESSIONID).

 

mms.jpg

Per quanto mi riguarda, però, il problema non è stato risolto. Infatti utilizzavo tale servizio per monitorare alcuni server (gli alert mi arrivavano direttamente sul telefonino sottoforma di MMS). Il client che mi permetteva di inviare i messaggi da bash era MoioSMS (come avrete certamente intuito), progetto open source realizzato da Silvio Moioli e non più mantenuto. Fatto sta che da qualche settimana gli alert hanno cessato di arrivare sul mio telefono cellulare, indi per cui ho deciso di realizzare uno script che svolge le stesse funzioni del client menzionato in precedenza.

Ecco lo script:

#!/bin/bash

echo "Inserisci il destinatario:"

read destinatario

echo "Inserisci l'oggetto del messaggio:"

read oggetto

echo "Inserisci il testo del messaggio:"

read testo

echo "$testo" > text

sed -e "s/ /%20/g"  text > encoded

enc=$(cat encoded)

curl -c cookiev.txt -F "username=vostrousername" -F "password=vostrapassword" https://www.vodafone.it/190/trilogy/jsp/login.do 2&>1
curl -b cookiev.txt --data "recipient=$destinatario&subjecttosend=$oggetto&SmilName=&TextName=$enc&ImageName=&AudioName=&nextPage=/web/servletresult.html" http://mmsvi
aweb.net.vodafoneomnitel.it/WebComposer/web/elaborapop.jsp | grep -o -E '"s*(.*)>(.*)"' > out

sed -n '2p' out > out1

sed -e s/"//g out1 > out2

sed -e "s/ /+/g" out2 > out3

url="http://mmsviaweb.net.vodafoneomnitel.it"

url1=$(cat out3)

url2=$(echo "$url$url1")

curl -b cookiev.txt $url2 2&>1

rm out*

rm cookiev.txt

rm text

rm encoded

exit 0

Come potete notare lo script prevede un minimo di interattività, ovvero richiede l'inserimento del numero del destinatario (munito di prefisso +39), l'oggetto del messaggio ed il testo.

Affinchè il messaggio possa essere inviato correttamente, è necessario che il testo venga sottoposto ad url-encoding. Inoltre, poichè trattasi di uno script versione alfa, ho previsto l'url-encoding solo per gli spazi. La riga di codice che svolge tale funzione è la seguente:

sed -e "s/ /%20/g"  text > encoded

A questo punto, grazie a cURL ho proceduto con l'invio delle credenziali per il login sul sito della Vodafone:

curl -c cookiev.txt -F "username=vostrousername" -F "password=vostrapassword" https://www.vodafone.it/190/trilogy/jsp/login.do 2&>1

Una volta loggato (e salvate le info necessarie all'interno di un apposito cookie), ho inoltrato l'MMS vero e proprio:

curl -b cookiev.txt --data "recipient=$destinatario&subjecttosend=$oggetto&SmilName=&TextName=$enc&ImageName=&AudioName=&nextPage=/web/servletresult.html" http://mmsviaweb.net.vodafoneomnitel.it/WebComposer/web/elaborapop.jsp | grep -o -E '"s*(.*)>(.*)"' > out

E qui viene il bello. Infatti cURL non supporta javascript, quindi ogni qualvolta cercavo di inviare un MMS mi beccavo una pagina Web del tipo:

<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved temporarily.</p>
<p>It's now at <a href="/WebComposer/web/invia.jsp?SmilName=x1321909087221&recipient=345*******&subjecttosend=prova">/WebComposer/web/invia.jsp?SmilName=x1321909087221&recipient=345*******&subjecttosend=prova</a>.</p>
</body></html>

ovvero un fantastico redirect HTTP.

Bhè, alla fine non si è rivelato essere un ostacolo insormontabile, è bastato infatti dare in pasto la pagina precedente a grep, in modo da estrapolare il contenuto delle virgolette ("") mediante regex:

grep -o -E '"s*(.*)>(.*)"' > out

Il file out aveva il seguente contenuto:

"#FFFFFF"
"/WebComposer/web/invia.jsp?SmilName=x1321909004082&recipient= 39345*******&subjecttosend=prova"

Fortunatamente sed è venuto nuovamente in mio aiuto:

sed -n '2p' out > out1

sed -e s/"//g out1 > out2

sed -e "s/ /+/g" out2 > out3

Ovvero ho rispettivamente:

1) ricavato la seconda riga del file out, per poi inserirla in out1;

2) rimosso le virgolette;

3) sostituito l'unico spazio vuoto con il carattere + (per il prefisso internazionale).

A formattazione dei dati completata, ho eseguito l'invio definitivo dell'MMS:

curl -b cookiev.txt $url2 2&>1

dove $url2 non è altro che la concatenazione tra le variabili stringa $url ed $url1:

url="http://mmsviaweb.net.vodafoneomnitel.it"

url1=$(cat out3)

url2=$(echo "$url$url1")

Infine, ho rimosso tutti i file temporanei generati durante l'esecuzione dello script.

Per poter eseguire lo script dovete salvarlo in un file testuale, chiamandolo, ad esempio, autovodafone:

nightfly@nightbox:~$ sudo nano autovodafone

Rendete eseguibile il file appena creato:

nightfly@nightbox:~$ sudo chmod +x autovodafone

Generate un file di log (vuoto) nella directory /var/log:

nightfly@nightbox:/var/log$ sudo touch autovodafone.log

Ed avete finito.

Adesso abbiamo il nostro piccolo client bash per l'invio degli MMS Vodafone.

A presto.

PS: tempo permettendo estenderò lo script, realizzando l'URL-encoding di tutti i caratteri speciali e procedendo con l'implementazione di alcuni meccanismi di controllo per identificare l'esito dell'invio.

20/11/2011

Eclipse Galileo ed il plugin Axis2 code generator

Stamattina ho provato ad installare il plugin Axis2 code generator 1.6.1 sul mio Eclipse Galileo. Peccato che ad installazione completata, accedendo al wizard di eclipse non era presente alcuna voce Axis 2. Cercando un po' sul Web ho trovato questo 3d:

http://stackoverflow.com/questions/8075585/not-able-to-se...

in cui si afferma che sia la versione 1.6.1 che la versione 1.4.* sono bacate e quindi funzionano male (o non funzionano del tutto).

axis2.jpg

Proprio per tale motivo ho scaricato la versione 1.7.0 del plugin in questione, direttamente da questo link:

https://builds.apache.org/job/Axis2/lastStableBuild/org.a...

Copiate il *.jar all'interno della directory dropin, riavviate eclipse e tutto funzionerà alla perfezione.

A presto.

PS: la 1.7.0 è una nightly release (versione di test), quindi se qualcosa non dovesse funzionare alla perfezione non preoccupatevi più di tanto.

11/11/2011

Backup di un sito Web mediante wget

Qualche giorno fa mi è capitato di dover effettuare il backup di un sito Web senza conoscere le credenziali FTP. Fortunatamente si trattava di un sito sprovvisto di codice lato server, quindi per me è stato piuttosto semplice salvarne una copia in locale.

wget,web,dump,backup,client web,server web,ftp

Per fare tale operazione ho utilizzato il mitico wget, ed in particolare il comando:

nightfly@nightbox:~$ wget -r www.siteexample.it

Tutto il contenuto del sito è stato automaticamente salvato nella directory www.siteexample.it.

Devo ammettere però che ho avuto un po' di fortuna. Infatti, non tutti i server Web consentono liberamente il dump dei loro siti (il termine phishing vi dice qualcosa?). Proprio per impedire tale pratica, molto spesso viene implementato un meccanismo di protezione basato sul riconoscimento del client Web: nel caso in cui il server si accorgesse che è wget a richiedere le pagine del sito, risponderà picche.

Tale controllo risulta comunque facilmente aggirabile. Infatti wget consente lo spoofing del client, che può essere impostato manualmente digitando:

nightfly@nightbox:~$ wget -r -U "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" www.siteexample.it

Invece, nel caso in cui i controlli si basassero anche sui tempi che intercorrono tra la visualizzazione di una pagina e quella successiva, oppure sulla velocità di download delle stesse, basterà utilizzare correttamente le flag --wait e --limit-rate:

nightfly@nightbox:~$ wget --wait=30 --limit-rate=10K -r -U "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" www.siteexample.it

Ed il backup del sito è pronto.

A presto.

09/11/2011

Script per il forward automatico della porta SSH sul router Cisco 837

La IOS C837-K9O3Y6-M sviluppata per il router Cisco 837 ha un bug, ovvero è possibile che dopo qualche reload si "dimentichi" di una o più PAT translations che riguardano porte più alte delle well-known (per intenderci, superiori alla 1023).

bug

Nel mio caso, il problema ha iniziato a verificarsi da quando ho deciso di mettere in ascolto SSH su una porta non standard, in modo da risparmiarmi i tentativi di attacco lanciati dagli script kiddie di turno.

Inoltre, per motivi di sicurezza, ho consentito l'accesso via SSH al router solo dagli host della LAN, quindi, nel caso in cui dovessi accedere alla sua configurazione, atterro sul server e da lì mi collego al router.

Ovviamente, se la porta SSH non è forwardata non posso atterrare sul server, dunque l'unica soluzione praticabile consiste nell'andare fisicamente dal cliente e ricreare la regola per il PAT.

E qui viene il bello: poichè mi sono stancato di dover perdere almeno un'ora per andare dal cliente, riconfigurare il tutto e tornarmene a casa, ho deciso di creare il seguente script, il quale si collega al router tre volte al giorno e ricrea la regola per l'SSH.

Ecco lo script:

#!/usr/bin/expect

set password1 "<password1>"
set password2 "<password2>"

spawn ssh -l <username> <IP del router>
expect "*?assword:*"
send "$password1r"
expect ">"
send "enar"
expect "Password:"
send "$password2r"
expect "#"
send "conf tr"
expect "(config)#"
send "no ip nat inside source static tcp <ip> <porta> interface Dialer0 <porta>r"
expect "(config)#"
send "ip nat inside source static tcp <ip> <porta> interface Dialer0 <porta>r"
expect "(config)#"
send "exitr"
expect "#"
send "copy run startr"
expect "?"
send "r"
expect "#"
send "exitr"
expect eof

Come al solito, mancano i backslash prima della r perchè myblog li filtra.

Una volta che avete creato lo script, convertitelo in eseguibile lanciando il comando:

nightfly@nightbox:~$ sudo chmod +x ssh_autoforward

e salvatelo nella directory /usr/bin:

nightfly@nightbox:~$ sudo mv ssh_autoforward /usr/bin

A questo punto potete creare la regola per cron, in modo da schedulare l'esecuzione dello script alle 6, alle 12 ed alle 18:

nightfly@nightbox:~$ sudo nano /etc/crontab

00 06,12,18   * * *     root          ssh_autoforward

Riavviamo cron:

nightfly@nightbox:~$ sudo service cron restart

ed abbiamo finito.

A presto.

PS: non preoccupatevi se lo script entra in esecuzione mentre siete loggati sul server: la regola per il forward dell'SSH non verrà rimossa poichè la state già utilizzando, quindi niente perdita di connessione.

08/11/2011

Abilitare SSH sul router Cisco 827v4

Come molti di voi già sapranno, telnet è un protocollo ormai obsoleto ed anche piuttosto insicuro, in quanto non cifra il flusso di dati. Proprio per questo motivo, ho deciso di abilitare SSH sul mio piccolo home router, dato che l'827 (a differenza del SOHO 77) lo supporta.

SSH, login local, username, password, telnet, cisco, SOHO 77, 827v4, vtyLogghiamoci sul router (via telnet o console), entriamo in modalità enable e successivamente digitiamo conf t:

NightRouter>ena
Password:
NightRouter#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
NightRouter(config)#

A questo punto, possiamo procedere con la definizione del dominio, digitando:

NightRouter(config)#ip domain name <nomedominio>

Il dominio è necessario per la creazione della coppia di chiavi RSA pubblica/privata che verranno utilizzate da SSH. Per generarle basta lanciare il comando:

NightRouter(config)#crypto key generate rsa

A procedura completata, possiamo settare i parametri relativi ad SSH, quali l'idle timeout ed il numero di tentativi di login errati consentiti:

NightRouter(config)#ip ssh time-out <secondi>

NightRouter(config)#ip ssh authentication-retries <numero tentativi>

I valori consentiti sono rispettivamente da 1 a 120 per l'idle e da 1 a 5 per i tentativi di login errati.

Definiamo adesso un utente locale, al quale verrà dato accesso al router via Secure SHell:

NightRouter(config)#username <username> password <password>

ed infine modifichiamo i perametri relativi alle vty, digitando quanto segue:

NightRouter(config)#line vty 0 4
NightRouter(config-line)#login local
NightRouter(config-line)#transport input ssh

Salviamo la configurazione con un copy run start:

NightRouter#copy run start

ed abbiamo finito.

A presto.

07/11/2011

Nomenclatura delle IOS Cisco

Per tutti coloro che fossero alle prese con l'upgrade di una qualche IOS e non sapessero come funziona la complicatissima nomenclatura utilizzata da Cisco, ecco un documento riassuntivo che vi tornerà sicuramente utile.

A presto.

03/11/2011

Cisco 827 is up and running

Finalmente, dopo tanto tribolare, il mio Cisco 827 ha iniziato a fare il suo sporco lavoro. Per rendere il tutto un po' più stabile e robusto, ho aggiunto un banco di RAM da 32 MB (in modo da non soffocarlo con le NAT translations) ed ho aggiornato la IOS, passando dalla c827v-y6-mz.121-1.XB (una EARLY DEPLOYMENT che non conosce nemmeno il significato di PPPoE) alla c820-k9osy6-mz.123-5.

Ecco lo sh ver:

NightRouter#sh ver
Cisco Internetwork Operating System Software
IOS (tm) C820 Software (C820-K9OSY6-M), Version 12.3(5), RELEASE SOFTWARE (fc1)
Copyright (c) 1986-2003 by cisco Systems, Inc.
Compiled Tue 28-Oct-03 10:31 by kellythw
Image text-base: 0x80013148, data-base: 0x80A9890C

ROM: System Bootstrap, Version 12.1(1r)XB1, RELEASE SOFTWARE (fc1)

NightRouter uptime is 20 minutes
System returned to ROM by power-on
System restarted at 18:03:31 UTC Thu Nov 3 2011
System image file is "flash:c820-k9osy6-mz.123-5.bin"


This product contains cryptographic features and is subject to United
States and local country laws governing import, export, transfer and
use. Delivery of Cisco cryptographic products does not imply
third-party authority to import, export, distribute or use encryption.
Importers, exporters, distributors and users are responsible for
compliance with U.S. and local country laws. By using this product you
agree to comply with applicable laws and regulations. If you are unable
to comply with U.S. and local laws, return this product immediately.

A summary of U.S. laws governing Cisco cryptographic products may be found at:
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html

If you require further assistance please contact us by sending email to
export@cisco.com.

CISCO C827 (MPC855T) processor (revision 0x501) with 31744K/1024K bytes of memory.
Processor board ID JAD04330G9Y (2953292797), with hardware revision 0000
CPU rev number 5
Bridging software.
1 Ethernet/IEEE 802.3 interface(s)
1 ATM network interface(s)
128K bytes of non-volatile configuration memory.
8192K bytes of processor board System flash (Read/Write)
2048K bytes of processor board Web flash (Read/Write)

Configuration register is 0x2102

Adesso il mio SOHO77 può andare meritatamente in pensione.

A presto.

Tutti gli articoli