Instalación y configuración de Ntop en openSUSE

Ntop es una herramienta que nos permite conocer y analizar la composición del tráfico de nuestra red a un nivel de detalle impresionante.

A diferencia de MRTG y aplicaciones similares, Ntop analiza los paquetes de la red y los agrupa según las direcciones MAC o IP (según como esté configurado) de origen y destino, inclusive agrupa el tráfico según los protocolos establecidos en la capa de transporte presente en el Modelo TCP/IP.

Esta herramienta es muy interesante porque nos permite conocer:
  • Que equipos están generando tráfico de red.
  • De donde y hacia donde van los paquetes.
  • La cantidad de paquetes y sus respectivos tamaños.
  • Total de paquetes TCP, UDP y otros.
  • Lo enviado y lo recibido.
  • Los tipos de servicio utilizados.
  • Los puertos a los cuales se ha conectado una u otra máquina.
Para mayor información sobre la misma pueden visitar éste artículo en Wikipedia.


Requisitos e instalación de Ntop

Necesitamos tener añadido el repositorio OSS a nuestro gestor de paquetes, si no lo tenemos añadido lo podemos hacer con el siguiente comando, en este caso para la versión 11.4 de openSUSE:
testsrv:~ # zypper ar -c -n 'OSS - Open Source Software Repo' http://download.opensuse.org/distribution/11.4/repo/oss/ OSS

Para instalar la herramienta Ntop en openSUSE ejecutamos el siguiente comando:
testsrv:~ # zypper install ntop
OBS: Para la versión 12.1 de openSUSE no es recomendable instalar el paquete de Ntop desde el repositorio OSS, ya que por alguna razón no se crea el archivo /etc/sysconfig/ntop. En su reemplazo es mejor probar instalar una versión más actualizada desde aquí mediante el método 1-Click Install, principalmente la versión proveída por el repositorio server:monitoring.


Configuración de la herramienta Ntop

Si bien las configuraciones que trae la herramienta por defecto luego de instalarla permiten realizar análisis básicos, es importante realizar ciertos ajustes en sus archivos de configuración y conocer algunas funcionalidades extras para que no tengamos problemas a la hora de analizar la información resultante.

Mi experiencia con la herramienta fue frustrante durante el principio. Cuando trataba de comparar la información recabada por la herramienta con las pruebas de tráfico que había ideado para analizar si la misma realmente funcionaba correctamente, encontré muchas inconsistencias que no comprendía hasta el punto de querer reemplazar la herramienta por otra, sin embargo, el problema no se encontraba en la herramienta, si no en su configuración.

Como esta herramienta era indispensable para recolectar la información que necesitaba para mi primer proyecto de Tesis, trabajé y realicé muchas pruebas con ella para comprobar su fiabilidad. Cuando logré encontrar las configuraciones correctas y poner todo a punto había invertido demasiado tiempo, tiempo que afectó en parte al incumplimiento de los plazos establecidos, incidiendo finalmente en el fracaso y en la cancelación definitiva del proyecto, ahora me arrepiento de no haber leído detenidamente el man de la herramienta mucho más antes.

Pues bien, a continuación se citan los pasos para configurar adecuadamente la herramienta Ntop, y así evitar que Ustedes pasen por lo mismo.
  1. Para comenzar necesitamos editar el archivo ntop ubicado en el directorio /etc/sysconfig:
    testsrv:~ # vi /etc/sysconfig/ntop
  2. Una vez editado el archivo buscamos la directiva NTOPD_IFACE para configurar el nombre de la interfaz por la cual se estarán capturando los paquetes. Si nuestro equipo cuenta con varias interfaces de red podemos destinar una exclusivamente para la captura de tráfico de red y destinar la otra para la gestión y el acceso remoto a los servicios de nuestra red local, todo depende de las necesidades y de lo que tratamos de analizar, en mi caso la directiva quedó configurada como sigue:
    NTOPD_IFACE="eth1"
  3. La siguiente directiva a configurar es NTOPD_PORT, que permite limitar el acceso remoto y especificar el puerto para acceder desde nuestro navegador preferido a la interfaz web de la herramienta Ntop. Por defecto la configuración es 127.0.0.1:3000, pero la misma limita a que solo se pueda acceder a la interfaz web desde el equipo donde se encuentra instalada la herramienta y no remotamente. Si tenemos un servidor dedicado para estas tareas en una sala aparte y, por comodidad y otros temas, deseamos tener acceso remoto a través del protocolo http (protocolo sin encriptación), podemos configurar la directiva especificando solamente el puerto y nada más como se muestra a continuación:
    NTOPD_PORT="3000"
  4. Pasamos a la directiva NTOPD_SSL_PORT, que al igual que la directiva NTOPD_PORT permite limitar el acceso remoto como especificar el puerto para el acceso a la interfaz web de la herramienta Ntop, pero específicamente para el protocolo de navegación segura https. Mi configuración para esta directiva fue la siguiente:
    NTOPD_SSL_PORT="3001"
  5. La directiva NTOP_USER permite definir con que usuario del sistema operativo se va a ejecutar el servicio Ntop, cuya configuración por defecto suele ser el usuario de sistema ntop. En versiones anteriores el usuario que aparecía por defecto era el usuario de sistema wwwrun, que como saben es el usuario encargado de la ejecución del servicio Apache. Yo recomiendo dejar la configuración por defecto:
    NTOP_USER="ntop"
  6. La directiva final es NTOP_ARGS, la misma permite configurar el comportamiento de la herramienta Ntop mediante la especificación de varios argumentos consecutivos separados por espacios a la directiva. Los argumentos son todos opcionales y la lista de argumentos válidos está disponible en el man de la herramienta Ntop, son los mismos argumentos que se puede pasar a la herramienta Ntop si la queremos ejecutar manualmente desde la linea de comandos. En mi caso está directiva la tengo configurado de la siguiente forma:
    NTOP_ARGS="-o -c -r 300 -p /etc/ntop/protocol_list.txt -m 192.168.2.0/24"

    ACLARACIÓN DE ARGUMENTOS:

    Como habrán visto más arriba, varios son los argumentos que han sido especificados en la directiva NTOP_ARGS. Ahora, la funcionalidad y el motivo por el cual cada argumento fue incluido se aclara a continuación:

    • -o: Ntop es una herramienta híbrida que permite analizar redes de capa 2 y 3 del modelo TCP/IP, que son la capa de Enlace de Datos (Acceso al Medio) y la capa de Red respectivamente. Si queremos realizar un seguimiento individual al tráfico de los equipos que se encuentran en sub-redes corporativas (red segmentada) o de redes externas, es recomendable incluir este argumento para que tráfico sea agrupado por las direcciones IP, ya que de forma contraria agruparía todo el tráfico de los equipos de las sub-redes en base a las direcciones MAC del equipo ruteador y no por las direcciones MAC de la interfaz de red de los equipos físicos remotos que queremos analizar. A continuación la descripción del parámetro según el man:
      -o | --no-mac
      ntop is a hybrid layer 2/3 network monitor. That is, it uses both the lower level, physical device address - the MAC (Media Access Control) address - and the higher level, logical, tcp/ip address (the familiar www.ntop.org or 131.114.21.9 address). This allows ntop to link the logical addresses to a physical machine with multiple addresses (This occurs with virtual hosts or additional addresses assigned to the interface, etc.) to present consolidated reporting.
    • -c: Cuando se instala la herramienta desde los repositorios, varios parámetros se encuentran configurados por defecto, este es el caso del parámetro PARM_HOST_PURGE_MINIMUM_IDLE que por defecto se encuentra definido a solo 10 minutos (según mi conocimiento en openSUSE). Este parámetro configura el tiempo de inactividad que se requiere de un equipo para purgar toda su información. Según el man tenemos la siguiente definición para el argumento -c:
      -c | --sticky-hosts
      Use this parameter to prevent idle hosts from being purged from memory.

      By default idle hosts are periodically purged from memory. An idle host is identified when no packets from or to that host have been monitored for the period of time defined by the value of PARM_HOST_PURGE_MINIMUM_IDLE in globals-defines.h.
      Les recomiendo configurar este parámetro como argumento para que durante el arranque de la herramienta ya se cargue la configuración, les comento además que he tenido mala experiencia tratando de configurar este parámetro desde la interfaz web.

    • -r 300: Este argumento configura la interfaz web de la herramienta para que cada 5 minutos actualice el contenido de la misma, la definición para este argumento en el man es el siguiente:
      -r | --refresh-time
      Specifies the delay (in seconds) between automatic screen updates for those generated HTML pages which support them. This parameter allows you to leave your browser window open and have it always displaying nearly real-time data from ntop.

      The default is 3 seconds. Please note that if the delay is very short (1 second for instance), ntop might not be able to process all of the network traffic.
    • -p /etc/ntop/protocol_list.txt: Como sabemos, la herramienta Ntop agrupa por cada equipo el tráfico que han generado, pero a la vez por cada equipo podemos saber que tipo de tráfico ha generado, si fue tráfico http, ftp, etc. Por defecto la herramienta identifica un grupo limitado de tipos de tráfico y el resto es agrupado como Otros, sin embargo, esta lista puede ser ampliada con este parámetro con el cual especificamos la ruta hacia un archivo de texto plano en donde podemos personalizar los tipos de servicios que nos interesan mediante una nomenclatura determinada. El contenido del archivo /etc/ntop/protocol_list.txt será abarcado más adelante en este mismo tutorial. Nuevamente la información del man:
      -p | --protocols
      This parameter is used to specify the TCP/UDP protocols that ntop will monitor. The format is <label>=<protocol list> [, <label>=<protocol list>], where label is used to symbolically identify the <protocol list>. The format of <protocol list> is <protocol>[|<protocol>], where <protocol> is either a valid protocol specified inside the /etc/services file or a numeric port range (e.g. 80, or 6000-6500).
    • -m 192.168.2.0/24: Si por ejemplo nuestro servidor de monitoreo Ntop se encuentra en la red 192.168.1.0/24, por defecto, todos los equipos de esa red que hayan generado algún tráfico y que haya sido detectado por la herramienta serán agrupados como tráfico LOCAL, demás tráfico será interpretado como REMOTO y será agrupado en otra sección.

      Si queremos incluir a los equipos de otro segmento de red (de un sector o sucursal) de nuestra red corporativa en la sección LOCAL de la herramienta, tenemos que indicarle manualmente con el parámetro -m la red que queremos agregar. En este ejemplo se agrega la red 192.168.2.0/24, si deseamos agregar más redes lo podemos hacer especificando las redes separadas por comas: Ej: -m 192.168.2.0/24,192.168.3.0/24,192.168.4.0/24
      -m | --local-subnets
      ntop determines the ip addresses and netmasks for each active interface. Any traffic on those networks is considered local. This parameter allows the user to define additional networks and subnetworks whose traffic is also considered local in ntop reports. All other hosts are considered remote.
  7. Luego de las configuraciones anteriores, en mi caso el archivo /etc/sysconfig/ntop quedó como se muestra a continuación:
    ## Path:           Network/Monitors/Ntop
    ## Description: ntop startup parameters
    ## Type: string(eth0)
    ## Default: eth0
    ## Config:
    ## ServiceRestart: ntop
    #
    # Specifies the network interface used by ntop
    #

    NTOPD_IFACE="eth1"

    ## Type: ip
    ## Default: 127.0.0.1:3000
    #
    # Supposing to start ntop at the port 3000,
    # the URL to access is http://hostname:3000/
    #
    # Please note that an HTTP server is NOT needed in
    # order to use the program in interactive mode.
    #

    NTOPD_PORT="3000"

    ## Type: integer(0:65535)
    ## Default:
    #
    # define SSL port. Please note, that you have to generate
    # a certificate to run run ntop with this option.
    # This may be done with the commands:
    # openssl req -new -x509 -sha1 -extensions v3_ca -nodes -days 365 -out cert.pem
    # cat privkey.pem cert.pem > /etc/ntop/ntop-cert.pem
    # /bin/rm -f privkey.pem cert.pem
    #
    # NTOPD_SSL_PORT="3001"
    #

    NTOPD_SSL_PORT="3001"

    ## Type: string
    ## Default: "ntop"
    #
    # define the user to run ntop. This should not be root!
    #

    NTOP_USER="ntop"

    ## Type: string
    ## Default: ""
    ## ServiceRestart: ntop
    #
    # Additional arguments when starting ntop with the init script
    # /etc/init.d/ntop or rcntop.
    #
    # See man 8 ntop for all available commandline options.
    #

    NTOP_ARGS="-o -c -r 300 -p /etc/ntop/protocol_list.txt -m 192.168.2.0/24"
  8. Ampliación de puertos conocidos: El siguiente paso consiste en crear el archivo protocol_list.txt en el directorio /etc/ntop según lo especificado como argumento en el archivo /etc/sysconfig/ntop. En este archivo podemos agregar una lista personalizada de tipos de tráfico que queremos separar en la herramienta Ntop para su posterior análisis, en mi caso la lista quedó como sigue:
    HTTP=http|www|https
    HTTP_SQUID=3128
    HTTP_ISA=8080|8081
    ORA_HTTP=7778
    CamSegur=1001
    Microsoft-DS=445
    FTP=ftp|ftp-data
    DNS=name|domain
    Telnet=telnet|login
    NBios-IP=netbios-ns|netbios-dgm|netbios-ssn
    Mail=pop-2|pop-3|pop3|kpop|smtp|imap|imap2
    DHCP-BOOTP=67-68
    SNMP=snmp|snmp-trap
    NNTP=nntp
    NFS=mount|pcnfs|bwnfs|nfsd|nfsd-status
    X11=6000-6010
    SSH=22
    Gnutella=6346|6347|6348
    Kazaa=1214
    WinMX=6699|7730
    DirectConnect=0
    eDonkey=4661-4665
    Messenger=1863|5000|5190-5193
    IM=12890
    Iperf=5001
    Norton=8014
    VNC=5900
    Ntop=3000|3001
    RemoteShell=514
    Para especificar un servicio personalizado primero colocamos un alias, por ejemplo HTTP_ISA, seguido va el signo igual "=" y luego el puerto o los puertos que deseamos incluir, en este caso los puertos son 8080 y 8081, los mismos van separados por el carácter "|". En vez de los puertos numéricos también se pueden utilizar sus respectivos alias especificados en el archivo /etc/services.

  9. Terminada la configuración específica de la herramienta, pasamos a registrar el servicio de la herramienta Ntop en los niveles de ejecución del sistema operativo:
    testsrv:~ # chkconfig --add ntop
  10. Seteamos la contraseña del usuario admin de la herramienta Ntop por primera vez:
    testsrv:~ # ntop -A -u wwwrun
    Sat Jun 13 11:24:08 2009 NOTE: Interface merge enabled by default
    Sat Jun 13 11:24:08 2009 Initializing gdbm databases
    ntop startup - waiting for user response!
    Please enter the password for the admin user:
    Please enter the password again:
    Sat Jun 13 11:24:24 2009 Admin user password has been set
    testsrv:~ #
  11. Abrimos los puertos en el firewall para permitir el acceso a la interfaz web de la herramienta. Para ello editamos el archivo SuSEfirewall2 del directorio /etc/sysconfig,
    testsrv:~ # vi +255 /etc/sysconfig/SuSEfirewall2
    y buscamos la directiva FW_SERVICES_EXT_TCP a la que le agregamos los dos puertos separados por un espacio.
    FW_SERVICES_EXT_TCP="3000 3001"
    Finalmente se guardan los cambios y se reinicia el servicio del cortafuegos:
    testsrv:~ # rcSuSEfirewall2 restart
  12. Por último solo resta iniciar el servicio ntop:
    testsrv:~ # service ntop start
    Starting service ntop done
    testsrv:~ #
  13. En este punto ya podemos acceder a la herramienta a través de su interfaz web mediante las siguientes URL:
    http://ip_o_nombre_servidor:3000
    https://ip_o_nombre_servidor:3001

  14. Para que la herramienta no almacene los datos de análisis de varios días, podemos configurar una tarea programada que se encargue de reiniciar periódicamente el servicio. Primero creamos un archivo llamado ntop en el directorio /etc/cron.d, luego lo editamos...
    testsrv:~ # touch /etc/cron.d/ntop
    testsrv:~ # vi /etc/cron.d/ntop

    Le agregamos el siguiente contenido:
    # Reinicia el servicio Ntop cada noche a las 00 horas
    00 00 * * * /etc/init.d/ntop restart > /dev/null
    Y finalmente reiniciamos el servicio cron para cargar la nueva tarea programada.
    testsrv:~ # /etc/init.d/cron restart


Configuración de Packet Sniffing

Cuando un switch recibe un paquete que tiene como destinatario a un equipo conectado al puerto 1 del mismo, el switch solo enviará a ese puerto el paquete de datos, haciendo que sea imposible que ese mismo paquete sea visible desde otro equipo que está conectado al mismo switch en otro puerto, a menos que....

Si, a menos que el switch en cuestión sea administrable y que nosotros tengamos acceso a él para configurar un puerto de mirroring al cual debe estar conectado el equipo de monitoreo (con herramientas para sniffing al estilo Ntop, Wireshark, tcpdump, etc.), a este puerto le podemos enviar una copia de todo el tráfico recibido en el puerto que queremos monitorear, con esto estaríamos haciendo traffic mirroring.

TRAFFIC MIRRORING:

Traffic mirroring consiste en reflejar todo el tráfico recibido y enviado por varios puertos hacia un puerto especial, para que los administradores de red puedan analizar los paquetes mediante técnicas de sniffing. Leyendo un artículo que ya no está online encontré un fragmento de texto relacionado con el tema y que me pareció bastante interesante:
Algunos switches permiten configurar uno de sus puertos como monitor o spanning port, para que se copie el trafico que va a traves del switch (normalmente solo el de uno de sus puertos) a ese puerto, funcionando como un Hub. Esto le sirve al administrador de la red para poder examinar problemas que ocurran. No siempre se puede enviar el 100% del trafico al puerto monitor, depende sobre todo de la carga de la red.


Forzar la limpieza de datos almacenados en Ntop

Para limpiar de manera forzada la información capturada y analizada por Ntop podemos eliminar físicamente los directorios en los cuales se encuentra contenido dicha información, los pasos se citan a continuación:
  1. Se para el servicio Ntop:
    testsrv:~ # service ntop stop
  2. Se procede a eliminar las carpetas en donde se encuentra almacenada la información relacionada a los monitoreos anteriores.
    testsrv:~ # cd /var/lib/ntop/
    testsrv:/var/lib/ntop # ls
    LsWatch.db addressQueue.db dnsCache.db fingerprint.db interfaces macPrefix.db ntop_pw.db prefsCache.db rrd
    testsrv:/var/lib/ntop # rm -Rf interfaces/
    testsrv:/var/lib/ntop # rm -Rf rrd/

  3. Se restablece el servicio Ntop.
    testsrv:~ # service ntop start
  4. Y con eso ya está, hemos eliminado toda la información de los monitoreos anteriores.


Capturas de pantalla







Enlaces externos

Comentarios