3 581
contributi
(Nuova pagina: ==Introduzione== Lo scopo di questa guida è di mostrare come registrare le attività del firewall di Linux in un database MySQL.<br/> Il target <code>-j LOG</code> di iptables viene u...) |
(modificata compatibilità con box temporaneo, rimossa dalle guide da controllare) |
||
(17 versioni intermedie di 5 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Lenny}} | |||
{{Warningbox|La guida è in fase di verifica per il passaggio a '''ulogd2''', almeno per Debian [[Jessie]] e successive; leggere [[{{TALKPAGENAME}}|qui]] per maggiori chiarimenti.}} | |||
==Introduzione== | ==Introduzione== | ||
Lo scopo di questa guida è di mostrare come registrare le attività del firewall di Linux in un database MySQL.<br/> | Lo scopo di questa guida è di mostrare come registrare le attività del firewall di Linux in un database MySQL.<br/> | ||
Riga 7: | Riga 13: | ||
In pratica i log vengono gestiti da un apposito programma che è in grado di elaborarli in modi diversi, da file di testo a database MySQL, il tutto in modo nativo senza usare filtri o script in perl come capitava con il tradizionale target LOG. | In pratica i log vengono gestiti da un apposito programma che è in grado di elaborarli in modi diversi, da file di testo a database MySQL, il tutto in modo nativo senza usare filtri o script in perl come capitava con il tradizionale target LOG. | ||
==Installazione== | ==Installazione== | ||
L’installazione dei pacchetti necessari è | L’installazione dei pacchetti necessari è veloce e semplice come al solito in Debian: | ||
<pre> | <pre> | ||
# apt-get install ulogd ulogd-mysql | # apt-get install ulogd ulogd-mysql | ||
</pre> | </pre> | ||
==Configurazione== | ==Configurazione== | ||
Come prima cosa occorre creare un database vuoto, con gli opportuni privilegi, in cui registrare gli eventi <code>ulogd</code>. Potete creare il database utilizzando PhpMyAdmin o direttamente da linea di comando, in questo modo: | Come prima cosa occorre creare un database vuoto, con gli opportuni privilegi, in cui registrare gli eventi <code>ulogd</code>. Potete creare il database utilizzando PhpMyAdmin o direttamente da linea di comando, in questo modo: | ||
Riga 38: | Riga 45: | ||
db="ulogd" | db="ulogd" | ||
host="localhost" | host="localhost" | ||
<pre> | </pre> | ||
Arrivati a questo punto è sufficiente riavviare <code>ulogd</code>: | Arrivati a questo punto è sufficiente riavviare <code>ulogd</code>: | ||
<pre> | <pre> | ||
/etc/init.d/ulogd restart | /etc/init.d/ulogd restart | ||
</pre> | </pre> | ||
==Configurazione di iptables== | |||
Supponendo che il nostro PC abbia la scheda di rete <code>eth0</code> connessa con un modem ADSL, possiamo impostare la seguente regola di iptables con il target ULOG: | |||
<pre> | |||
# iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -o eth0 -j ULOG | |||
</pre> | |||
Tradotta in italiano la regola suona più o meno così: prendi tutto quello che proviene dalla LAN di classe C 192.168.1.0/24 e che esce dall’interfaccia eth0 verso Internet - e che quindi viene nattato -, e registralo su MySQL. | |||
<br/><br/> | |||
---- | |||
<br/> | |||
Un utilizzo leggermente più complesso potrebbe essere quello di richiedere al kernel di registrare tutti i pacchetti destinati per esempio all'indirizzo 8.8.8.8 (il server DNS di Google): | |||
<pre> | |||
# iptables -I OUTPUT -d 8.8.8.8 -j ULOG –ulog-nlgroup 1 –ulog-cprange 20 | |||
</pre> | |||
Con questa regola di <code>iptables</code> sono state usati due parametri nuovi: | |||
* <code>nlgroup</code> è il parametro del kernel che permette di specificare il <code>netlink group</code>. Usando differenti valori di <code>nlgroup numbers</code> possiamo avviare più di una istanza di <code>ulogd</code>, ciascuna in ascolto su un differente <code>netlink group</code>; | |||
* <code>cprange</code> specifica quanti bytes catturare di ciascun pacchetto, in modo simile al parametro <code>snap length (-s)</code> di <code>tcpdump</code>. Anziché catturare l’intero pacchetto possiamo catturarne solo i primi 20 bytes. | |||
Ora provochiamo la registrazione di un evento, effettuando ad esempio un ping verso l’host prescelto: | |||
<pre> | |||
# ping -c 5 8.8.8.8 | |||
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | |||
— 8.8.8.8 ping statistics — | |||
5 packets transmitted, 100% received, 0 packet loss, time 3999ms | |||
</pre> | |||
Nel nostro database MySQL <code>ulogd</code> dovrebbero essere state registrate delle nuove entry. | |||
<br/><br/> | |||
---- | |||
<br/> | |||
Come ultimo esempio, proviamo a catturare alcuni dei tentativi di intrusione o di semplice scansione più comuni che hanno come obiettivo le vulnerabilità di alcuni sistemi Windows. E' sufficiente impostare questa regola: | |||
<pre> | |||
# FILTER=”-i eth0″; MSPORTS=”–destination-ports 135,137,138,139,445,47,1723″ PREFIX=”ms_intrusion” | |||
# iptables -A INPUT $FILTER -m mutiport -p tcp $MSPORTS -j ULOG –ulog-nlgroup 1 –ulog-prefix $PREFIX | |||
</pre> | |||
Ad ogni tentetivo di scansione dovreste ritrovarvi nel vostro database MySQL delle entry marcate con il prefisso scelto, per una facile identificazione. | |||
==Lettura delle informazioni raccolte== | |||
Registrare i log di <code>iptables</code> in un database MySQL significa ritrovarsi dopo qualche tempo con le tabelle del database popolate di record in cui i dati relativi all’indirizzo IP sorgente sono memorizzati come numeri interi. Ad esempio: | |||
<pre> | |||
mysql> select Distinct(ip_saddr), tcp_dport from ulogd; | |||
+------------+-----------+ | |||
| ip_saddr | tcp_dport | | |||
+------------+-----------+ | |||
| 2537620586 | 445 | | |||
| 2537620586 | 139 | | |||
| 2537649241 | 445 | | |||
+------------+-----------+ | |||
3 rows in set (0.00 sec) | |||
</pre> | |||
Per poter interpretare i risultati è conveniente effettuare una conversione di questi indirizzi da interi alla classica forma "dotted quad".<br/> | |||
Lo script seguente in PHP effettua proprio questa conversione: | |||
<pre> | |||
<?php | |||
function int2ip($dec) | |||
{ | |||
// Necessario se dechex(ip sotto forma di intero) | |||
// è più grande di 7fffffff | |||
if($dec > 2147483648) | |||
{ | |||
$result = dechex($dec - 2147483648); | |||
$part1 = dechex($dec / 268435456); | |||
$part2 = substr($result,-7); | |||
$hex = $part1.str_pad($part2, 7, "0000000", STR_PAD_LEFT); | |||
} | |||
else | |||
{ | |||
$hex =dechex($dec); | |||
} | |||
// Spezza la cifra esadecimale in un quartetto di interi. | |||
$part1 = hexdec( substr($hex, 0, 2) ); | |||
$part2 = hexdec( substr($hex, 2, 2) ); | |||
$part3 = hexdec( substr($hex, 4, 2) ); | |||
$part4 = hexdec( substr($hex, 6, 2) ); | |||
// | |||
// Ricombina il quartetto di interi nel formato stringa | |||
// di un indirizzo ip. | |||
$ip = sprintf("%s.%s.%s.%s", $part1, $part2, $part3, $part4); | |||
return($ip); | |||
} | |||
$res_ip=int2ip($argv[1]); | |||
print $res_ip; | |||
?> | |||
</pre> | |||
Potete utilizzare lo script semplicemente da linea di comando: | |||
<pre> | |||
# php int2ip.php 2537649241 | |||
151.65.116.89 | |||
</pre> | |||
oppure inserire questo script in una pagina da raggiungere via browser, per visualizzare in formato HTML le entry del database <code>ulogd</code> e, magari, per introdurre anche funzioni di ricerca e di filtro. | |||
==Credits== | |||
Questa guida si basa anche su informazioni raccolte in questi siti: | |||
* http://www.wikipedia.org | |||
* http://www.voipandhack.it/ | |||
* http://ideafactory.it/ | |||
{{Autori | |||
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 15:23, 7 mar 2010 (CET) | |||
}} | |||
[[Categoria:Database server]] [[Categoria:Firewall]] |
contributi