Header Ads

Network Monitor

Sin importar la protección que implementemos en nuestra red local, no será lo suficiente si no establecemos sistemas de análisis y supervisión del tráfico en tiempo real, para monitorear las conexiones entrantes y salientes, los puertos, etc.
Para esto son los archivos .log de nuestro servidor, sin embargo, para mayor comodidad, existen algunos frontend que valen la pena mencionar y que harían este proceso más fácil.
Una herramienta de monitoreo en tiempo real es una herramienta indispensable para la gestión del Administrador TI de la red local. Hay infinidades de ellas, como Whatsup GoldOpManager, Monit, PRTG, ActiveXperts, Etherape, etc, etc, etc. y es imposible describirlas todas, sin embargo, en esta entrega, nos enfocaremos en algunas que ofrecen resultados muy buenos y son gratuitas.
Sqstat
Instalamos dependencias
apt-get install apache2 php5 libapache2-mod-php5 php5-cli
Descargamos el programa  Sqstat  AQUI o con wget y descomprimimos
wget http://samm.kiev.ua/sqstat/sqstat-1.20.tar.gz
tar -xzvf sqstat-1.20.tar.gz
Luego creamos la carpeta sqstat (Para Squid 3.0x y 3.1x en /var/www y para Squid v3.2 o superior en /var/www/html). Y copiamos el contenido descargado a la nueva carpeta y cambiamos el archivo config.inc.php.defaults como config.inc.php
# Para Squid3 v3.0x y 3.1x
mkdir /var/www/sqstat
cp -r sqstat-1.20/* /var/www/sqstat
cd /var/www/sqstat
cp config.inc.php.defaults config.inc.php
# Para Squid3 v3.2x o superior
mkdir /var/www/html
mkdir /var/www/html/sqstat
cp -r sqstat-1.20/* /var/www/html/sqstat
cd /var/www/sqstat
cp config.inc.php.defaults config.inc.php
Editamos el archivo config.inc.php especificando los parámetros de IP o hostname del servidor proxy y el puerto de escucha:
# Para Squid3 v3.0x y 3.1x
vim /var/www/sqstat/config.inc.php
# Para Squid3 v3.2x o superior
vim /var/www/html/sqstat/config.inc.php
Y modificamos las líneas 
$squidhost[0]="IP_PROXY_SERVER"; 
$squidport[0]=PORT_PROXY_SERVER; 
con aquellos parámetros de nuestra red Lan. Ejemplo:
$squidhost[0]="192.168.1.10";
$squidport[0]=3128;
Ejemplo de un archivo  config.inc.php:
	/* global settings */

$use_js=true; // use javascript for the HTML toolkits

// Maximum URL length to display in URI table column
DEFINE("SQSTAT_SHOWLEN",60);

/* proxy settings */

/* Squid proxy server ip address or host name */
$squidhost[0]="192.168.1.10";
/* Squid proxy server port */
$squidport[0]=3128;
/* cachemgr_passwd in squid.conf. Leave blank to disable authorisation */
$cachemgr_passwd[0]="";
/* Resolve user IP addresses or print them as numbers only [true|false] */
$resolveip[0]=false; 
/* uncomment next line if you want to use hosts-like file. 
   See hosts.txt.dist. */
// $hosts_file[0]="hosts.txt"
/* Group users by hostname - "host" or by User - "username". Username work only 
   with squid 2.6+ */ 
$group_by[0]="host";

/* you can specify more than one proxy in the configuration file, e.g.: */
// $squidhost[1]="192.168.0.1";
// $squidport[1]=3129;
// $cachemgr_passwd[1]="secret";
// $resolveip[1]=true; 
// $hosts_file[1]="otherhosts.txt"

	
Nota: host.txt solo funciona en squid 2.6 o superior. Debe colocar la ruta completa del host y dentro ip del usuario mas el nombre. Ejemplo:
192.168.0.12 JORGE
192.168.1.13 SERVIDORCON
192.168.1.14 PEDRO
192.168.1.10 SERVIDOR
Nota: Si en su squid.conf agregó algún password, debe poner el mismo password en el sqtat. Ejemplo:
# Ejemplo de contraseña en /etc/squid3/squid.conf
cachemgr_passwd su_contraseña all
# Ejempo de contraseña en /var/www/sqstat/config.inc.php
$cachemgr_passwd[0]="su_contraseña";
Finalmente editamos el archivo /etc/squid3/squid.conf, añadiendo estas líneas:
# Para Squid3 v3.0x
acl manager proto cache_object
acl PROXY_SERVER src IP_PROXY_SERVER/255.255.255.255
http_access allow manager PROXY_SERVER
http_access deny manager
# Para Squid3 v3.2x o superior
acl PROXY_SERVER src IP_PROXY_SERVER/32
http_access allow manager PROXY_SERVER
http_access deny manager
Nota: Debe coincidir la IP del proxy tanto en el squid.conf como en el  config.inc.php. Y antes de denegar ' manager' debe autorizarlo, tanto para su red local ( localnet) como para el localhost
Ejemplo:
acl localnet src 192.168.1.0/24
http_access allow localnet
http_access allow manager localnet
http_access allow manager localhost
# cerrando 
http_access deny manager
Luego reiniciamos el Proxy o recargamos Squid y Apache con:
squid3 -k reconfigure | invoke-rc.d apache2 reload
Por último, abrimos el navegador web desde cualquier PC de la red Lan y en la barra de direcciones accederemos a http://127.0.0.1/sqstat/sqstat.php, donde 127.0.0.1 es localhost (puede reemplazarlo por la IP_PROXY_SERVER)
Nota: No olvide editar su archivo apache2 y agregarle el ServerName
# edite /etc/apache2/apache2.conf
# y agregue el ServerName
ServerName localhost
ServerName IP_DEL_PROXY_SERVER 
Problemas comunes de Sqstat
Netmasks are deprecated
Si después de parametrizar su  squid.conf  reiniciar squid3 y verificar   squid3 -k parse) sale un mensaje similar a:
WARNING: Netmasks are deprecated. Please use CIDR masks instead
WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges
WARNING: For now we will assume you meant to write /32
Significa que esta utilizando mascaras de subred que su versión de Squid no soporta. En su reemplazo deberá especificar el CIDR. Ejemplo: reemplazar 255.255.255.255 por 32. Para mayor información consulte la siguiente tabla  CIDR.
SqStat error Error (1): Cannot get data. Server answered: HTTP/1.1 401 Unauthorized (o Forbidden)
Este problema es frecuente en las versiones de Squid 3.2x y 3.3x. Para solucionarlo siga el siguiente tutorial (ruso).
Sqtop
Otro programa similar a Sqstat es  Sqtop, que tambien muestra la actividad de Squid en tiempo real, pero por terminal. Si quiere conocer su funcionamiento lea el siguiente  tutorial
git clone https://code.google.com/p/sqtop/
o
git clone https://github.com/paleg/sqtop
cd sqtop/
./configure 
make
./src/sqtop -h IP_DEL_PROXY -p PUERTO_DEL_PROXY 
Pero si no queremos instalar nada, simplemente ejecutamos en el terminal:
# para conexiones en tiempo real
tail -f /var/log/squid3/access.log | perl -pe 's/\d+/localtime($&)/e'
# en retrospectiva
cat /var/log/squid3/access.log | perl -pe 's/\d+/localtime($&)/e' | less
Y con esto sabremos en tiempo real, que equipos se están conectando a nuestro squid
Sarg
Sarg (Squid Analysis Report Generator) es otro programa de monitoreo relacionado con el Squid, para supervisar conexiones de internet (http 80), pero no es en tiempo real como Sqstat, sin embargo brinda informes detallados de los accesos por terminal, algo que no hace Sqstat, y estos informes pueden generarse en el momento y con la frecuencia que queramos, lo que lo hace un complemento ideal de Sqstat.
Se puede manejar con el webmin, para mayor comodidad del administrador TI.
Configurando Sarg
Como trabaja con el Squid, debemos asegurarnos que Squid esté instalado y configurado Verifique los archivos de registro
vim /etc/squid3/squid.conf
grep cache_access_log /etc/squid3/squid.conf
TAG: cache_access_log
cache_access_log /var/log/squid3/access.log
Configuración básica
# Instalación de Sarg y sus dependencias (Si instalaron Sqstat es posible que no necesiten las dependencias)
apt-get install sarg apache2 libapache2-mod-php5 squid
# Editar archivo de configuración
vim /etc/sarg/sarg.conf
# Elegir Lenguaje
language Spanish
# Elegir la ruta de los logs
access_log /var/log/squid3/access.log
# Seleccionar un titulo de los reportes
title "Reportes de Acceso Web por Usuarios"
# Ruta de almacenamiento de los reportes (se debe crear la carpeta y colocar la Ruta donde esta configurado Apache)
output_dir /var/www/squid-reports/Manual
# Si el registro aparece o no aparece por la IP (no recomendado. Demora mucho)
resolve_ip yes o no
# Reportes  con la configuracion de la hora U america (mes/dia/año)
date_format u
# Dias a ver en los registros.( Sunday->0, Saturday->6 )
weekdays 0-6 :
También puede crear una lista de los excluidos del reporte. Pudiendo contener direcciones IP (Ejemplo: 192.168.1.10), una red completa (192.168.1.0/24), el nombre de un equipo (equipo.red.local) o todos los equipos de una red (*.red.local) /etc/sarg/exclude_users O de los incluidos
vim /etc/sarg/usertab
Y finalmente para acceder al reporte
http://localhost/sarg/
o
http://ipdelservidor/sarg/
Luego programe la ejecución de Sarg en el crontab (para su ejecución a una hora determinada/dia)
sudo crontab -e
*/5 * * * * /usr/sbin/sarg-reports today > /dev/null 2>&1
# o por el Webmin (que es más sencillo)
@daily /etc/webmin/sarg/generate.pl
# para salir de crontab
:wq
# Nota:
# Para ubuntu 10x
#@daily /etc/webmin/sarg/generate.pl
#Para Ubuntu 14x
#@daily/usr/share/webmin/sarg/generate.pl
Para generar los reportes manualmente
sudo sarg-reports today
Sarg tambien puede usarse con squidguard, y tiene muchas opciones más. Puede hacerlo de modo gráfico en el Webmin, y para más configuraciones leer los tutoriales de tuxjn y ecured. Para restringir el acceso a los reportes lea el siguiente post.
Nessus
Esta herramienta no requiere de mayor presentación. No es un software de monitoreo propiamente, sino que se utiliza para realizar un análisis a fondo de las vulnerabilidades de nuestra red local y supervisar sus recursos.
Instalación y configuración Nessus  
1. Descarga
http://www.tenable.com/products/nessus/select-your-operating-system
2. Instalación
dpkg -i Nessus-5.2.5-ubuntu1110_amd64.deb
3. Configuración
# Añadir usuario
/opt/nessus/sbin/nessus-adduser
Login : usuario (el nombre que quieras como admin)
Do you want this user to be a Nessus 'admin' user ? (can upload plugins...) (y/n) [n]: y
This user will have 'admin' privileges within the Nessus server 
Rules : 
Is that ok ? (y/n) [y] y
# Luego sale el siguiente mensaje y presionar Enter
Enter the rules for this user, and enter a BLANK LINE once you are done :
(the user can have an empty rules set)
Login : usuario
Password : ***********
This user will have 'admin' privileges within the Nessus server
Rules :
Is that ok ? (y/n) [y]  y
# Si todo salió bien, saldrá lo siguiente:
User added 
4. Activación y actualización de plugins Seguimos el siguiente link:
http://www.tenable.com/products/nessus-home
Colocamos Nombre, apellidos, mail, marcamos la casilla "I agree to the terms of service" y pulsamos el botón "Register". Nos enviará al mail un código de activación. Copiamos el código que nos enviaron al mail y en el terminal ejecutamos
/opt/nessus/bin/nessus-fetch --register C2D6-3A94-ECD4-7735-1111
Donde C2D6-3A94-ECD4-7735-1111 es el código (cámbielo por el suyo). Una vez terminada la actualización de los plugins (Nessus descarga entre 90-100mb de plugins, por tanto debe ser paciente), reiniciamos el servicio
/etc/init.d/nessusd restart
5. Verificar servicios activos
netstat -ntpl | grep nessusd
Si los servicios están activos, debe salir la siguiente información:
tcp 0 0 0.0.0.0:1241 0.0.0.0:* ESCUCHAR 7575/nessusd
tcp 0 0 0.0.0.0:8834 0.0.0.0:* ESCUCHAR 7575/nessusd
tcp6 0 0 :::1241 :::* ESCUCHAR 7575/nessusd
tcp6 0 0 :::8834 :::* ESCUCHAR 7575/nessusd
6. Acceder Nessus via web
https://localhost:8834
Una vez aceptado el certificado y en la página inicial de Nessus, el trabajo con la plataforma es muy intuitivo. Basta con crear una "Policies" para crear una nueva política de escaneo, darle un nombre cualquiera y en "Scan Target", colocar la ip a evaluar o la red completa ej: 192.168.1.0/24. Luego en "Scans", activarlo basado en esta política creada y esperar a que termine el escaneo y muestre el informe.
7. Plugins offline (Opcional) 
Si su conexión a internet es lenta, se recomienda la descarga de los plugins manualmente. Una vez nos envíen el código de activación, sin colocarlo en el software, accederemos a
https://plugins.nessus.org/offline.php
Ponemos el código y la web nos reenvia a la pantalla de descarga
Thank you. You can now obtain the newest Nessus plugins at : 
http://plugins.nessus.org/get.php?f=all-2.0.tar.gz&u=eecb2cc1f5449a323ee2123de1863f18&p=2620b5072399716c50cc273255c20f24 

You also need to copy the following file to :
/opt/nessus/etc/nessus/nessus-fetch.rc (Unix)
C:\Documents and Settings\All Users\Application Data\Tenable\Nessus\conf\nessus-fetch.rc (Windows XP/2K3)
C:\ProgramData\Tenable\Nessus\conf\nessus-fetch.rc (Windows Vista/7/8/2008/2012)
/Library/Nessus/run/etc/nessus/nessus-fetch.rc (Mac OS X)
/usr/local/nessus/etc/nessus/nessus-fetch.rc (FreeBSD)

https://plugins.nessus.org/mkconfig.php?ac=C2D6-3A94-ECD4-7735-1A29&c=
Los plugins nessus-fetch.rc y all-2.0.tar.gz se colocan en:
/opt/nessus/etc/nessus/
Y luego reinicie el proceso en el paso 4.
Análisis y reporte con NMAP
También puede realizar un análisis de su red local con el todo terreno Nmap. Es más exacto, efectivo y garantizado, que cualquier otra herramienta existente.
Primero generamos un reporte, en formato xml, que llamaremos "reporte.xml", y se alojará en home. Este reporte incluye un barrido de toda la red, identificando las estaciones de trabajo, puertos activos, SO, etc, sin embargo puede generarlo de una o varias direcciones ip.
El siguiente ejemplo corresponde a un análisis y reporte de una red clase C.
nmap -sV -T4 -O -F --version-light 192.168.1.0/24 -oX reporte.xml
Instalamos la herramienta xsltproc
apt-get install xsltproc
Y convertimos el reporte a formato html para visualizarlo en el navegador.
$ xsltproc reporte.xml -o reporte.html
También podemos convertir la salida de nmap en un csv con un script de python. Su funcionamiento es muy simple. El portal  Inseguros nos trae el siguiente ejemplo:
nmap -sV -p- IP -oN - | python nmaptocsv.py >salida.csv
Otras aplicaciones
Para monitorear el ancho de banda, conexiones abiertas, puertos a la escucha, sitios webs y muchas otras cosas más, existen otros cientos de herramientas, tales como  Munin, Piwik, Cacti, Monitorix, PRTG, Netspeed, Pandora, etc, que brindan resultados muy confiables y son gratis. Puede encontrar listas detalladas en los sitios: DynacontSBD y Fraterneo
IPtraf
Esta herramienta es sin lugar a dudas una de las mejores para supervisar todas las interfaces de red de nuestro servidor o cliente en tiempo real, ya que proporciona estadísticas sobre el tráfico IP de las redes que se encuentren activas en el sistema, brindando número de paquetes y bytes en una conexión, estadísticas de una interfaz, indicadores de actividad, caídas en el tráfico TCP/UDP y paquetes en una estación LAN, entre muchos otros beneficios.
No es un sniffer propiamente, como  Wireshark, pero si analizamos las estadísticas podemos llegar a detectar conexiones ilegales o actividad anormal.
Para instalarlo y ejecutarlo:
apt-get install iptraf
PD: En ocasiones se recomienda crear el log
/var/log/iptraf/ip_traffic-1.log
Luego sale el cuadro de la licencia. Pulse cualquier tecla (Press a key to continue), y selecciona "IP Traffic Monitor". Luego elegir "All Interfaces" (o la tarjeta de red que quiera auditar) y presione Enter. Por ultimo presione la letra  S para elegir cómo quiere que muestre las estadísticas de conexiones (Seleccione en el teclado P Packet o B Byte)
Opciones (Flags)
Cada paquete TCP se le asocian opciones que están expresadas en letras (flags):
S: Es cuando se esta llevando a cabo un SYN (Sincronización) preparando una conexión. Por ejemplo si esta presente S—- es por que se pretende realizar un conexión. En caso de que aparezca S-A- es por que nos indica un reconocimiento de un pedido de conexión anterior.
A: es un reconocimiento (ACK) de un paquete recibido.
P: son los pedidos de prioridad para poder ser trasladados al principio de la cola.
U: indica la presencia de paquetes de datos urgentes.
RESET: la maquina de origen de esta dirección reseteó toda la conexión.
DONE: indica que la conexión ya terminó de enviar datos en esta dirección y envió un paquete de finalización (Fin).
CLOSED: El paquete de finalización (FIN) ha sido reconocida por la otra maquina.
-: este guión indica que la opción no se encuentra activa.
IP Traffic Monitor already listening on (eth0, eth1 etc)
En ocasiones puede ocurrir que estemos monitoreando una interfaz de red, cerramos IPtraf (ya sea a las buenas o a las malas) y al intentar abrirlo nuevamente para supervisar la misma u otra interfaz de red, nos sale el mensaje: "IP Traffic Monitor already listening" y el nombre de la interfaz.
En este caso debemos cerrar IPtraf (asegurarnos que esté completamente cerrado con  ps ax | grep iptraf), y eliminar el contenido de la carpeta  /var/run/iptraf/
Nota: No se recomienda eliminar el log de iptraf  ip_traffic-1.log (/var/log/iptraf/) a no ser que no desee conservar el histórico
Auditar con Iptraf en el navegador web
Otra manera de visualizar el tráfico con IPtraf es a través del navegador web (Mozilla, Chrome, etc). Para hacerlo realizamos el siguiente procedimiento (asumiendo que ya se tengamos instalado IPTraf y Apache2).
Creamos el nuevo archivo log
mkdir -p /var/www/html/iptrafaudit/iptrafaudit.log
Ahora asignaremos un puerto de escucha para los logs de IPtraf. Para ese ejemplo elegiremos 11300, pero puede ser cualquier otro no reservado. El siguiente paso es crear y editar el archivo de configuración para Apache2 e incluirle el puerto designado:
touch /etc/apache2/sites-enabled/iptrafaudit.conf
Con el siguiente contenido:
< VirtualHost *:11300 >
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html/iptrafaudit
 < Directory / >
  Options FollowSymLinks
  DirectoryIndex index.php index.html index.htm iptrafaudit.log
  AllowOverride None
 < /Directory >
 < Directory /var/www/html/iptrafaudit/ >
  AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
 < /Directory >
 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 < Directory "/usr/lib/cgi-bin" >
  AllowOverride None
  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
         Require all granted
 < /Directory >
 ErrorLog ${APACHE_LOG_DIR}/error.log
 # Possible values include: debug, info, notice, warn, error, crit,
 # alert, emerg.
 LogLevel warn
 CustomLog ${APACHE_LOG_DIR}/access.log combined
< /VirtualHost >
Nota: Por razones de visualización del código debe quitarle los espacios a los < >. Ejemplo: correcto  <virtualhost> incorrecto < virtualhost >
Ahora abrimos el puerto (11300) en nuestro firewall iptables:
wan=eth0 # interfaz de red publica
lan=eth1 # interfaz de red local
local=192.168.1.0 # IP red local
iptables=/sbin/iptables
netmask=24 # mascara de subred
$iptables -A INPUT -s $local/$netmask -i $lan -p tcp --dport 11300 -j ACCEPT
Y abrimos el puerto (11300) en Apache2, editando  /apache2/ports.conf y agregamos:
Listen 11300
Guardamos los cambios y agregamos una entrada al crontab, para enviar los logs de IPTraf al nuevo log que visualizaremos en la web. Para este ejemplo hemos seleccionado que se actualizará diariamente con 50 registros, pero podemos aumentar este número a discreción o modificar la frecuencia con que queremos que se actualice el log en crontab:
crontab -l | { cat; echo "@daily tail -50 /var/log/iptraf/ip_traffic-1.log > /var/www/html/iptrafaudit/iptrafaudit.log"; } | crontab -
Reiniciamos Apache2 y ya podemos acceder a los logs de IPtraf desde nuestro navegador con la ip del equipo al puerto designado. Ejemplo:
http://192.168.0.10:11300/iptrafaudit.log
o
http://192.168.0.10:11300/
Adicionalmente, si queremos tener el servicio Iptraf disponible 24/7, creamos un script vigilante con el siguiente contenido:
echo '# Iptraf Service
 date=`date +%d/%m/%Y" "%H:%M:%S`
 if [[ `ps -A | grep iptraf` != "" ]];then
 echo -e "\nONLINE"
 else
 echo -e "\n"
 killall iptraf >/dev/null 2>&1
 iptraf -i all -L /var/log/iptraf/ip_traffic-1.log -B
 service apache2 restart
 echo "Iptraf start $date" >> /var/log/syslog
 fi'> /etc/init.d/iptrafservice.sh
Este script levanta el servicio en caso de caída y envía un registro del evento a  /var/log/syslog
Le damos permisos de ejecución:
chmod +x /etc/init.d/iptrafservice.sh
Y lo programamos en el cron para que inicie con nuestro sistema:
sudo crontab -e
@reboot /etc/init.d/iptrafservice.sh
NetHogs
Otra aplicación que complementa IPtraf es NetHogs, que al igual que IPTraf permite monitorizar nuestra red, pero se concentra en proporcionar datos fiables del consumo de internet de las conexiones y/o aplicaciones que se estén ejecutando en nuestro terminal, expresando los valores en velocidad de subida y bajada.
Instalarlo y ejecutarlo es simple (hay que ser root):
apt-get install nethogs
Los datos los muestra cada 1 segundo y de todas las interfaces que tengamos, pero si queremos mostrar la información cada X segundos y de una interfaz específica, ejecutamos:
nethogs -d 5 eth1
nethogs -d 10 wlan0 # (o wlp1s0)
Con la tecnología de Blogger.