29/07/2011
Aumentare il livello di privacy offerto da squid
In questo post abbiamo visto come impedire a squid di rivelare ai siti che stiamo visitando l'IP privato della nostra workstation. Adesso vi illustrerò alcune dritte per aumentare ulteriormente il livello di privacy offerto dal nostro proxy.
Per prima cosa, dobbiamo evitare che il sito Web di destinazione si accorga che stiamo navigando mediante proxy. Per fare ciò è sufficiente inserire all'interno del file /etc/squid/squid.conf la seguente direttiva:
header_access Via deny all
e successivamente lanciare il comando
nightfly@nightbox:~$ sudo squid -k reconfigure
Successivamente, impediamo agli utenti della nosra LAN di visualizzare la versione di squid che stiamo utilizzando nel caso in cui quest'ultimo restituisca una pagina di errore:
nightfly@nightbox:~ sudo nano /etc/squid/squid.conf
e decommentiamo la stringa # httpd_suppress_version_string off, settandola su on:
httpd_suppress_version_string on
Infine, verifichiamo il livello di privacy offerto dal nostro proxy contattando il sito http://checker.samair.ru/. Se il risultato del test è high-anonymous (elite) proxy significa che il nostro lavoro si è concluso nel migliore dei modi.
A presto.
12:01
Scritto da: nazarenolatella
in Sicurezza | Link permanente | Commenti (0)
|
Segnala
| Tag: squid, proxy, privacy, version | OKNOtizie |
Facebook
Impedire a Squid di rivelare il nostro IP privato ai siti Web visitati
Ieri un collega mi ha fatto notare che visitando il sito www.ripe.net, in alto a destra veniva visualizzato il suo IP pubblico (che è cosa buona e giusta) ma anche il suo indirizzo IP privato 172.16.*.*.
Come prima cosa gli ho suggerito di levare il proxy, in quanto ho subito sospettato che era li che stava il problema. Alzo dunque una regola temporanea sul firewall per consentire al mio collega la navigazione diretta sul Web e successivamente lo faccio ricollegare al sito precedentemente citato. A quel punto l'unico indirizzo IP visualizzato era quello pubblico.
Cercando un po sul Web mi sono accorto che esiste un campo nell'header HTTP, chiamato X_FORWARDED_FOR, il quale specifica tutti gli IP che sono stati contattati prima che la richiesta arrivi al server Web di destinazione. Ovviamente, tra questi indirizzi, c'è anche l'IP della macchina che ha generato la request, nella fattispecie quello privato.
Spulcio quindi la configurazione di squid ed aggiungo la seguente direttiva:
header_access X-Forwarded-For deny all
che è molto meglio di:
X-Forwarded-For off
in quanto, a differenza di quest'ultima, consente di abilitare tale opzione solo per alcune macchine in caso di necessità (creando delle opportune ACL).
Lancio uno squid -k reconfigure e mi ricollego al sito www.ripe.net tramite proxy. Adesso l'unico IP visualizzato è quello pubblico.
Spero di avervi fornito un'utile dritta.
A presto.
11:47
Scritto da: nazarenolatella
in Sicurezza | Link permanente | Commenti (0)
|
Segnala
| OKNOtizie |
Facebook
25/07/2011
Script per il backup giornaliero di un database remoto
Visto che la ridondanza non è mai troppa (Murphy vi dice qualcosa?), ho pensato di realizzare uno script per effettuare il backup di un database hostato su un server remoto.
Ecco lo script (basato su expect):
#!/usr/bin/expect -f
set date [exec date +%d_%m_%y]
set password1 "<pass1>"
set password2 "<pass2>"
set database "<nomedb>"
spawn ssh user@hostname
expect "*?assword:*"
send "$passwordr"
send "r"
expect ":~$"
send "mysqldump $database -u root -ppassvostrodb > $database_$date.plr"
send "$database_$date.pl user@hostname:/home/userr"
expect "*?assword:*"
send "$password2r"
send "r"
expect ":~$"
send "rm database_*r"
expect eof
Lo script in questione si collega via SSH al server remoto, esegue un dump del database per poi copiarlo tramite SCP sul mio server.
Affinchè tale script venga eseguito giornalmente (per la precisione ogni sera alle 22) è necessario editare il file /etc/crontab aggiungendo la seguente direttiva:
00 22 * * * user cd /home/user/ && ./backupremotedb > /dev/null 2>&1
Per ulteriori info contattatemi.
A presto.
12:39
Scritto da: nazarenolatella
in SO: Linux | Link permanente | Commenti (0)
|
Segnala
| Tag: expect, shell, bash, linux, dump, mysql, ssh, scp | OKNOtizie |
Facebook
18/07/2011
Script per l'individuazione di eventuali rootkit sul nostro server
Ho pensato di realizzare uno script, basato sul tool chkrootkit, in grado di automatizzare la ricerca di eventuali rootkit presenti sul mio server, con successivo invio di un report via email.
Per prima cosa occorre installare il suddetto tool, mediante il comando:
nightfly@nightbox:~$ sudo apt-get install chkrootkit
Una volta fatto ciò, è necessario creare il file rootkitcheck il cui contenuto dovrà essere il seguente:
#!/bin/bash
destinatario= vostro.indirizzo@email.it
logfile=/var/log/rootkit.log
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ];then
ERRORE1="Errore 1: Devi essere root per eseguire lo script"
echo $ERRORE1
echo "$(date) $ERRORE1" >> $logfile
exit 1
fi
chkrootkit > temp_rootkit;
cat temp_rootkit | mail -iv -s "HOME: Esito scansione rootkit" $destinatario;
rm temp_rootkit;
exit 0
Rendiamo eseguibile il file appena creato mediante il comando:
nightfly@nightbox:~$ sudo chmod +x rootkitcheck
ed infine aggiungiamo la seguente stringa a cron, in modo da effettuare la scansione ogni lunedì:
00 00 * * 1 root cd /home/nightfly/ && ./rootkitcheck > /dev/null 2>&1
Ed abbiamo finito.
A presto.
11:39
Scritto da: nazarenolatella
in SO: Linux | Link permanente | Commenti (0)
|
Segnala
| OKNOtizie |
Facebook
11/07/2011
Configurare un router Cisco SOHO per PPPoE
Dopo una breve (ma necessaria) pausa ho deciso di riprendere la pubblicazione sul blog, trattando argomenti di grande interesse che durante questo lasso di tempo ho potuto approfondire.
Uno di questi riguarda la configurazione di un router Cisco SOHO, nella fattispecie il 77, per il PPPoE (Point-to-Point Protocol over Ethernet). Infatti, da qualche mese, Telecom sta convertendo le proprie linee da ATM a FullIP, costringendo gli utenti ad utilizzare la configurazione PPPoE, l'unica compatibile con il FullIP.
Ma quali sono i vantaggi di una rete FullIP? Beh, uno su tutti è sicuramente la possibilità di ridurre l'overhead, facendo aumentare di conseguenza la banda disponibile all'utente.
Dopo questa breve introduzione passiamo alla configurazione vera a propria.
La prima cosa da fare è munirci di un cavo console (quello che esce in dotazione con il dispositivo - Vedi foto) e collegarlo alla porta com del nostro pc ed alla porta console (di colore blu) del router. A collegamento avvenuto apriamo hyperterminal (Start -> Programmi -> Accessori -> Comunicazioni -> Hyper Terminal) associamo un nome alla connessione (nella finestra di popup che appare dopo l'avvio del programma) e premiamo su "OK". Adesso selezioniamo la porta com del pc alla quale è collegato il cavo (nel mio caso COM1) clickiamo nuovamente su "OK" ed entreremo all'interno del menu di configurazione della porta precedentemente selezionata.
Scegliamo i seguenti parametri:
1) Bit per secondo: 9600
2) Bit di dati: 8
3) Parità: nessuno
4) Bit di stop: 1
5) Controllo del flusso: Hardware
Bene adesso selezioniamo "OK" e ci apparirà una schermata bianca (non vi preoccupate è perfettamente normale). Accendiamo quindi il router (dal pulsante opportuno presente nel retro del dispositivo) e vedremo apparire come per magia l'output relativo alla sequenza di bootstrap. Terminata tale operazione ci apparira il propt:
Router>
Entriamo in modalità enable che ci permette di accedere ai comandi di configurazione del router semplicemente digitando ena (oppure enable, è indifferente):
Router > ena
Adesso il prompt ci apparirà così:
Router#
Entriamo nel menù di configurazione vero e proprio digitando conf t (oppure configure terminal):
Router# conf t
Il prompt ci apparirà nel modo seguente:
Router(config)#
Impostiamo il nome del router utilizzando il comando hostname. Ad esempio:
Router(config)# hostname NightRouter
Il prompt cambierà nuovamente:
NightRouter(config)#
Definiamo password sia per la connessione via console sia per l'accesso tramite telnet, scrivendo rispettivamente:
NightRouter(config)# line console 0
NightRouter(config-line)# password <vostrapass>
NightRouter(config-line)# login
mentre per telnet:
NightRouter(config-line)# line vty 0 4
NightRouter(config-line)# password <vostrapass>
NightRouter(config-line)# login
Bene, adesso configuriamo la password per entrare in modalità enable:
NightRouter(config)# enable password <vostrapass>
NightRouter(config)# enable secret <vostrapass>
NightRouter(config)# service password-encryption
NightRouter(config)# exit
NightRouter#
Il comando service password-encryption serve a calcolare il digest md5 di tutte le password presenti all'interno del file di configurazione, in modo tale che un semplice show run non le mostri in chiaro.
Fatto ciò possiamo dedicarci alla configurazione delle varie interfacce. Cominciamo dall'interfaccia Ethernet:
NightRouter(config)# interface eth0
Associamo indirizzo ip e subnet mask alla stessa:
NightRouter(config-if)# ip address 192.168.1.0 255.255.255.0
"Accendiamo" l'interfaccia:
NightRouter(config-if)# no shutdown
Identifichiamo l'interfaccia interna per il NAT:
NightRouter(config-if)# ip nat inside
Usciamo dalla modalità di configurazione della porta Ethernet
NightRouter(config-if)# exit
NightRouter(config)#
Configuriamo ora l'interfaccia ATM:
NightRouter(config)# interface ATM0
NightRouter(config-if)# pvc 8/35
Dopo aver digitato questo comando, il prompt ci apparirà nel modo seguente:
NightRouter(config-atm-vc)#
Settiamo il protocollo PPPoE:
NightRouter(config-atm-vc)# pppoe-client dial-pool-number 1
Configuriamo il Dialer:
NightRouter(config)# int Dialer0
Poichè spesso si utilizza ip pubblico dinamico assegnato direttamente dall'ISP occorre digitare:
NightRouter(config-if)# ip address negotiated
NB: Se si utilizza ip pubblico statico bisogna associarlo all'interfaccia attraverso il comando ip adcdress <indirizzo> <subnet mask>
Identifichiamo l'interfaccia esterna per il NAT:
NightRouter(config-if)# ip nat outside
Definiamo il protocollo di incapsulamento:
NightRouter(config-if)# encapsulation ppp
Specifichiamo quale dialer pool utilizzare:
NightRouter(config-if)# dialer pool 1
Definiamo adesso i parametri (userid e pass) per collegarsi all'ISP:
NightRouter(config-if)# ppp chap hostname <vostrauserid>
NightRouter(config-if)# ppp chap password <vostrapassword>
Se il vostro provider utilizza il PAP anzichè il CHAP occorre digitare:
NightRouter(config-if)# ppp pap sent-username <vostrauserid> password <vostrapassword>
Ora, poichè si sta utilizzando il protocollo PPPoE, occorre definire la dimensione dell'MTU, che nella fattispecie è pari a 1492 byte (mentre per l'ATM è di 1500 byte).
NightRouter(config-if)# ip mtu 1492
NightRouter(config-if)# exit
NightRouter(config)#
Non abbiamo ancora finito. Poichè il PPPoE supporta una dimensione massima dei segmenti TCP pari a 1452, occorre settare il seguente paramentro nell'ambito dell'interfaccia ethernet0 (altrimenti la navigazione sul Web ne risentirà parecchio):
NightRouter(config)# interface eth0
NightRouter(config-if)# ip tcp adjust-mss 1452
NightRouter(config-if)# exit
NightRouter(config)#
Adesso possiamo configurare i DNS che il router utilizzerà per la risoluzione degli indirizzi:
NightRouter(config)# ip domain-lookup
NightRouter(config)# ip name-server 151.99.125.2
NightRouter(config)# ip name-server 151.99.125.3
Configuriamo il NAT:
NightRouter(config)# ip nat inside source list 1 interface dialer 0 overload
Definiamo una default route:
NightRouter(config)# ip route 0.0.0.0 0.0.0.0 dialer0
Definiamo la policy per l'access list 1:
NightRouter(config)# access-list 1 permit 192.168.1.0 0.0.0.255
NB: tale access list permette a tutti gli host della net locale di uscire verso la rete esterna (Internet). Il paramentro 0.0.0.255 è detto wildcard mask ed effettua un check solo sugli ultimi 4 bit degli indirizzi ip locali.
Adesso non ci resta che bloccare l'accesso Telnet dall'esterno (ovvero da Internet) ed abilitare i log:
NightRouter(config)# line vty 0 4
NightRouter(config-line)# access-class 1 in
NightRouter(config-line)# exit
NightRouter(config)# service timestamps log datetime localtime show-timezone msec
NightRouter(config)# service timestamps debug datetime localtime show-timezone msec
NightRouter(config)# service sequence-numbers
NightRouter(config)# logging queue-limit 10000
NightRouter(config)# logging buffered 1000000 notifications
NightRouter(config)# logging console critical
NightRouter(config)# logging monitor debug
NightRouter(config)# logging history notifications
NightRouter(config)# logging buffered 150000
NightRouter(config)# logging count
NightRouter(config)# logging exception 100000
NB: per visualizzare i log basta lanciare il comando show log (dalla modalità enable).
Ah, quasi dimenticavo, per motivi di sicurezza conviene disabilitare il server HTTP interno:
NightRouter(config)# no ip http
Adesso salviamo quanto fatto fino ad ora digitando:
NightRouter# copy run start
Ecco completata la configurazione del nostro Router. A presto :)
PS: Per utilizzare alcuni programmi, quali ad esempio client p2p, è necessario impostare correttamente il port forwarding. Un esempio di rule è la seguente (porta tcp di aMule):
NightRouter(config)# ip nat inside source static tcp 192.168.1.4 4652 interface dialer0 4652
Dove 192.168.1.4 è l'host su cui è in esecuzione aMule, tcp il protocollo utilizzato e 4652 il numero della porta usata per la connessione al server p2p.
16:09
Scritto da: nazarenolatella
in Networking | Link permanente | Commenti (3)
|
Segnala
| Tag: cisco, soho77, 827, pppoe | OKNOtizie |
Facebook
04/07/2011
Alternativa Javascript al vertical marquee
Recentemente ho controllato il codice HTML di alcuni siti Web che ho realizzato, ponendo particolare attenzione sulla validazione w3c.
Poichè in una di queste pagine era presente il tag <marquee> (piuttosto datato ed incompatibile con molti browser), non è stato possibile validarla. Quindi ho deciso di sostituire il tag in questione con un piccolo script client side che svolgesse le stesse funzioni del vertical marquee.
Per prima cosa ho creato un file *.js, chiamato marquee.js, il cui contenuto è il seguente:
/* This script and many more are available free online at
The JavaScript Source :: http://javascript.internet.com
Created by: Mike Hudson :: http://www.afrozeus.com */
/*
To change the values in the setupLinks function below.
You will notice there are two arrays for each of Titles and
Links. Currently there are 3 items in each array, but you can easily
expand on that by adding to the array. For example, to add a 4th record,
you would simply include the following 2 lines at the end of setupLinks
function:
arrLinks[3] = "someURL.htm";
arrTitles[3] = "Some title";
*/
function setupLinks() {
arrLinks[0] = "http://forums.webdeveloper.com/forumdisplay.php?s=&forumid=3";
arrTitles[0] = "If you have any questions, be sure to visit our forums.";
arrLinks[1] = "http://javascript.internet.com/new/";
arrTitles[1] = "Don't miss anything - check our new additions.";
arrLinks[2] = "http://www.webreference.com/programming/javascript/diaries/";
arrTitles[2] = "Want to learn JavaScript? Start at the beginning.";
}
var m_iInterval;
var m_Height;
//window.onload = wl;
var iScroll=0;
var arrLinks;
var arrTitles;
var arrCursor = 0;
var arrMax;
window.onload=wl;
function wl() {
m_iInterval = setInterval(ontimer, 10);
var base = document.getElementById("jump_base");
m_Height = base.offsetHeight;
var divi = parseInt(m_Height/5);
m_Height = divi*5;
var td1 = document.getElementById("td1");
var td2 = document.getElementById("td2");
var td3 = document.getElementById("td3");
td1.height = m_Height-5;
td2.height = m_Height-5;
td3.height = m_Height-5;
arrLinks = new Array();
arrTitles = new Array();
setupLinks();
arrMax = arrLinks.length-1;
setLink();
}
function setLink() {
var ilink = document.getElementById("jump_link");
ilink.innerHTML = arrTitles[arrCursor];
ilink.href = arrLinks[arrCursor];
}
function ontimer() {
var base = document.getElementById("jump_base");
iScroll+=5;
if (iScroll>(m_Height*2)) {
iScroll=0;
arrCursor++;
if (arrCursor>arrMax)
arrCursor=0;
setLink();
}
if (iScroll==m_Height) {
pause();
m_iInterval = setTimeout(resume, 4000);
}
base.scrollTop=iScroll;
}
function pause() {
clearInterval(m_iInterval);
}
function resume() {
m_iInterval = setInterval(ontimer, 10);
}
Successivamente, ho aggiunto il seguente codice al foglio di stile:
#jump_base {
overflow-y:hidden;
width: 200px;
height: 100px;
border: 2px dotted #000099;
margin: auto;
padding: 0 10px 0 10px;
font-size: .9em;
font-family: Verdana, Arial, sans-serif;
}
#jump_base a {
color: #000099;
background-color: inherit;
}
.news {
background-color: #DDDDDD;
color: inherit;
}
Infine, nella pagina HTML ho digitato:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Vertical Scroll</title>
<script type="text/javascript" src="vertical.js"></script>
</head>
<body>
<div align="center">
<center>
<div id="jump_base" class="news" onmouseover="pause()" onmouseout="resume()">
<table class="news">
<tr>
<td id="td1"> </td></tr>
<tr><td id = "td2" valign="middle" align="center"><a id="jump_link" href="" target="_new"></a></td></tr>
<tr><td id="td3"> </td></tr>
</table>
</div>
<p><div align="center">
<font face="arial, helvetica" size"-2">Free JavaScripts provided<br>
by <a href="http://javascriptsource.com">The JavaScript Source</a></font>
</div><p>
</center>
</div>
</body>
</html>
Come avrete certamente notato, il codice riportato in questo post non è farina del mio sacco ma può tornarvi certamente utile.
Per eventuali chiarimenti e personalizzazioni del codice contattatemi.
A presto.
22:46
Scritto da: nazarenolatella
in Web Editing | Link permanente | Commenti (1)
|
Segnala
| Tag: html, xhtml, w3c, validazione, marquee, javascript | OKNOtizie |
Facebook
01/07/2011
Script bash per l'invio di notifiche tramite email
Poco tempo fa ho deciso di creare un piccolo script in grado di interrogare un database, salvare temporaneamente in un file la risposta alla query ed inviare una notifica via email all'indirizzo di posta specificato. Nella fattispecie, tale script ha come scopo principale quello di notificare le scadenze da saldare e quelle non rispettate.

Ma bando alle ciance ed ecco lo script:
#!/bin/bash
destinatario=vostro.indirizzo@email.it
logfile=/var/log/notifier.log
ROOT_UID=0
data=`date +%s` #lavoro con i timestamp per poter confrontare le date
if [ "$UID" -ne "$ROOT_UID" ];then
ERRORE1="Errore 1: Devi essere root per eseguire lo script"
echo $ERRORE1
echo "$(date) $ERRORE1" >> $logfile
exit 1
fi
mysql -u root -ppassword -D nomedb -e "SELECT * FROM scadenza;" >> scadenze
echo "Hai le seguenti scadenze da saldare: " > scadenze_imminenti;
echo "Hai le seguenti scadenze non saldate: " > scadenze_nonrispettate;
while read line
do
scad=`cat scadenze | grep - | awk '{print $2}'` #per individuare la data di scadenza.
for info in $scad
do
datascad=`date --utc --date "$info" +%s` #uso i timestamp per confrontare le date
if [ "$data" -le "$datascad" ];then
if [[ $line =~ $info ]];then
echo $line >> scadenze_imminenti
fi
fi
if [ "$data" -gt "$datascad" ];then
if [[ $line =~ $info ]];then
echo $line >> scadenze_nonrispettate
fi
fi
done
done < scadenze
if grep -q "-" scadenze_imminenti ;then
uniq scadenze_imminenti | mail -iv -s "Scadenze da saldare" $destinatario;
fi
if grep -q "-" scadenze_nonrispettate ;then
uniq scadenze_nonrispettate | mail -iv -s "Scadenze non saldate" $destinatario;
fi
rm scadenze
rm scadenze_imminenti
rm scadenze_nonrispettate
exit 0
Come è facile notare, viene fatto un confronto tra la data corrente e quella di ciascuna scadenza (sottoforma di UNIX timestamp). Nel caso in cui la data corrente sia antecedente o uguale a quelle delle scadenze, esse verranno salvate nel file scadenze_imminenti, il cui contenuto verrà successivamente inserito nel corpo di una email e spedito al destinatario.
Invece, se la data attuale è maggiore di quella della scadenza, quest'ultima verrà salvata nel file scadenze_nonrispettate, il cui contenuto verrà recapitato nella casella email del destinatario.
Per qualsiasi chiarimento contattatemi.
Bye.
17:54
Scritto da: nazarenolatella
in SO: Linux | Link permanente | Commenti (0)
|
Segnala
| Tag: bash, mail, email, mysql, query, script, scadenze, notifiche | OKNOtizie |
Facebook




















