¿Qué es Iptables? Iptables en Ubuntu 21.10 Impish Idri
¿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
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
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.
¿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:
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:
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:
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:
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:
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
¿Cómo listar las reglas?
Puede listar las reglas utilizando el comando:
$sudo iptables -L
También lo puede hacer con el siguiente comando:
$sudo iptables -S
¿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
En la imagen anterior se le pregunta si desea grabar las reglas IPv4 actuales en el archivo “/etc/iptables/rules.v4”, puede indicarle “Yes”
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
Si revisamos el archivo “/etc/iptables/rules.v4” y “/etc/iptables/rules.v6” veremos que estos archivos están completamente vacíos.
En este momento, voy a grabar unas reglas creadas, lo haré con el siguiente comando:
$sudo iptables-save | sudo tee /etc/iptables/rules.v4
Al reiniciar la máquina los cambios deberían ser persistentes, a continuación, se reinicia la máquina:
Al iniciar la máquina nuevamente, se puede observar que los cambios son persistentes:
¿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
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
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
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.
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
si observamos la tabla a continuación, veremos los siguiente:
Para probar la política por defecto vamos a hacer ping desde una máquina diferente a el host donde está instalado iptables:
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.
¿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
Otras Entradas
Introducción a la Seguridad en AI – Parte 2
Después de entender los principales ataques, técnicas, tácticas y procedimientos...
Leer másIntroducción a la Seguridad en AI
Cuando hablamos de Seguridad en AI (Artificial Intelligence o Inteligencia...
Leer más5 pilares para Hackers o Profesionales en Ciberseguridad desde una perspectiva técnica
Después de la master class que realizamos en Be Hacker...
Leer más