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
man iptables
- Tutorial básico de iptables en Linux