Opción de creación de un repositorio local de AlienVault USM/OSSIM 5.x

Saludos nuevamente.

El siguiente manual sugió inicialmente por la curiosidad, luego por la necesidad de tener una copia local en mi servidor FTP del repositorio de AlienVault en Inet. No es la primera vez que he querido hacer esto, las veces anteriores fallaron porque no me puse a ver con detenimiento los logs que genera OSSIM.

Luego de hacer varias pruebas hoy con respecto a eso, me dispuse a hacer un pequeño manual (ya saben, memoria externa), el cual les comparto. Si a alguien le sirve, bien; y si no…también. 🙂

Aquí lo tienen:

Opción de creación de un repositorio local de AlienVault USM/OSSIM 5.x
Introducción

Primero que todo, este pequeño manual es aplicable mientras no hagan algún cambio en el “ecosistema” de AlienVault USM/OSSIM.

El objetivo principal del mismo es crear una copia local de los repositorios de AlienVault USM/OSSIM en Internet.

Todo comenzó cuando hoy vi el mensaje de que ya salió la versión 5.2.2 de AlienVault OSSIM. Inmediatamente me dispuse a ver cómo el mismo actualizaba (ya saben, usando la opción “0 System Preferences” à “5 Update AlienVault System” à “0 Update System”), ver lo que hace por debajo, etc.

Entonces, viendo el log de la actualización (en mi caso, ubicado en el archivo /var/log/alienvault/update/alienvault5_update-script-1456405365.log) me detuve en estas partes:

## updatercd_suricata_remove, code 0

+ slist_squeeze=/etc/apt/sources.list

+ slist_free=/etc/apt/sources.list.d/alienvault5.list

+ ‘[‘ online = offline ‘]’

+ echo ‘deb http://data.alienvault.com/alienvault5/mirror/jessie/ jessie main contrib’

+ echo ‘deb http://data.alienvault.com/alienvault5/mirror/jessie-security/ jessie/updates main contrib’

+ echo ‘deb http://data.alienvault.com/alienvault5/alienvault/ binary/ ‘

+ echo ‘deb http://data.alienvault.com/alienvault5/feed/ binary/’

+ echo ‘deb http://data.alienvault.com/alienvault5/plugins-feed/ binary/’

+ update_aptget

+ apt-get update

Ign http://data.alienvault.com jessie InRelease

Hit http://data.alienvault.com jessie/updates InRelease

Ign http://data.alienvault.com binary/ InRelease

Ign http://data.alienvault.com binary/ InRelease

Ign http://data.alienvault.com binary/ InRelease

Hit http://data.alienvault.com jessie Release.gpg

Get:1 http://data.alienvault.com binary/ Release.gpg [198 B]

Get:2 http://data.alienvault.com jessie/updates/main amd64 Packages [209 kB]

Get:3 http://data.alienvault.com jessie/updates/contrib amd64 Packages [2,506 B]

Get:4 http://data.alienvault.com jessie/updates/contrib Translation-en [1,211 B]

Get:5 http://data.alienvault.com jessie/updates/main Translation-en [114 kB]

Get:6 http://data.alienvault.com binary/ Release.gpg [198 B]

Get:7 http://data.alienvault.com binary/ Release.gpg [198 B]

Hit http://data.alienvault.com jessie Release

Get:8 http://data.alienvault.com binary/ Release [738 B]

Get:9 http://data.alienvault.com binary/ Release [738 B]

Get:10 http://data.alienvault.com binary/ Release [738 B]

Get:11 http://data.alienvault.com jessie/contrib Translation-en [38.5 kB]

Get:12 http://data.alienvault.com jessie/main Translation-en [4,582 kB]

Get:13 http://data.alienvault.com binary/ Packages [28.0 kB]

Get:14 http://data.alienvault.com binary/ Packages [1,988 B]

Get:15 http://data.alienvault.com binary/ Packages [724 B]

Get:16 http://data.alienvault.com jessie/main amd64 Packages [9,034 kB]

Get:17 http://data.alienvault.com jessie/contrib amd64 Packages [59.5 kB]

Ign http://data.alienvault.com binary/ Translation-en_US

Ign http://data.alienvault.com binary/ Translation-en

Ign http://data.alienvault.com binary/ Translation-en_US

Ign http://data.alienvault.com binary/ Translation-en

Ign http://data.alienvault.com binary/ Translation-en_US

Ign http://data.alienvault.com binary/ Translation-en

Fetched 13.7 MB in 14min 45s (15.5 kB/s)

Reading package lists…

(…)

Reading package lists…

Building dependency tree…

Reading state information…

The following packages will be upgraded:

   alienvault-agent-generator (5.2.1-116 => 5.2.2-30)

   alienvault-apache2 (5.2.1-116 => 5.2.2-30)

   alienvault-api (5.2.1-120 => 5.2.2-30)

   alienvault-api-core (5.2.1-120 => 5.2.2-30)

   alienvault-clean-sessions (5.2.1-116 => 5.2.2-30)

(…)

   rsyslog (8.4.2-1+deb8u1 => 8.4.2-1+deb8u2)

   suricata-rules-default (9.0.1-3236 => 9.0.1-3272)

   udev (215-17+deb8u2 => 215-17+deb8u3)

145 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Need to get 333 MB of archives.

After this operation, 2,059 kB of additional disk space will be used.

Get:1 http://data.alienvault.com/alienvault5/mirror/jessie/ jessie/main base-files amd64 8+deb8u3 [78.0 kB]

Get:2 http://data.alienvault.com/alienvault5/mirror/jessie/ jessie/main login amd64 1:4.2-3+deb8u1 [720 kB]

Get:3 http://data.alienvault.com/alienvault5/mirror/jessie/ jessie/main perl amd64 5.20.2-3+deb8u3 [2,655 kB]

Get:4 http://data.alienvault.com/alienvault5/mirror/jessie/ jessie/main perl amd64 5.20.2-3+deb8u3 [2,655 kB]

Get:5 http://data.alienvault.com/alienvault5/mirror/jessie/ jessie/main perl amd64 5.20.2-3+deb8u3 [2,655 kB]

Get:6 http://data.alienvault.com/alienvault5/mirror/jessie/ jessie/main libperl5.20 amd64 5.20.2-3+deb8u3 [1,354 B]

Get:7 http://data.alienvault.com/alienvault5/mirror/jessie/ jessie/main perl-base amd64 5.20.2-3+deb8u3 [1,223 kB]

Get:8 http://data.alienvault.com/alienvault5/mirror/jessie/ jessie/main perl-modules all 5.20.2-3+deb8u3 [2,545 kB]

(…)

Como ven, me dijo que necesitaba descargar aproximadamente 333 MB (demasiado para mi pequeño AB de 256 KBps). Eso provocó que pasara por mi mente, una vez más, la idea de tener un repo local de AlienVault.

1.- ¿Cómo tener mi repositorio local?
1.1.- Extraer la llave PGP de la fuente (un servidor/sensor AlienVault OSSIM funcionando)

Luego de analizar cómo es que funciona el mecanismo, lo primero que hice fue tratar de copiar la llave PGP de AlienVault a un archivo. Dicha llave se puede extraer de la base de datos del APT del OSSIM. Para ello primeramente hay que sacar el listado de las llaves de APT:

# apt-key list

/etc/apt/trusted.gpg

——————–

pub   1024D/BDBDD487 2010-12-30

uid    Alienvault (Develop team) <jdelacasa@alienvault.com>

sub   2048g/501B0C64 2010-12-30

 

/etc/apt/trusted.gpg.d/debian-archive-jessie-automatic.gpg

———————————————————-

pub   4096R/2B90D010 2014-11-21 [expires: 2022-11-19]

uid                 Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>

 

/etc/apt/trusted.gpg.d/debian-archive-jessie-security-automatic.gpg

——————————————————————-

pub   4096R/C857C906 2014-11-21 [expires: 2022-11-19]

uid                  Debian Security Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>

 

/etc/apt/trusted.gpg.d/debian-archive-jessie-stable.gpg

——————————————————-

pub   4096R/518E17E1 2013-08-17 [expires: 2021-08-15]

uid                 Jessie Stable Release Key <debian-release@lists.debian.org>

 

/etc/apt/trusted.gpg.d/debian-archive-squeeze-automatic.gpg

———————————————————–

pub   4096R/473041FA 2010-08-27 [expires: 2018-03-05]

uid                 Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>

 

/etc/apt/trusted.gpg.d/debian-archive-squeeze-stable.gpg

——————————————————–

pub   4096R/B98321F9 2010-08-07 [expires: 2017-08-05]

uid                 Squeeze Stable Release Key <debian-release@lists.debian.org>

 

/etc/apt/trusted.gpg.d/debian-archive-wheezy-automatic.gpg

———————————————————-

pub   4096R/46925553 2012-04-27 [expires: 2020-04-25]

uid                 Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>

 

/etc/apt/trusted.gpg.d/debian-archive-wheezy-stable.gpg

——————————————————-

pub   4096R/65FFB764 2012-05-08 [expires: 2019-05-07]

uid                 Wheezy Stable Release Key <debian-release@lists.debian.org>

Como se ve, la primera llave es la que interesa. Ahora lo que hay que hacer es exportarla a un archivo o copiar el contenido de la misma en otro lugar.

El proceso de exportarla es sencillo, basta con ejecutar el comando siguiente:

# apt-key export BDBDD487

La cual da una salida con la llave PGP solicitada:

—–BEGIN PGP PUBLIC KEY BLOCK—–

Version: GnuPG v1

 

(Bloque con la cadena de la llave)

—–END PGP PUBLIC KEY BLOCK—–

El siguiente paso es usar dicha llave para poder crear la copia del repositorio. Asumiendo que copié la llave en un archivo dentro de mi FTP local y que la URL es esta:

http://ftp.codesa.co.cu/linux/distros/alienvault.key

Se procede a preparar las condiciones para las operaciones siguientes.

1.2.- Añadir la llave PGP recién exportada a la base de datos del servidor donde se descargan los repositorios

Antes de continuar, es bueno aclarar algunos puntos con respecto a los repositorios de AlienVault. Como se vio anteriormente en la salida del APT, aparecen las URLs de los mismos. De ahí pude inferir (y luego comprobar) el contenido de los archivos de fuentes en el APT, los cuales son los siguientes:

Contenido del archivo /etc/apt/sources.list:

deb http://data.alienvault.com/alienvault5/mirror/jessie/ jessie main contrib

deb http://data.alienvault.com/alienvault5/mirror/jessie-security/ jessie/updates main contrib

Contenido del archivo /etc/apt/sources.list.d/alienvault5.list:

deb http://data.alienvault.com/alienvault5/alienvault/ binary/

deb http://data.alienvault.com/alienvault5/feed/ binary/

deb http://data.alienvault.com/alienvault5/plugins-feed/ binary/

El contenido de estos archivos es la base de lo que viene a continuación. Con los primeros dos repositorios no hay problemas con debmirror, pero con los tres siguientes sí. Después de hacer una buena cantidad de pruebas con debmirror para poder descargarlos, tuve que decantarme por apt-mirror. ¿La causa? Son repositorios planos, o sea, no tiene la estructura clásica de un repo al estilo Debian (subdirectorios dists y pool), sino que tanto la lista de paquetes como los propios paquetes están dentro de un mismo subdirectorio.

Por lo tanto, hay que utilizar debmirror y apt-mirror, lo que provoca que haya que añadir la llave PGP de AlienVault tanto a la base de datos de llaves del sistema, como del APT. Los comandos son los siguientes:

Para la base de datos del sistema:

# wget -qO – “http://ftp.codesa.co.cu/linux/distros/alienvault.key” | gpg –no-default-keyring –keyring trustedkeys.gpg –import

Para la base de datos del APT:

# wget -qO – “http://ftp.codesa.co.cu/linux/distros/alienvault.key” | apt-key add –

Una vez añadida la llave PGP en los lugares adecuados, se pasa a crear los scripts y configuraciones para las sincronizaciones de los repositorios de AlienVault.

1.3.- Sincronización de los repositorios de AlienVault

Ya esta es la parte más fácil. La creación de los scripts para sincronizar los dos primeros repositorios de AlienVault, y la configuración de APT-Mirror para sincronizar los tres restantes.

He aquí los scripts:

Contenido del archivo alienvault5-jessie_sync.sh:

#!/bin/sh

 

# Version: 1.0.1

# Programador: Lic. Hector Suarez Planas

# Cargo: Administrador, Nodo CODESA – Grupo Empresarial de la Construccion

#       Santiago de Cuba

#

# Script para sincronizar la Rama Principal del Repositorio de

# AlienVault USM/OSSIM 5.x (Jessie) en Internet.

#

# NOTA: Este script es una modificacion del script original proporcionado

#       por los Administradores de Infomed.

#

 

# Mirror host

FROM=data.alienvault.com

 

# Archive location

TO=/srv/distros/alienvault5/mirror/jessie

 

# —–

 

DATE=$(date “+%Y-%m-%d”)

DATE_FILENAME=$(date “+%Y-%m-%d__%H.%M.%S”)

DATE_LOGHEADER=$(date “+%d %b %Y – %H:%M:%S”)

 

BASELOGDIR=/var/log/repos

LOGDIR=$BASELOGDIR/$DATE

LOGFILE=alienvault5-jessie_sync-$DATE_FILENAME.log

TARGETLOG=$LOGDIR/$LOGFILE

 

# Si no existe el directorio base, crearlo y asignarle

# permisos

[ -d $BASELOGDIR ] || mkdir -p $BASELOGDIR

 

# Si no existe el directorio, crearlo y asignarle

# permisos

[ -d $LOGDIR ] || mkdir -p $LOGDIR

 

# Si no existe el archivo, crearlo y asignarle

# permisos

[ -f $TARGETLOG ] || touch $TARGETLOG

 

chown -R root.root $BASELOGDIR/

chmod 750 $(find $BASELOGDIR -type d)

chmod 640 $(find $BASELOGDIR -type f)

 

echo “———————————————” >> $TARGETLOG

echo ” Registro de eventos de sincronizacion de la ” >> $TARGETLOG

echo ” rama Principal del Repositorio de           ” >> $TARGETLOG

echo ” AlienVault USM/OSSIM 5.x                   ” >> $TARGETLOG

echo “” >> $TARGETLOG

echo ” $DATE_LOGHEADER” >> $TARGETLOG

echo “———————————————” >> $TARGETLOG

echo “” >> $TARGETLOG

 

# Delete temp folder first

rm -rf $TO/.temp/

 

# Main archive

debmirror \

–passive \

–progress \

–verbose \

–host=$FROM \

–root=alienvault5/mirror/jessie \

–dist=jessie \

–section=main,contrib \

–arch=amd64 \

–timeout=1600 \

–method=http \

–cleanup \

–nosource \

–ignore-small-errors \

–diff=none \

$TO >> $LOGDIR/$LOGFILE 2>&1

Contenido del archivo alienvault5-jessie-security_sync.sh:

#!/bin/sh

 

# Version: 1.0.1

# Programador: Lic. Hector Suarez Planas

# Cargo: Administrador, Nodo CODESA – Grupo Empresarial de la Construccion

#       Santiago de Cuba

#

# Script para sincronizar la Rama Security del Repositorio de AlienVault USM/OSSIM 5.x

# en Internet.

#

# NOTA: Este script es una modificacion del script original proporcionado

#       por los Administradores de Infomed.

#

 

# Mirror host

FROM=data.alienvault.com

 

# Archive location

TO=/srv/distros/alienvault5/mirror/jessie-security

 

# —–

 

DATE=$(date “+%Y-%m-%d”)

DATE_FILENAME=$(date “+%Y-%m-%d__%H.%M.%S”)

DATE_LOGHEADER=$(date “+%d %b %Y – %H:%M:%S”)

 

BASELOGDIR=/var/log/repos

LOGDIR=$BASELOGDIR/$DATE

LOGFILE=alienvault5-jessie-security_sync-$DATE_FILENAME.log

TARGETLOG=$LOGDIR/$LOGFILE

 

# Si no existe el directorio base, crearlo y asignarle

# permisos

[ -d $BASELOGDIR ] || mkdir -p $BASELOGDIR

 

# Si no existe el directorio, crearlo y asignarle

# permisos

[ -d $LOGDIR ] || mkdir -p $LOGDIR

 

# Si no existe el archivo, crearlo y asignarle

# permisos

[ -f $TARGETLOG ] || touch $TARGETLOG

 

chown -R root.root $BASELOGDIR/

chmod 750 $(find $BASELOGDIR -type d)

chmod 640 $(find $BASELOGDIR -type f)

 

echo “———————————————” >> $TARGETLOG

echo ” Registro de eventos de sincronizacion de la ” >> $TARGETLOG

echo ” rama Security del Repositorio de           ” >> $TARGETLOG

echo ” AlienVault USM/OSSIM 5.x                   ” >> $TARGETLOG

echo “” >> $TARGETLOG

echo ” $DATE_LOGHEADER” >> $TARGETLOG

echo “———————————————” >> $TARGETLOG

echo “” >> $TARGETLOG

 

# Delete temp folder first

rm -rf $TO/.temp/

 

# Main archive

debmirror \

–passive \

–progress \

–verbose \

–host=$FROM \

–root=alienvault5/mirror/jessie-security \

–dist=jessie/updates \

–section=main,contrib \

–arch=amd64 \

–timeout=1600 \

–method=http \

–cleanup \

–nosource \

–ignore-small-errors \

–diff=none \

$TO >> $LOGDIR/$LOGFILE 2>&1

De ahí la planificación de la sincronización ya es a gusto del consumidor. 🙂

La otra parte está en la configuración del APT-Mirror en el archivo /etc/apt/mirror.list, cuyo contenido (en parte) es el siguiente:

# Opciones Generales

#

set base_path /srv/packages/apt-mirrors

set nthreads 2

set _tilde 0

 

(…)

 

# Mirrorear el Repositorio de algunas cosas de AlienVault USM/OSSIM 5.x

#

deb-amd64 http://data.alienvault.com/alienvault5/alienvault/ binary/

deb-amd64 http://data.alienvault.com/alienvault5/feed/ binary/

deb-amd64 http://data.alienvault.com/alienvault5/plugins-feed/ binary/

 

# Limpieza posterior

#

(…)

clean http://data.alienvault.com/alienvault5/alienvault

clean http://data.alienvault.com/alienvault5/feed

clean http://data.alienvault.com/alienvault5/plugins-feed

Lo mismo con la planificación.

Ahora bien, en mi caso, yo prefiero mostrar la estructura de manera tal que se vea como un grupo completo, o sea, los 5 repositorios de AlienVault en una misma URL base. Para ello me sirvo de los enlaces duros, donde la estructura sería la misma que la de su origen:

# mount –bind /srv/packages/apt-mirrors/mirror/data.alienvault.com/alienvault5/alienvault /srv/distros/alienvault5/alienvault

# mount –bind /srv/packages/apt-mirrors/mirror/data.alienvault.com/alienvault5/feed /srv/distros/alienvault5/feed

# mount –bind /srv/packages/apt-mirrors/mirror/data.alienvault.com/alienvault5/plugins-feed /srv/distros/alienvault5/plugins-feed

Así cuando se acceda al repositorio local en el servidor FTP, la estructura se verá así:

AlienVault - Mirror 1

AlienVault - Mirror 2

AlienVault - Mirror 3

AlienVault - Mirror 4

Y hasta aquí el manual. Espero les sirva.:-)

Acerca de Hector Suarez Planas

Es Licenciado en Ciencia de la Computación (3 de julio de 2002). Ha sido Administrador de Red en varias organizaciones, Programador y Analista de Sistemas. Actualmente se desempeña como Administrador de Red del Telecentro Tele Turquino de Santiago de Cuba. Tiene experiencia con sistemas Windows y GNU/Linux, Infraestructura de Redes (Cisco, AlliedTelesis, Netgear y HP ProCurve, Vyatta/VyOS), Servidores tanto físicos como virtuales (plataformas VMWare, Proxmox VE y Xen), Sistemas de Seguridad Informática (Snort/Suricata IDS, appliances AlienVault OSSIM), programador (Delphi, C++ Builder, Perl [poco], Python [algo]), entre otras cosas. Actualmente estoy incursionando en todo lo que tiene relación con Cloud Computing (OpenStack) y Centros de Datos. :-)
Esta entrada fue publicada en AlienVault OSSIM, APT, Repositorios de Paquetes. Guarda el enlace permanente.