NtopNG

Desde hace mucho tiempo se viene hablando de las bondades de NtopNG. El portal ElHacker.net la define como "una poderosa herramienta que permite analizar en tiempo real el tráfico de red. Esto te permite evaluar el ancho de banda utilizado por ips o hosts individuales, por puertos, e identificar los protocolos de red más utilizados". 
Entre sus características más destacadas tenemos: ordenar el tráfico de red de acuerdo con muchos protocolos; mostrar tráfico de red y IPv4/v6 hosts activos; guardar el disco estadísticas persistentes de tráfico en formato RRD; geolocalizar anfitriones; descubre los protocolos de aplicación mediante el aprovechamiento de NDPI, ntops marco DPI; caracterizar el tráfico HTTP mediante el aprovechamiento de los servicios de caracterización proporcionadas por block; mostrar la distribución del tráfico IP entre los diversos protocolos; analizar el tráfico IP y ordenarla de acuerdo con el origen / destino; matriz de subred Tráfico Mostrar IP (que está hablando con quién?); uso de protocolos IP Reportar ordenados por tipo de protocolo, etc, etc. En fin, una auténtica navaja suiza lo suficientemente buena como para que cualquier sysadmin la considere seriamente en su arsenal de herramientas de monitoreo de red y tiene un equipo de soporte muy profesional, con un tiempo de respuesta bastante rápido, algo que no ocurre con frecuencia en el mundo del open source.
Pero (en linux siempre hay un "pero" y NtopNG no es la excepción) no es una aplicación exenta de fallos; aunque, para ser justos, la mayoría de estos fallos no son de NtopNG sino de sus dependencias.
Fallos de Redis
Por ejemplo, redis-server, un almacén de estructura de datos de valores de clave en memoria rápido y de código abierto, que incorpora un conjunto de estructuras de datos en memoria versátiles que le permiten crear con facilidad diversas aplicaciones personalizada, y en muchos casos causa más problemas de los que podemos manejar. Hay infinidades de tutoriales en internet sobre cómo instalar NtopNG (medium, howtoforge, linuxhelp, etc.), pero casi ninguno aborda la gran cantidad de fallos de  esta dependencia.
redis bind problem
Redis Server, por defecto, incluye la línea bind 127.0.0.1 ::1 en su archivo de configuración /etc/redis/redis.conf. Si instalamos NtopNG en un equipo que toma las direcciones de sus interfaces por DHCP, no hay ningún problema con su funcionamiento, sin embargo, si utilizamos un servidor con más de una interfaz de red y direcciones IPs estáticas, la instalación de NtopNG se detiene abruptamente. Entonces lo lógico es instalar redis-server primero, cambiar esta línea por la IP de la máquina y luego lanzar la instalación de NtopNG, sin embargo puede que aún así tampoco funcione.
La solución más simple es la que propone DigitalOcean, que consiste en reemplazar 127.0.0.1 ::1 por 0.0.0.0 garantizando así que funcione en cualquier escenario (y de paso que no se detenga la instalación de NtopNG). Si no queremos editar el archivo de configuración podemos hacerlo con el comando sed (como dice BunIF). A continuación los comandos de instalación de Redis y NtopNG en secuencia (puede ponerlos en un bash script):
sudo apt -y install redis-server
sudo service redis-server stop # sudo systemctl stop redis-server.service
sudo sed -i '/^bind/s/bind.*/bind 0.0.0.0/' /etc/redis/redis.conf
if [ ! -d /var/run/redis ]; then sudo mkdir -p /var/run/redis && sudo chown redis /var/run/redis; fi
sudo service redis-server start # sudo systemctl start redis-server.service
sudo wget http://apt.ntop.org/18.04/all/apt-ntop.deb
sudo dpkg -i apt-ntop.deb
sudo apt update -y
sudo apt install pfring-dkms nprobe ntopng n2disk cento -y
Más problemas
Sin embargo estos no son los únicos problemas de redis. Una vez iniciado genera algunos errores que son tantos que es imposible mencionarlos todos. Para solventarlos hay que agregar algunos parámetros a los archivos de configuración de Linux /etc/security/limits.conf/etc/sysctl.conf , ejecutando en el terminal:
sudo sh -c 'echo "httpd soft nofile 4096" >> /etc/security/limits.conf'
sudo sh -c 'echo "httpd hard nofile 10240" >> /etc/security/limits.conf'
sudo sh -c 'echo "fs.file-max = 100000" >> /etc/sysctl.conf'
sudo sh -c 'echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf'
Se recomienda desactivar IPv6 si no lo va a usar (opcional):
net.ipv6.conf.all.disable_ipv6 = 1
Y activar el NAT  (opcional):
# temporal
echo 1 > /proc/sys/net/ipv4/ip_forward # default 0
# permanente
net.ipv4.ip_forward=1
Y finalmente recargar sysctl y sus variables sin reiniciar:
sudo sysctl -p
sudo sysctl --system
Lo anterior soluciona muchos problemas con redis. Se exceptúa el de hugpages:
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
Que se soluciona parcialmente con el comando explicado anteriormente:
sudo sh -c 'echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf'
Y para solucionarlo completamente, puede seguir las instrucciones descritas en stackoverflow.
Siguen los problemas
Otro de los problemas que acarrea redis (y que perjudica a NtopNG) son sus constantes caídas. Por esta razón, lo mejor es crear un script vigilante, para que se cerciore que los servicios están levantados y que deje constancia en syslog.
Por ejemplo crearemos un script bash que llamaremos ntopredis-reload.sh en /etc/init.d/:
#!/bin/bash
### BEGIN INIT INFO
# Provides:          ntopng-redis
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time.
# Description:       Enable service provided by daemon.
### END INIT INFO
# Ntopng
 date=`date +%d/%m/%Y" "%H:%M:%S`
 if [[ `ps -A | grep ntopng` != "" ]];then
  echo -e "\nONLINE"
 else
  echo -e "\n"
  killall ntopng >/dev/null 2>&1
  systemctl start ntopng.service
  echo "Ntopng start $date" >> /var/log/syslog
 fi

# Redis-Server
 date=`date +%d/%m/%Y" "%H:%M:%S`
 if [[ `ps -A | grep redis-server` != "" ]];then
  echo -e "\nONLINE"
 else
  echo -e "\n"
  killall redis-server >/dev/null 2>&1
  systemctl start redis-server.service
  echo "redis-server start $date" >> /var/log/syslog
 fi'
Y en el terminal ejecutamos el siguiente comando para programarlo en el cron que se ejecute cada 10 minutos:
sudo chmod +x /etc/init.d/ntopredis-reload.sh
sudo crontab -l | { cat; echo "*/10 * * * * /etc/init.d/ntopredis-reload.sh"; } | sudo crontab -
Falsos positivos
Otro mensaje recurrente de redis es que no encuentra el PID:
En realidad es un falso positivo, ya que con el comando descrito anteriormente:
if [ ! -d /var/run/redis ]; then sudo mkdir -p /var/run/redis && sudo chown redis /var/run/redis; fi
Nos aseguramos de que exista el directorio /var/run/redis, que tenga el propietario correcto y que al reiniciar redis, cree el PID redis-server.pid. Hay una solución para este problema, pero no aplica para todos los sistemas linux. Además, el mensaje desaparece cuando haya conexión con redis.
Redis no inicia
Otro fallo puede ser en el servicio de redis:
Failed to start redis.service: Unit redis-server.service is masked
Solución:
sudo systemctl unmask redis-server.service
Fallos de NtopNG
NtopNG en Mozilla Firefox Quantum
Finalmente entrando en el objeto de nuestro post (hablar de NtopNG), es mejor usar Mozilla Firefox (u Opera) para acceder a este aplicativo, ya que al cambiar la contraseña por default en algunos casos Google Chrome impide nuevamente el login. Sin embargo esto se puede solucionar vaciando la caché de Chrome a una fecha antes del cambio de password o accediendo en modo incógnito.
Logs desbordados
Otro problema con NtopNG es que sale el siguiente error cada 3 segundos desbordando syslog:
[Utils.cpp:1713] ERROR: Could not open /var/lib/ntopng/category_lists/Cisco Talos Intelligence.txt.new for write
[LuaEngine.cpp:8741] WARNING: Script failure [/usr/share/ntopng/scripts/callbacks/system/housekeeping.lua][/usr/share/ntopng/scripts/lua/modules/lists_utils.lua:259: attempt to index a number value (local 'res')]
La solución es actualizar el aplicativo y ejecutar en el terminal:
systemctl stop ntopng
rm -rf /var/lib/ntopng/category_lists
systemctl start ntopng
Aviso de segmentación (large send offload LSO y generic segmentation offload GSO):
Un aviso recurrente de NtopNG está relacionado con la segmentación:
Este mensaje es normal si no ha declarado las interfaces de red en el archivo de configuración de NtopNG (switch -i. Ejemplo: -i=wlp1s0 etc). Sin embargo no es imprescindible declarar las interfaces de red, ya que ntopng las detecta automáticamente, así que pueden ignorar este aviso o ejecutar el siguiente comando:
sudo ethtool -K lo gro off gso off tso off
Para mayor información vea el issue#2462.
Parámetros recomendados
A continuación algunos parámetros recomendados de NtopNG. Ejecute en el terminal:
sudo systemctl stop ntopng.service
# para convertir ntopng en un demonio:
sudo sh -c 'echo "--daemon" >> /etc/ntopng/ntopng.conf'
# para activar la licencia de la comunidad (free):
sudo sh -c 'echo "--community" >> /etc/ntopng/ntopng.conf'
# para resolver tanto las IPs locales como las que no lo son:
sudo sh -c 'echo "--dns-mode 1" >> /etc/ntopng/ntopng.conf'
sudo systemctl start ntopng.service
Licencias
Tenga en cuenta que si bien NtopNG tiene una versión comunitaria (free), nprobe y cento (otras dos dependencias de NtopNG) requieren de licenciamiento y trabajan en modo demo, por tanto si cuenta con los recursos económicos, vale la pena adquirir la versión completa de este aplicativo web de monitoreo.

Para cualquier otra información, consulte Ntop Guides

Con la tecnología de Blogger.