Hace un tiempo escribí un tutorial básico sobre iptables que permite entender los conceptos básicos detrás del firewall (cortafuegos) del kernel Linux. En ese tutorial demostré cómo listar las reglas de las diferentes cadenas de una tabla. Veamos ahora cómo es posible listar o visualizar los contadores para cada regla de una cadena, junto con su respectivo número.

Para refrescar la memoria, las reglas de una cadena se listan con la opción -L. A su vez es recomendable agregar la opción -n para evitar resoluciones DNS reversas de direcciones IP y mostrar números de puertos (en lugar de servicios relacionados a los mismos):

# iptables -nL

Por ejemplo:

[root@centos ~]# iptables -t filter -nL INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
REJECT     all  --  0.0.0.0/0            127.0.0.0/8         reject-with icmp-port-unreachable
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2222
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 8
LOG        all  --  0.0.0.0/0            0.0.0.0/0           limit: avg 5/min burst 5 LOG flags 0 level 7 prefix `iptables denied: '

Como se observa, también se puede especificar la tabla que se desea examinar (en este caso "filter") y la cadena ("INPUT").

Ahora bien, el kernel Linux mantiene ciertos contadores que indican el número total de paquetes y bytes que fueron procesados por cada una de las reglas de una cadena. Por cuestiones de monitoreo o estadística puede ser útil consultar y almacenar periódicamente estos valores.

Listar contadores

Del manual de iptables:

       -v, --verbose
              Verbose output.  This option makes the list command show the interface name, the rule  options
              (if  any),  and  the TOS masks.  The packet and byte counters are also listed, with the suffix
              ’K’, ’M’ or ’G’ for 1000, 1,000,000 and 1,000,000,000 multipliers respectively (but see the -x
              flag  to  change  this).   For  appending,  insertion,  deletion  and replacement, this causes
              detailed information on the rule or rules to be printed.

La opción -v (verbose) muestra información adicional como el nombre de la interfaz, opciones de cada regla, etc. junto con los contadores.

       -x, --exact
              Expand numbers.  Display the exact value of the packet and byte counters, instead of only  the
              rounded  number  in  K’s  (multiples  of  1000)  M’s (multiples of 1000K) or G’s (multiples of
              1000M).  This option is only relevant for the -L command.

Por otro lado, la opción -x (exact) hace que se muestren los valores exactos en lugar de redondear a unidades amigables.

De esta forma, las primeras dos columnas de la salida muestran la cantidad de paquetes y bytes (respectivamente) procesados por cada regla de una cadena:

[root@centos ~]# iptables -t filter -nL INPUT -v -x
Chain INPUT (policy DROP 492126 packets, 49622816 bytes)
    pkts      bytes target     prot opt in     out     source               destination
 1355733 1521514611 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
       0          0 REJECT     all  --  !lo    *       0.0.0.0/0            127.0.0.0/8         reject-with icmp-port-unreachable
     586      35160 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
  501136   42085663 ACCEPT     all  --  eth1   *       0.0.0.0/0            0.0.0.0/0
      37       2344 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2222
   19474     927852 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
   26854    1430680 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443
     358      17346 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
   85573   11305329 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/min burst 5 LOG flags 0 level 7 prefix `iptables denied: '

Visualizar los números de regla

Tal como explica el tutorial de iptables, cada regla en una cadena tiene una posición que se indica a través de un número. Este número define el ordenamiento de las reglas.

Del manual de iptables:

       --line-numbers
              When listing rules, add line numbers to the beginning of  each  rule,  corresponding  to  that
              rule’s position in the chain.

Así es que, a fin de visualizar el número de cada regla de una cadena, se agrega la opción --line-numbers:

[root@centos ~]# iptables -t filter -nL INPUT -v -x --line-numbers
Chain INPUT (policy DROP 494554 packets, 49873757 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1     1380783 1544288076 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2           0          0 REJECT     all  --  !lo    *       0.0.0.0/0            127.0.0.0/8         reject-with icmp-port-unreachable
3         593      35580 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
4      503633   42296829 ACCEPT     all  --  eth1   *       0.0.0.0/0            0.0.0.0/0
5          37       2344 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2222
6       19486     928436 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
7       27367    1457528 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443
8         361      17482 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
9       86037   11366969 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/min burst 5 LOG flags 0 level 7 prefix `iptables denied: '

Referencias


Tal vez pueda interesarte


Compartí este artículo