Iptables paso a paso
En esta oportunidad, les traigo un tutorial sobre Iptables paso a paso que les va a servir en principio a todos los compas de la Universidad del Comahue (Publica obviamente) que estan haciendo las carreras de adm de sistemas y/o programación web. Esta hecho con el afan de ayudar asi que espero les sirva como a mi dejarlo aca (como ayuda memoria).
¿Qué es iptables?
iptables es una utilidad de línea de órdenes para configurar el cortafuegos del kernel de Linux implementado como parte del proyecto Netfilter. El término iptables también se usa comúnmente para referirse a dicho cortafuegos del kernel. Puede configurarse directamente con iptables, o usando uno de los muchos frontend existentes de consola y gráficos. El término iptables se usa para IPv4, y el término ip6tables para IPv6. Tanto iptables como ip6tables tienen la misma sintaxis, pero algunas opciones son específicas de IPv4 o de IPv6.
Conceptos básicos
iptables se usa para inspeccionar, modificar, reenviar, redirigir y/o eliminar paquetes de red de IP. El código para filtrar paquetes de IP ya está integrado en el kernel y está organizado en una colección de tablas, cada una con un propósito específico.

La palabra minúscula en la parte superior es la tabla y la palabra en mayúscula siguiente es la cadena. Cada paquete de IP que viene en «cualquier interfaz de red» pasa a través de este diagrama de flujo de arriba hacia abajo. Una confusión muy común es creer que los paquetes que ingresan desde, (digamos, para entendernos), una interfaz interna para consumo interno, se manejan de forma diferente a los paquetes desde una interfaz orientada a Internet. Todas las interfaces se manejan de la misma manera. Depende de uno definir las reglas que las traten de manera diferente. Por supuesto, algunos paquetes están destinados a procesos locales, por lo tanto, vienen desde la parte superior del gráfico y se detienen en <Proceso local>; mientras que otros paquetes son generados por procesos locales; por lo tanto, comienzan en <Proceso local> y continúan hacia abajo a través del diagrama de flujo
Tablas
iptables cuenta con cinco tablas:
raw
filtra los paquetes antes que cualquier otra tabla. Se utiliza principalmente para configurar exenciones de seguimiento de conexiones en combinación con el objetivoNOTRACK
.filter
es la tabla por defecto (si no se pasa la opción-t
).nat
se utiliza para la traducción de direcciones de red (por ejemplo, el redirección de puertos). Debido a las limitaciones en iptables, el filtrado no se debe hacer aquí.mangle
se utiliza para la alteración de los paquetes de red especializados (véase Mangles packet).security
se utiliza para reglas de conexión de red Mandatory Access Control (por ejemplo, SELinux —consulte este artículo para obtener más detalles—).
Las tablas FILTER y NAT son las tablas más importantes para los administradores. FILTER es «el filtro» y NAT «network address translation» (trasladar los paquetes de red de una dirección IP a otra)
Las reglas que componen el filtro FILTER
- INPUT: entrada, los paquetes destinados a entrar en nuestro sistema deben pasar por esta cadena.
- OUTPUT: salida, todos aquellos paquetes creados por el sistema y que van a salir de él.
- FORWARD: redireccionamiento, redirecciona a su nuevo destino, afectando a todos los paquetes que pasan por esta cadena.
Las reglas que componen el filtro NAT
- PREROUTING para modificar paquetes tan pronto como lleguen al equipo.
- OUTPUT: para la salida de paquetes que se generan localmente y van a ser enrutados para su salida.
- POSTROUTING: modificar paquetes que estén listos para salir del equipo.
En la gran mayoría de los casos, no será necesario utilizar las tablas raw, mangle, o security a la vez. En consecuencia, el siguiente cuadro muestra un flujo simplificado de paquetes de red a través de iptables:
XXXXXXXXXXXXXXXXXX
XXX Red XXX
XXXXXXXXXXXXXXXXXX
+
|
v
+--------------+ +-------------------+
|tabla: filter| <---+ | tabla: nat |
|cadena: INPUT | | | cadena: PREROUTING|
+-----+--------+ | +--------+----------+
| | |
v | v
[proceso local] | ************************ +---------------+
| +---+ Decisión de enrutamiento +---> |tabla: filter |
v ************************ |cadena: FORWARD|
************************ +------+--------+
Decisión de enrutamiento |
************************ |
| |
v ************************ |
+--------------+ +---+ Decisión de enrutamiento <------------+
|tabla: nat | | ************************
|cadena: OUTPUT| | +
+-----+--------+ | |
| | v
v | +--------------------+
+---------------+ | | tabla: nat |
|tabla: filter | +---+ | cadena: POSTROUTING|
|cadena: OUTPUT | +--------+-----------+
+---------------+ |
v
XXXXXXXXXXXXXXXXXX
XXX Red XXX
XXXXXXXXXXXXXXXXXX
Instalación:
Generalmente en las distribuciones ya viene por defecto pero si falta aca esta el comando:
sudo apt install iptables
y comprobamos:_
sudo iptables -L -v

Aquí, las tres cadenas se establecen en la política ACCEPT predeterminada. Actualmente no hay reglas para ninguna de las cadenas.
Definir una regla significa añadirla a la lista (cadena).
sudo iptables -A -i -p -s --dport -j
-A = significa añadir
-i = Interfaz a la que queremos agregar la regla
-p = protocolo que vamos a usar
-s = Source o Source Address (direccion de origen)
–dport = puerto al que se dirije
-j = target
Para ver mas sobre los comandos podemos ir al link: https://ipset.netfilter.org/iptables.man.html
Ahora que leímos al menos algunas lineas vamos a practicar un poco:
Habilitar el trafico en Localhost
sudo iptables -A INPUT -i lo -j ACCEPT
-A se utiliza una opción para añadir la regla a la cadena INPUT, aceptar todas las conexiones en la interfaz lo. lo significa la interfaz de loopback. Se utiliza para todas las comunicaciones en el localhost, como las comunicaciones entre una base de datos y una aplicación web en la misma máquina.
Habilitación de conexiones en el puerto HTTP, SSH y SSL
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Si queremos que nuestras conexiones regulares HTTP (puerto 80), https (puerto 443), ssh (puerto 22) continúen como de costumbre. Introduce los siguientes comandos para habilitarlos. En los comandos siguientes, hemos especificado el protocolo con la opción -p y el puerto correspondiente para cada protocolo con la opción -dport (puerto de destino).
Filtrado de paquetes basados en la fuente
sudo iptables -A INPUT -s 192.168.10.2 -j ACCEPT
En el ejemplo anterior tratamos de aceptar o rechazar paquetes basados en la dirección IP de origen o en el intervalo de direcciones IP, puede especificarlo con la opción -s. Por ejemplo, para aceptar paquetes desde la dirección 192.168.10.2
Si queremos eliminar los paquetes de la misma dirección:
sudo iptables -A INPUT -s 192.168.10.2 -j DROP
Ahora si en vez de eliminar los paquetes de varios podemos usar el comando rango:
sudo iptables -A INPUT -m iprange --src-range 192.168.10.1-192.168.10.2 -j DROP
Eliminar trafico restante
sudo iptables -A INPUT -j DROP
No es obligatorio pero si importante eliminar el resto del tráfico después de definir las reglas, ya que impide el acceso no autorizado a un servidor desde otros puertos abiertos.
Eliminar Reglas
Si queremos eliminar todas las reglas el comando es muy sencillo:
sudo iptables -F
Ahora si lo que quiero es borrar una linea tengo que saber cual es para luego borrarla. Para listar lo hago con:
sudo iptables -L --line-numbers
y luego borro usando el numero de linea que tiene justamente la linea que quiero borrar:
sudo iptables -D INPUT numerodelineaaborrar
Persistencia
Las reglas de Iptables que hemos creado se guardan en la memoria. Eso significa que tenemos que redefinirlos en el reinicio. Para que estos cambios sean persistentes después del reinicio, utilice el siguiente comando en los sistemas Ubuntu:
sudo /sbin/iptables-save
Este comando guarda las reglas actuales en el archivo de configuración del sistema que se utiliza para reconfigurar las tablas en el momento del reinicio. Debe ejecutar este comando cada vez que realice cambios en las reglas. Para desactivar este cortafuegos, simplemente limpie todas las reglas y haga que los cambios sean persistentes.
Un truco es exportar a un archivo para guardar como backup la configuración, entonces podemos hacer:
sudo iptables-save > iptables.txt
y luego para importarlas en otro servidor:
sudo iptables-restore < iptables.txt
En ubuntu existe un paquete que tambien se puede usar para la persistencia:
sudo apt install iptables-persistent
En la misma instalación el sistema le va a preguntar si quiere guardar la configuración actual de iptables y si le ponemos que si hace una copia.
Luego, tendremos que tirar este comando para ir guardando los cambios:
sudo invoke-rc.d iptables-persistent save
Vamos con otros ejemplos…..
Bloquear Puerto 80
iptables -A INPUT -p tcp --dport 80 -j DROP
No permitir ping
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Permitir acceso al puerto 22 o ssh
iptables -A INPUT -i ens33 -m tcp -p tcp --dport 22 -j ACCEPT
Permitir multiples puertos
iptables -A INPUT -i ens33 -p tcp -m multiport --dports 22,80,443 -j ACCEPT
Bloquear una url
iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
Prevenir ataques DoS
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
Consultar paquetes bloqueados por iptables
iptables -N LOGGING
Bloqueando una direción IP (suponemos que es un atacante con la ip 1.2.3.4)
iptables -A INPUT -s 1.2.3.4 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -j DROP
Reestablece las reglas por defecto
sudo su
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
Seguramente en la red encontrarás muchisimos más ejemplos pero la idea era mostrarte el funcionamiento general, asi que espero que te haya servido este tutorial denominado Iptables paso a paso de #CUlturaLibre
Filed under: CulturaLibre,gnulinux,redes - @ 23 mayo, 2022 4:03 pm
Etiquetas: CulturaLibre, firewall, gnulinux, iptables, networking, redes, SoftwareLibre
One thought on “Iptables paso a paso”