3 581
contributi
(modificata compatibilità con box temporaneo, rimossa dalle guide da controllare) |
|||
(12 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 49: | Riga 56: | ||
</pre> | </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. | 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/> | ||
---- | ---- | ||
<br/> | <br/> | ||
Riga 67: | Riga 74: | ||
</pre> | </pre> | ||
Nel nostro database MySQL <code>ulogd</code> dovrebbero essere state registrate delle nuove entry. | Nel nostro database MySQL <code>ulogd</code> dovrebbero essere state registrate delle nuove entry. | ||
<br/> | <br/><br/> | ||
---- | ---- | ||
<br/> | <br/> | ||
Riga 75: | Riga 82: | ||
# iptables -A INPUT $FILTER -m mutiport -p tcp $MSPORTS -j ULOG –ulog-nlgroup 1 –ulog-prefix $PREFIX | # iptables -A INPUT $FILTER -m mutiport -p tcp $MSPORTS -j ULOG –ulog-nlgroup 1 –ulog-prefix $PREFIX | ||
</pre> | </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