Registrare i log di Iptables in MySQL: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
modificata compatibilità con box temporaneo, rimossa dalle guide da controllare
(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 è velcoe e semplice come al solito in Debian:
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]]
3 581

contributi

Menu di navigazione