Netflow: nfsen + nfdump en Debian (3) + cacti + pmacct

Ahora vamos a añadir una capa más…. pmacct.

Pmacct será el enlace entre cacti y los flows de los dispositivos… usaremos nfsen para controlar tráfico y ataques.

Descargamos y descomprimimos pmacct:


# cd /usr/src
# wget -c http://www.pmacct.net/pmacct-1.5.0.tar.gz
# tar -zxvf pmacct-1.5.0.tar.gz

Creamos el directorio de instalación:

# mkdir /etc/pmacct

Y instalamos

Una vez instalado, vamos a configurar lo que nos interesa de pmacct, que más tarde, enlazaremos con cacti.


# nano /etc/pmacct.conf

debug: true
daemonize: true
nfacctd_port: 9996
pidfile: /var/run/nfacctd.pid
plugin_buffer_size: 80524
plugin_pipe_size: 18052324
networks_file: /etc/pmacct/nfacctd.hosts

plugins: memory[in], memory[out]
aggregate[in]: dst_host
aggregate[out]: src_host
imt_path[in]: /tmp/in.pipe
imt_path[out]: /tmp/out.pipe

En el fichero nfacctd.hosts, añadimos las ip’s / rangos que nos interese tener en detalle…


# nano /etc/pmacct/nfacctd.hosts

1.1.1.1/32
1.1.1.2/32
..
...

Lanzamos pmacct….


root@testflow:/etc/pmacct/sbin# ./nfacctd -D -f /etc/pmacct/pmacct.conf

Para comprobar que estamos escuchando correctamente:

root@testflow:/etc/pmacct/bin# netstat -putan | grep 9996
udp 0 0 0.0.0.0:9996 0.0.0.0:* 17799/nfacctd: Core

y que recogemos flows:

root@testflow:/etc/pmacct/bin# ./pmacct -s -p /tmp/out.pipe
root@testflow:/etc/pmacct/bin# ./pmacct -s -p /tmp/in.pipe

Y ahora comprobamos si hace accounting de las ip’s en concreto:


root@testflow:/etc/pmacct/bin# ./pmacct -c dst_net -N 1.1.1.1 -p /tmp/in.pipe
7254628
root@testflow:/etc/pmacct/bin#

Y vemos cómo ya nos muestra tráfico en bytes 🙂

Captura de pantalla 2014-11-16 a las 14.42.32

Netflow: nfsen + nfdump en Debian (2) + cacti

Siguiendo la entrada anterior, si accedemos a la interfície web de nfsen (dejando un rato para que grafique), deberíamos tener algo así:

capturanfsen1

Ahora, añadimos Cacti…. para ello, instalamos unas dependencias nuevas:


# apt-get install dbconfig-common javascript-common libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl libjs-jquery libjs-jquery-cookie libphp-adodb mysql-client-5.5 mysql-server mysql-server-5.5 mysql-server-core-5.5 wwwconfig-common php5-cli php5-mysql php5-snmp snmp snmpd rrdtool libmysqlclient-dev libsnmp-dev libpcap-dev

Una vez instaladas las dependencias, descargamos la última versión de cacti:


# cd /usr/src
# wget -c http://www.cacti.net/downloads/cacti-0.8.8b.tar.gz

Descomprimimos:

# tar -zxvf cacti-0.8.8b.tar.gz

Creamos la BBDD para cacti, junto con el user / pass


# mysql -u root -p
password:****
mysql> create database cacti;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'cacti'@'%' IDENTIFIED BY 'cacti' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit

# mysql -u cacti -pcacti cacti < cacti.sql

Copiamos la carpeta que nos hemos descargado a /var/www/cacti

Una vez copiada, modificamos /var/www/cacti/include/config.php


/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cacti";
$database_password = "cacti";
$database_port = "3306";
$database_ssl = false;

Y nos vamos al navegador:

http://ip.del.server/cacti

Y tendremos la siguiente página:

capturacacti

Aceptamos:

capturacacti2

Nos aseguramos que tengamos todas las dependencias:

cacti3

Una vez aceptado, accedemos via web al cacti:

http://ip.del.server/cacti

y ponemos la pass de admin

cacti4

Ahora instalamos cacti-spine.... descargamos:


root@testflow:/usr/src# wget -c http://www.cacti.net/downloads/spine/cacti-spine-0.8.8b.tar.gz
root@testflow:/usr/src# tar -zxvf cacti-spine-0.8.8b.tar.gz
root@testflow:/usr/src# cd cacti-spine
root@testflow:/usr/src/cacti-spine-0.8.8b# ./configure
root@testflow:/usr/src/cacti-spine-0.8.8b# make
root@testflow:/usr/src/cacti-spine-0.8.8b# make install

Generamos el fichero de configuración:

root@testflow:/# cd /usr/local/spine/etc/
root@testflow:/usr/local/spine/etc# cp spine.conf.dist spine.conf
root@testflow:/usr/local/spine/etc# nano spine.conf

Editamos el fichero spine.conf y configuramos la BBDD

# +-------------------------------------------------------------------------+
DB_Host localhost
DB_Database cacti
DB_User cacti
DB_Pass cacti
DB_Port 3306
DB_PreG 0

Entramos en la web del cacti y configuramos Spine:

spine

Añadimos al cron

# crontab -e
*/1 * * * * php5 /var/www/cacti/poller.php > /dev/null 2>&1

en mi caso, el poller.php lo tengo situado en esa carpeta.

Netflow: nfsen + nfdump en Debian (1)

Otra entrada que es un apunte para recordar la instalación / configuración.

Netflow, es un protocolo creado por cisco y usado por varios fabricantes, para exportar fuera del router / firewall, el detalle del tráfico…. de esta manera, tendremos un histórico para hacer accounting, ver ataques y en definitiva, para tener controlado todo un poco en nuestros routers.

Existen herramientas de pago fantásticas, tipo Netflow Analyzer, pero su precio, hace que nos lo pensemos bien si lo queremos tener en casa, para jugar o una pequeña empresa, así que, la alternativa libre, pasa por usar nfsen (frontend) y nfdump.

Partimos de la base de una debian recién instalada …

Instalamos unas dependencias básicas:

# apt-get install gcc make flex librrd-dev mtr htop autoconf bison
# apt-get install apache2 libapache2-mod-php5 php5-common libmailtools-perl rrdtool librrds-perl
# apt-get install rrdtool libio-socket-ssl-perl
# perl -MCPAN -e 'install Socket6'

Descargamos en /usr/src el programa para compilarlo:

wget -c http://sourceforge.net/projects/nfdump/files/stable/nfdump-1.6.12/nfdump-1.6.12.tar.gz/download

Descomprimes…

# tar -zxvf nfdump-1.6.12.tar.gz

Install….

#./configure --enable-nfprofile
# make
# make install

Una vez instalado, vamos por el nfsen….. descargamos la última versión disponible

wget -c http://downloads.sourceforge.net/project/nfsen/stable/nfsen-1.3.6p1/nfsen-1.3.6p1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fnfsen%2Ffiles%2Fstable%2Fnfsen-1.3.6p1%2F&ts=1415459147&use_mirror=heanet

Descomprimimos nfsen….


# tar -zxvf nfsen-1.3.6p1.tar.gz

Yo, suelo crearme un directorio para tener ordenados los ficheros y me suelo copiar la instalación del nfsen allí:

# mkdir /etc/nfsen
# mv /usr/src/nfsen-1.3-6p1 /etc/nfsen

Nos creamos el fichero de configuración para nuestros cacharros..

# cd /etc/nfsen
# cp nfsen-dist.conf nfsen.conf

Editamos / cambiamos unos valores y añadimos nuestro primer dispositivo:


# nano /etc/nfsen/nfsen.php

# BASEDIR unrelated vars:
#
# Run nfcapd as this user
# This may be a different or the same uid than your web server.
# Note: This user must be in group $WWWGROUP, otherwise nfcapd
# is not able to write data files!
$USER = "www-data";

# user and group of the web server process
# All netflow processing will be done with this user
$WWWUSER = "www-data";
$WWWGROUP = "www-data";

%sources = (
'asav254' => { 'port' => '9995', 'col' => '#0000ff', 'type' => 'netflow' },
);

Añadimos un link simbólico para /var/www y cambiamos permisos…


# ln -s /var/www/nfsen/nfsen.php /var/www/nfsen/index.php
# chown -R www-data:www-data /data/nfsen
# chown -R www-data:www-data /var/www/nfsen

Creamos el directorio para almacenar:

# mkdir -p /data/nfsen
# /var/www/nfsen/install.pl /etc/nfsen/nfsen.conf

Añadimos al inicio el nfsen:

# ln -s /data/nfsen/bin/nfsen /etc/init.d/nfsen
# update-rc.d nfsen defaults 20

Y lo iniciamos:

# /etc/init.d/nfsen start