Ya vimos en Snort. Enviado log a base datos mysql. la creación de una base de datos MySql para su uso con Snort.
Después de la compra de MySql por parte de Sun y, a su vez, de Sun por parte de Oracle, MySql pierde el estatus de Software Libre. Por ello, creo que es el momento de ir mirando otras opciones.
El uso se PostgreSQL con Snort bajo Windows prácticamente no está documentado, además, no se puede ejecutar directamente usando output database ya que no existe compilación Snort Windows que soporte dicha base de datos. Una solución es interponer ODBC (tampoco documentado correctamente). En en este caso, vamos a crear, para nuestra instalación de Snort, una base de datos PostgreSQL. Crearemos también todas las tablas necesarias para un correcto funcionamiento, permisos, etc, y volcaremos las alertas a través de ODBC.
Instalación PostgreSQL 8.4 para Windows.
Descargamos el instalador Windows para PostgreSQLdesde aquí: http://www.enterprisedb.com/products/pgdownload.do#windows
La instalación es muy básica, solo hay que tener en cuenta que tendremos que indicar una contraseña para el usuario y servicio postgres. cuando nos pida la instalación de Stack Builder, decimos que sí para, cuando llegue el momento, marcar la opción Database Driver – psqlODBC.
Una vez instalado, abrimos una consola SQL Shell (psql):
Al abrir la consola dejamos tal cual:
- Server
- Database
- Port
- Username
y en la contraseña para Username [postgres] ponemos la que indicamos en la instalación para servicio y usuario postgres.
Creacion de la base de datos snort.
Una vez hecho esto, creamos la base de datos, el usuario snort…
La \q es para salir de la shell.
Volvemos a entrar, pero ya a la base de datos creada snort con nuestro usuario snort creado.
Ahora tenemos que cargar el esquema de creación de tablas, etc, (tal como lo hicimos con MySql) que está ubicado, en nuestro caso, en c:\snort\schemas\create_postgresql
Lo hacemos desde un DOS shell de la forma:
psql -U «usuario» -d «base_datos» -f «archivo_esquema»
En nuestro caso:
Bien. Ya tenemos toda la estructura de nuestra base de datos snort en PostgreSQL.
Permisos de las tablas.
Ahora tenemos que asignar permisos con GRANT para SELECT, INSERT, UPDATE y DELETE para las diferentes tablas:
Para que os resulte más facil a la hora de copiar:
GRANT INSERT, SELECT, UPDATE ON TABLE data,detail,encoding,event,
icmphdr,iphdr,opt,reference,reference_system,
schema,sensor,sig_class,sig_reference,signature,tcphdr,udphdr TO snort;
GRANT USAGE,SELECT,UPDATE ON TABLE reference_ref_id_seq,
reference_system_ref_system_id_seq,sensor_sid_seq,
sig_class_sig_class_id_seq,signature_sig_id_seq, rtt to snort;
GRANT DELETE ON TABLE data,detail,encoding,event,
icmphdr,iphdr,opt,reference,reference_system,schema,sensor,
sig_class,sig_reference,signature,tcphdr,udphdr TO snort;
Configuración ODBC.
Al abrir el administrador de orígenes de datos ODBC, Agregamos el driver PostgreSQL35W (UNICODE) y lo configuramos tal como os muestro en la captura siguiente:
Configuración Snort para ODBC / PostgreSQL.
Ahora tenemos que ir a c:\snort\etc\snort.conf para indicar a Snort vuelque los logs, alertas, etc a la base de datos PostgreSQL. Para ello descomentamos la línea referida a PostgreSQL y la modificamos de la siguiente forma:

.
Ejecución de Snort para ODBC y PostgreSQL.
Tan solo tenemos que ejecutar snort de la forma:
En un momento dado nos aparecerá la configuración de database output para ODBC u PostgreSQL:
Comprobación de los datos almacenados en la base de datos.
A falta de ACID o similar, podenos comprobar que todo va bien usando, incluido en el paquete de inastalación para Windows de PostgreSQL.:

También podemos comprobar desde SQL Shell (psql):
\dt para ver todas las tablas de la base de datos:
snort-> \dt
Listado de relaciones
Esquema | Nombre | Tipo | Due
———+——————+——-+——-
public | data | table | snort
public | detail | table | snort
public | encoding | table | snort
public | event | table | snort
public | icmphdr | table | snort
public | iphdr | table | snort
public | opt | table | snort
public | reference | table | snort
public | reference_system | table | snort
public | schema | table | snort
public | sensor | table | snort
public | sig_class | table | snort
public | sig_reference | table | snort
public | signature | table | snort
public | tcphdr | table | snort
public | udphdr | table | snort
(16 filas)
y el clasico SELECT para ver lpos datos contenidos:
snort=> SELECT * FROM event;
sid | cid | signature | timestamp
—–+—–+———–+————————
1 | 1 | 1 | 2010-02-15 14:17:46+01
1 | 2 | 1 | 2010-02-15 14:19:19+01
1 | 3 | 2 | 2010-02-15 14:19:19+01
1 | 4 | 1 | 2010-02-15 14:19:24+01
1 | 5 | 2 | 2010-02-15 14:19:24+01
1 | 6 | 1 | 2010-02-15 14:19:30+01
1 | 7 | 2 | 2010-02-15 14:19:30+01
1 | 8 | 1 | 2010-02-15 14:19:35+01
1 | 9 | 2 | 2010-02-15 14:19:35+01
1 | 10 | 3 | 2010-02-15 14:19:35+01
1 | 11 | 1 | 2010-02-15 14:19:36+01
1 | 12 | 2 | 2010-02-15 14:19:36+01
1 | 13 | 3 | 2010-02-15 14:19:36+01
1 | 14 | 1 | 2010-02-15 14:19:37+01
1 | 15 | 2 | 2010-02-15 14:19:37+01
1 | 16 | 3 | 2010-02-15 14:19:37+01
1 | 17 | 1 | 2010-02-15 14:19:38+01
1 | 18 | 2 | 2010-02-15 14:19:38+01
1 | 19 | 3 | 2010-02-15 14:19:38+01
1 | 20 | 1 | 2010-02-15 14:19:43+01
1 | 21 | 2 | 2010-02-15 14:19:43+01
1 | 22 | 3 | 2010-02-15 14:19:43+01
etc, etc.
En la próxima veremos todo esto con Oracle 81 y Oracle 10g.
Alfon gracias por tus conocimientos y por ponerlos a disposición de la comunidad. No se el tiempo que llevo intentando que funcionase postgre con snort. Gracias por este articulo. Roger.
no me sale y necesito cargar un bd a post gres desde un archivo que tengo en disco c
gabo,
Dime algo más. qué error te dá. Algún log, etc.
Hemmm.. tengo entendido que snort en sus versiones posteriores a la 8.0 ya soportan ipv6, como se vinculan los logs de las alertas para almacenarlas en la base de datos? porque el esquema está para ipv4