Header Ads

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.
Adicionalmente esta aplicación cuenta con una alta frecuencia de actualizaciones, lo que demuestra el constante trabajo de mejoras que realizan sus desarrolladores, y también cuenta con un soporte muy profesional, con un tiempo de respuesta bastante rápido; algo muy raro, tanto en el software libre como el privativo.
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, estos fallos, en su mayoría, no son precisamente de NtopNG sino de sus dependencias.
Problemas de Redis
Por ejemplo, redis-server, una dependencia de código abierto de NtopNG, que sirve como almacén de estructura de datos de valores de clave en memoria rápido, a veces 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 problemas de esta dependencia.
redis bind problem
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):
apt -y install redis-server
service redis-server stop # systemctl stop redis-server.service
sed -i '/^bind/s/bind.*/bind 0.0.0.0/' /etc/redis/redis.conf
if [ ! -d /var/run/redis ]; then mkdir -p /var/run/redis && chown redis /var/run/redis; fi
service redis-server start # systemctl start redis-server.service
wget http://apt.ntop.org/18.04/all/apt-ntop.deb
dpkg -i apt-ntop.deb
apt update -y
aapt 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:
sh -c 'echo "httpd soft nofile 4096" >> /etc/security/limits.conf'
sh -c 'echo "httpd hard nofile 10240" >> /etc/security/limits.conf'
sh -c 'echo "fs.file-max = 100000" >> /etc/sysctl.conf'
sh -c 'echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf'
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 (con privilegios):
sysctl -p
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:
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 mkdir -p /var/run/redis && 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:
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
Otro mensaje, que sale cada segundo y que también puede desbordar los logs, es uno relacionado con la dependencia cento ( flow exporter for lo):
Afortunadamente, con reiniciar NtopNG es suficiente para que el molesto mensaje desaparezca, mostrando un WARNING que la dependencia cento ha expirado el modo demo.
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:
ethtool -K lo gro off gso off tso off
Para mayor información vea el issue#2462.
Error: rrd_update_r
Otro error es de permisos sobre la carpeta /var/lib/ntopng/
Problemas de permisos sobre /var/lib/ntopng
Este problema se encuentra bien documentado en el FAQ Permission denied errors y en el issues#2625. Y se corrige así:
systemctl stop ntopng
chown -R ntopng:ntopng /var/lib/ntopng
find /var/lib/ntopng -type d -exec chmod 700 {} +
find /var/lib/ntopng -type f -exec chmod 600 {} +
systemctl restart ntopng
Invalid Packet Received
Otro problema de configuración, descrito en el issues #1268, muestra los siguientes mensajes:
invalid packet
Para resolverlo basta con agregar la siguiente línea a /etc/ntopng/ntopng.conf:
-m="192.168.0.0/24"
Cambie el CIDR en dependencia de su red local
Parámetros recomendados
A continuación algunos parámetros recomendados de NtopNG. Ejecute en el terminal:
systemctl stop ntopng.service
# para convertir ntopng en un demonio:
sh -c 'echo "--daemon" >> /etc/ntopng/ntopng.conf'
# para activar la licencia de la comunidad (free):
sh -c 'echo "--community" >> /etc/ntopng/ntopng.conf'
# para resolver tanto las IPs locales como las que no lo son:
sh -c 'echo "--dns-mode 1" >> /etc/ntopng/ntopng.conf'
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.

Actualización del script de instalación para Ubuntu 20.04
sudo apt -y install redis-server
sudo systemctl stop redis-server.service
sudo systemctl unmask 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 systemctl start redis-server.service
wget http://apt-stable.ntop.org/20.04/all/apt-ntop-stable.deb
sudo apt install ./apt-ntop-stable.deb
sudo apt update && sudo apt -y upgrade && sudo apt -y install --fix-missing && sudo apt-get -f -y install
sudo apt install pfring-dkms nprobe ntopng n2disk cento -y
sudo systemctl stop ntopng.service
echo "--daemon" | sudo tee -a /etc/ntopng/ntopng.conf
echo "--community" | sudo tee -a /etc/ntopng/ntopng.conf
echo "--dns-mode 1" | sudo tee -a /etc/ntopng/ntopng.conf
echo "-m=192.168.0.0/24" | sudo tee -a /etc/ntopng/ntopng.conf
sudo rm -rf /var/lib/ntopng/category_lists
sudo chown -R ntopng:ntopng /var/lib/ntopng
sudo find /var/lib/ntopng -type d -exec chmod 700 {} +
sudo find /var/lib/ntopng -type f -exec chmod 600 {} +
sudo systemctl start ntopng.service
sudo ethtool -K lo gro off gso off tso off
echo "Ntopng: http://localhost:3000 user: admin pass: admin"

Para cualquier otra información, consulte  Ntop Guides

Con la tecnología de Blogger.