El plugin iptables de collectd se encarga de recuperar contadores de paquetes y bytes del firewall del kernel Linux para IPv4 e IPv6. Este plugin requiere que se especifique qué reglas se desean monitorear (seleccionar qué contadores registrar). Es posible seleccionar reglas de una tabla y cadena por su comentario o por su número de regla (posición).

Dependiendo de la configuración de cada firewall es posible recolectar estadísticas de paquetes/bytes para cierto servicio, host fuente/destino, paquetes descartados, etc.

Un aspecto interesante, desde el punto de vista de la eficiencia de la implementación, es que este plugin utiliza la librería libiptc en lugar de la herramienta iptables. Esto significa que se comunica directamente con el kernel y la sobrecarga es tan baja como sea posible. Cabe recordar que collectd está especialmente enfocado en la eficiencia ya que apunta a ser utilizado en sistemas embebidos y routers (OpenWRT).

Este artículo demuestra cómo configurar el plugin iptables de collectd para visualizar contadores de bytes y paquetes con Grafana.



Compilar collectd con soporte para iptables

Para poder utilizar el plugin iptables es necesario compilar collectd con soporte para iptables, agregando la opción --enable-iptables. Esto requiere que el sistema cuente con las librerías de desarrollo de iptables (libiptc).

Para instalar esta dependencia en Debian y derivados:

# apt-get install iptables-dev

En CentOS y derivados:

# yum install iptables-devel

Luego configurar y compilar collectd con soporte para iptables:

# ./configure --enable-iptables

Comparto los siguientes scripts de compilación de collectd para Debian y CentOS.

La instalación y configuración de InfluxDB, junto con la configuración del plugin "network" (que permite enviar las métricas recolectadas por collectd a una base de datos InfluxBD) se explican detalladamente en el artículo Compilar y configurar collectd con InfluxDB en Debian y derivados.

Configurar el plugin iptables

Habiendo instalado correctamente collectd, configurar el plugin editando el archivo de configuración del demonio:

# nano collectd.conf

Habilitar el plugin:

LoadPlugin iptables

Configurar el plugin "iptables":

<Plugin iptables>
        Chain "filter" "INPUT" 6
        Chain "filter" "INPUT" 7
        Chain "filter" "INPUT" 8
#       Chain6 table chain
</Plugin>

Este plugin registra cada regla del firewall de forma independiente. Las reglas a monitorear se seleccionan por su respectivo número (ver la salida de iptables -t filter -nL INPUT -v -x --line-numbers) o por su comentario.

En este ejemplo de configuración se monitorean los contadores de las reglas 6, 7 y 8 de la cadena "INPUT" en la tabla "filter".

El artículo Visualizar contadores y números de reglas de iptables demuestra cómo identificar el número de cada regla para identificar qué reglas se desean monitorear.

La desventaja de la configuración del plugin por número de regla es que, si se reconfigura el firewall del sistema alterando el orden de las reglas (o agregando reglas nuevas en posiciones intermedias), será necesario reconfigurar collectd para reflejar el cambio. Sin embargo reconfigurar o alterar un firewall en un sistema en producción es una tarea muy poco frecuente.

Finalmente, reiniciar collectd:

# service collectd stop && service collectd start

Siempre que se reconfigura y reinicia collectd, es recomendable verificar los mensajes en el log del sistema (/var/log/syslog en Debian y derivados, /var/log/messages en CentOS y derivados) para asegurarse de que el demonio haya iniciado correctamente y todos los plugins estén funcionando (y su configuración sea correcta sintáctica y semánticamente):

Oct 29 09:11:20 debian collectd[27114]: Exiting normally.
Oct 29 09:11:20 debian collectd[27114]: collectd: Stopping 5 read threads.
Oct 29 09:11:20 debian collectd[27114]: collectd: Stopping 5 write threads.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "syslog" successfully loaded.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "apache" successfully loaded.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "cpu" successfully loaded.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "interface" successfully loaded.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "iptables" successfully loaded.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "load" successfully loaded.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "memory" successfully loaded.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "network" successfully loaded.
Oct 29 09:11:23 debian collectd[12644]: plugin_load: plugin "tcpconns" successfully loaded.
Oct 29 09:11:23 debian collectd[12645]: Initialization complete, entering read-loop.
Oct 29

Graficar contadores de iptables en Grafana

La siguiente consulta en InfluxDB permite graficar un contador de iptables en Grafana:

SELECT derivative(mean("value"), 10s) FROM "iptables_value" WHERE ("host" = 'www.linuxito.com' AND "instance" = 'filter-INPUT' AND "type" = 'ipt_packets' AND "type_instance" = '6') AND $timeFilter GROUP BY time($__interval) fill(none)

El tag "instance" selecciona un par tabla-cadena; "type" selecciona paquetes o bytes; mientras que "type_instance" selecciona la regla por su número.De esta forma, la consulta anterior visualiza el contador de paquetes procesados a través de la regla 6 de la cadena "INPUT" en la tabla "filter" para el host "www.linuxito.com":

Debido a que los contadores de iptables no son deltas/gauges (mediciones en un instante o periodo de tiempo) sino precisamente contadores (valga la redundancia), es importante destacar que es conveniente aplicar la transformación derivada (derivative(mean("value"), 10s)) sobre la serie de tiempo. Esto permite graficar la variación de los contadores a lo largo del tiempo de forma conveniente.

Referencias


Tal vez pueda interesarte


Compartí este artículo