6.2. Tablas

La opción -t especifica qué tabla utilizar. Por defecto se emplea la tabla filter, aunque se puede usar cualquiera de las siguientes tablas (ten en cuenta que este es un corto resumen del capítulo Atravesando tablas y cadenas):

Table 6-1. Tablas

TablaDescripción
natLa tabla nat se emplea principalmente para la traducción de direcciones de red (Network Address Translation). Los paquetes que son filtrados por esta tabla acaban con sus IPs modificadas, de acuerdo con nuestras reglas (las de la tabla). De todos los paquetes de un mismo flujo, sólo el primero pasa por esta tabla: asumiendo que se permite el paso del primer paquete de un flujo, al resto de paquetes del ese flujo se les aplican automáticamente las mismas acciones realizadas con el primer paquete (sus IPs son "NAT-eadas" o filtradas por la tabla NAT; o se enmascaran; ...). En otras palabras, sólo el primer paquete pasa por la tabla NAT y al resto del flujo se le trata exactamente igual sin necesidad de pasar por la tabla. Esta es la razón principal por la que no deberías hacer ningún filtrado en esta tabla, y lo comentaremos en detalle más adelante. La cadena PREROUTING se emplea para modificar los paquetes en cuanto llegan al cortafuegos. La cadena OUTPUT se utiliza para modificar los paquetes generados localmente (es decir, en el cortafuegos) antes de tomar la decisión de enrutado (direccionamiento). Por último la cadena POSTROUTING se usa para modificar los paquetes que están a punto de abandonar el cortafuegos.
mangleEsta tabla se emplea principalmente para "retocar" paquetes. Entre otras cosas, se puede cambiar el contenido de diferentes paquetes y el de sus cabeceras. Por ejemplo, se pueden cambiar los campos TTL, TOS o MARK. Se debe tener en cuenta, sin embargo, que modificar el campo MARK no es realmente un cambio del paquete, pero se establece su valor para el paquete dentro del espacio del núcleo. Otras reglas o programas pueden usar ese valor más adelante para filtrar o efectuar un enrutado avanzado; tc es un ejemplo. La tabla consta de cinco cadenas: PREROUTING, POSTROUTING, OUTPUT, INPUT y FORWARD. PREROUTING se emplea para modificar los paquetes en cuanto llegan al cortafuegos y antes de que alcancen la decisión de enrutado. POSTROUTING se emplea para modificar los paquetes en cuanto las decisiones de enrutado se han tomado. OUTPUT se emplea para modificar los paquetes generados localmente, antes de que alcancen la decisión de enrutado. INPUT se emplea para modificar paquetes que se han redirigido al ordenador local, pero antes de que la aplicación del espacio de usuario llegue a ver la información. FORWARD se emplea para modificar paquetes que acaban de pasar por la primera decisión de enrutado, pero antes de que lleguen a la última decisión de enrutado. Ten en cuenta que esta tabla no puede emplearse para cualquier tipo de traducción de direcciones de red (Network Address Translation) o enmascaramiento (Masquerading): la tabla nat es la que tiene esa función.
filterLa tabla filter se debería emplear exclusivamente para filtrar paquetes. Por ejemplo, se pueden DROP (desechar), LOG (añadir a un registro de sucesos), ACCEPT (aceptar) o REJECT (rechazar) paquetes sin problemas, igual que en el resto de tablas. Tenemos tres cadenas en esta tabla: la primera (FORWARD) se usa para todos los paquetes que no se generan localmente y que no están destinados a nuestra máquina (el cortafuegos, en otras palabras). INPUT se emplea en todos los paquetes que se destinan a nuestra máquina (el cortafuegos), mientras que OUTPUT se emplea para todos los paquetes generados localmente.

Todo lo anterior debería haber aclarado los conceptos básicos sobre las tres tablas diferentes que hay disponibles. Deben usarse para propósitos completamente diferentes y además deberías saber cómo utilizar cada una de las cadenas existentes. Si no comprendes cómo se usan, es fácil que introduzcas un agujero en el cortafuegos que tarde o temprano descubrirá y explotará alguien. Ya se han discutido en profundidad las tablas y cadenas en Atravesando tablas y cadenas. Si no lo entiendes a la perfección, te recomiendo que vuelvas a leerlo hasta que lo comprendas totalmente.