que-es-iptables-ciberseguridad-behackerpro

 ¿Qué es Iptables? 

Es una utilidad que permite a los administradores de un sistema Linux, realizar la configuración de las reglas de filtrado para los paquetes, se implementa como diferentes módulos Netfilter, los filtros son organizados en diferentes tablas, las cuales contienen reglas para realizar todo tipo de tratamiento referente a los paquetes que interactúan con el host

 

¿Existió algún paquete que antecedió a Iptables?

La utilidad que antecedió a iptables se llamaba ipchain y funcionaba con versiones anteriores al kernel Linux 2.4

 

¿Existe algún reemplazo para iptables?

 

Existe un reemplazo para Iptables denominado nftables, está disponible desde el kernel Linux versión 3.13; nftables también reemplaza: ip6tables, arptables y ebtables


¿Qué variante del comando iptables estoy utilizando?


El comando iptables tiene dos variantes: iptables-legacy (legacy) y el iptables-nft (nf_tables)

Para saber cual de los dos se está utilizando, se puede emitir el siguiente comando:

 

$iptables -V

 

que-es-iptables-img1

 

En caso de que se esté utilizando la variante nf_tables, esto aparecerá después de la versión; si se está utilizando el legacy, no aparecerá nada entre paréntesis.

 

Iptables en Ubuntu

 

En esta oportunidad vamos a desinstalar el “frontend” ufw, utilizando el comando:

 

$sudo apt-get remove ufw

 

que-es-iptables-img2

 

Dado que ufw viene instalado por defecto en Ubuntu y “ufw” es una especia de “frontend” de iptables; es casi seguro (99,99….9 %) que ya tenga iptables instalado, si por alguna razón no es así, puede utilizar el siguiente comando para instalarlo.

 

que-es-iptables-img3

 

¿Cómo funciona Iptables?

 

Iptables funciona mediante el uso de unas tablas (tables), esas tablas contienen cadenas (chains) y estas cadenas contienen reglas (rules)

 

¿Qué tablas tiene Iptables?

 

Iptables tiene por defecto 5 tablas: filter, nat, mangle, raw y security

 

Tabla filter

 

A continuación, se muestra la tabla filter con sus cadenas y reglas:

 

que-es-iptables-img5

 

Esta tabla se utiliza para el filtrado de paquetes, se podría decir que esta tabla es la que le da la connotación de “firewall” a iptables.

 

Vemos en esta tabla 3 cadenas:

 

  • INPUT: En esta cadena se definen las reglas que se van a aplicar a los paquetes que vienen dirigido a este host.

 

  • FORWARD: En esta cadena se definen las reglas que van a aplicar a los paquetes que no son generados por este host, ni vienen dirigidos a este host, es decir, aplican a los paquetes que atraviesan el host, en caso de que este host actúe como una especie de “enrutador
  • OUTPUT: En esta cadena se definen las reglas que se van a aplicar a los paquetes que se originan en este host y van hacia otros hosts.

 

Tabla nat

 

A continuación, se muestra la tabla nat con sus cadenas y reglas:

 

que-es-iptables-img6

 

La tabla nat se utiliza principalmente para implementar reglas relacionadas con la traducción de direcciónes (Network Address Translation –  NAT);  a los paquetes “nateados” se les altera la dirección IP de acuerdo con las reglas definidas.

 

  • PREROUTING: La cadena es utilizada para modificar los paquetes tan pronto como llegan al firewall

 

  • OUTPUT: La cadena es utilizada para alterar los paquetes generados en el mismo host antes de que lleguen a la etapa de enrutamiento.

 

  • POSTROUTING: Se utiliza para alterar paquetes que están a punto de “dejar” el firewall.

Tabla mangle

 

A continuación, se muestra la tabla mangle con sus cadenas y reglas:

 

que-es-iptables-img7

 

La tabla mangle se utiliza para la manipulación especializada de paquetes, se pueden realizar operaciones en de cambio en el paquete y sus encabezados, como: cambiar el TTL (Time To Live), TOS (Type Of Service) o MARK

 

  • PREROUTING: En esta cadena se definen reglas para alterar paquetes entrantes antes de que sean enrutados.

 

  • INPUT: Esta cadena aplica a los paquetes que vienen hacia el propio host

 

  • FORWARD: Cadena utilizada para alterar paquetes que son enrutados a través del propio host.

 

  • OUTPUT: Cadena utilizada para manipular paquetes generados en el propio host, antes de ser enrutados

 

  • POSTROUTING: Cadena utilizada para alterar paquetes que están a punto de salir

Tabla raw

 

A continuación, se muestra la tabla raw con sus cadenas y reglas:

 

que-es-iptables-img8

 

Esta tabla se utiliza principalmente para configurar excepciones para el seguimiento a conexiones en combinación con el target NOTRACK

 

Tabla security

 

A continuación, se muestra la tabla security con sus cadenas y reglas:

 

que-es-iptables-img9

 

Esta tabla es utilizada para reglas de networking Mandatory Access Control (reglas implementadas por módulos de seguridad en Linux como SELinux), como aquellas habilitadas por los targets SECMARK y CONNSECMARK

En resumen ¿Qué cadenas contiene cada una de las tablas mencionadas anteriormente?

 

Las tablas contienen una cadenas predefinidas; a continuación, en la tabla podrá ver cada una de las tablas con sus respectivas cadenas

Tabla

Cadena (chain)

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

filter

 

✔

✔

✔

 

nat

✔

✔

 

✔

✔

mangle

✔

✔

✔

✔

✔

raw

✔

   

✔

 

security

 

✔

✔

✔

 

 

¿Cómo listar los módulos cargados en iptables?

 

Para listar los módulos disponibles para iptables utilice el siguiente comando:

 

$ls /lib/modules/5.13.0-23-generic/kernel/net/netfilter/

 

Para listar los módulos cargados utilice el siguiente comando:

 

$sudo cat /proc/net/ip_tables_matches

 

que-es-iptables-img10

 

¿Cómo listar las reglas?

 

Puede listar las reglas utilizando el comando:

 

$sudo iptables -L

 

que-es-iptables-img11

 

También lo puede hacer con el siguiente comando:

 

$sudo iptables -S

 

que-es-iptables-img12

 

¿Cómo borrar las reglas?

 

Para borrar las reglas de forma temporal, usted podría utilizar las siguientes comandos:

 

$sudo iptables –flush

 

o

 

$sudo iptables -F

 

El borrado anterior es temporal, así que si usted quiere que sea definitivo, debe instalar el paquete iptables-persistent y realizar algunos otros procedimientos, que se podrán leer a continuación.

¿Cómo grabar las reglas creadas para que sean almacenadas y cargadas con el arranque del sistema operativo en Ubuntu?

 

Se recomienda instalar el paquete iptables-persistent de la siguiente forma:

 

$sudo apt-get install iptables-persistent

 

que-es-iptables-img13

 

En la imagen anterior se le pregunta si desea grabar las reglas IPv4 actuales en el archivo “/etc/iptables/rules.v4”, puede indicarle “Yes”

que-es-iptables-img14

 

En la imagen anterior se le pregunta si desea grabar las reglas IPv6 actuales en el archivo “/etc/iptables/rules.v6”, puede indicarle “Yes”

 

Una vez finaliza, mostrará lo siguiente

 

que-es-iptables-img15

 

Si revisamos el archivo “/etc/iptables/rules.v4” y “/etc/iptables/rules.v6” veremos que estos archivos están completamente vacíos.

 

que-es-iptables-img16

 

En este momento, voy a grabar unas reglas creadas, lo haré con el siguiente comando:

 

$sudo iptables-save | sudo tee /etc/iptables/rules.v4

 

que-es-iptables-img17

 

Al reiniciar la máquina los cambios deberían ser persistentes, a continuación, se reinicia la máquina:

 

que-es-iptables-img17

 

Al iniciar la máquina nuevamente, se puede observar que los cambios son persistentes:

 

que-es-iptables-img18

 

¿Cómo se ingresa una regla en iptables?

 

La sintaxis para ingresar una regla se ve a continuación:

 

$sudo iptables [ -t Nombre-de-tabla] <parámetro-1> <opción-1> <parámetro-n> <opción-n> 

 

Ejemplo:

 

Hacer accesible un servicio https:

$sudo iptables -A INPUT -p tcp –dport 443 -m state –state NEW,ESTABLISHED -j ACCEPT

 

$sudo iptables -A OUTPUT -p tcp –sport 443 -m state –state ESTABLISHED -j ACCEPT

¿Cómo permitir el acceso vía SSH a un host que filtra paquetes con Iptables?

 

En esta oportunidad, pueden ver que la política por defecto para INPUT y OUTPUT es ACCEPT, la idea sería habilitar el acceso vía SSH y posteriormente cambiar esta política a DROP

 

que-es-iptables-img19

 

Para habilitar el acceso vía SSH debemos utilizar los siguientes comandos:

 

Comando número 1

$sudo iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT

 

El comando anterior se explica de la siguiente manera:

 

-A INPUT < – – – Añade (-A) la regla a la cadena INPUT

-p tcp < – – – Se selecciona el protocolo (-p) de la regla, en este caso tcp

–dport 22 < – – –  Se configura el puerto de destino (–dport) para el paquete, en este caso, el puerto 22

-m conntrack < – – – Se selecciona el módulo conntrack

–ctstate NEW,ESTABLISHED < – – – Se selecciona el estado de la conexión, para este caso NEW (Nueva) y ESTABLISHED (Establecida)

-j ACCEPT < – – – Se indica el target ACCEPT 

 

Comando número 2

 

sudo iptables -A OUTPUT -p tcp –sport 22 -m conntrack –ctstate ESTABLISHED -j ACCEPT

 

El comando anterior se explica de la siguiente manera:

 

-A OUTPUT < – – – Añade (-A) la regla a la cadena OUTPUT

-p tcp < – – – Se selecciona el protocolo (-p) de la regla, en este caso tcp

–sport 22 < – – – Se configura el puerto de origen (–sport) del paquete, en este caso, el puerto 22

-m conntrack < – – – Se selecciona el módulo conntrack

-ctstate ESTABLISHED < – – – Se selecciona el estado de la conexión, para este caso ESTABLISHED (Establecida)

-j ACCEPT < – – – Se indica el target ACCEPT

 

Una vez emitidos los comando anteriores, liste las reglas de la tabla filter mediante el comando:

 

$sudo iptables -L 

 

que-es-iptables-img20

 

A continuación, conéctese vía SSH a la máquina y verifique  que se este generando coincidencia en paquetes, utilice para ello el siguiente comando:

$sudo iptables -L -v

 

que-es-iptables-img21

 

como puede ver en la imagen anterior, se están generando paquetes relacionados con las reglas establecidas previamente, ello nos da cierta certidumbre de que estas reglas son las adecuadas para permitir el acceso vía SSH, a continuación, se procede a realizar el cambio de política por defecto para las cadenas INPUT y OUTPUT de la tabla filter

 

¿Cómo cambiar la política por defecto en iptables?

 

Antes de cambiar la política por defecto en las cadenas INPUT y OUTPUT de ACCEPT a DROP, asegúrese de que el acceso vía SSH esté garantizado.

 

En la imagen se observa que la política por defecto en cada cadena es ACCEPT.

 

que-es-iptables-img22

 

Para cambiar la política por defecto de la cadena INPUT en la tabla filter utilice el siguiente comando:

 

$sudo iptables -P INPUT DROP

 

Para cambiar la política por defecto de la cadena OUTPUT en la tabla filter utilice el siguiente comando:

 

$sudo iptables -P OUTPUT DROP

 

que-es-iptables-img23

 

si observamos la tabla a continuación, veremos los siguiente:

 

que-es-iptables-img24

 

Para probar la política por defecto vamos a hacer ping desde una máquina diferente a el host donde está instalado iptables:

 

que-es-iptables-img25

 

En la siguiente imagen, se observa que 7 paquetes coinciden con la política por defecto; esto se debe a que las características del paquete no coincidieron con ninguna de las reglas de la cadena INPUT, por tal razón, se le aplica la política por defecto.

 

que-es-iptables-img27

 

¿Qué es un target o jump en iptables?

Estos le dicen a la regla que hacer con el paquete que coincide perfectamente con la sección match de la regla; los targets más conocidos son:

 

ACCEPT,  DROP, REJECT, DNAT, SNAT, MASQUERADE

¿Te gustó este post? por favor déjanos tus comentarios! Sé un buen HackerPro y comparte con tu comunidad! Suscríbete a Behackerpro

Suscríbete hoy a nuestros Cursos Exploratorios

Descubre cuál es tu perfil Hacker!

Otras Entradas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *