Introducción a Iptables | Tutorial Iptables
Como resultado de un Proyecto del módulo para Linux Netfilter nace la Herramienta encargada de crear y configurar Firewalls: Iptables, a diferencia de sus antecesores Iptables tiene la posibilidad de generar Logs y filtros utilizando políticas de seguridad. Iptables es un Firewall en forma Script Linux que permite configurar a nuestro gusto las reglas de filtrado que deseemos.
Tablas
-
Hacen referencia a las diferentes maneras de procesar los paquetes de Red.
- filter:
Filtros de cadenas cadenas Input, Output, Forward - nat:
Traduce las direcciones Nat: Prerouting, Postrouting - mangle:
Controla las cadenas Input, Output, Forward, Prerouting, Postrouting
Tipos de Cadenas
-
Lista de reglas sobre los paquetes de red:
- Input:
Paquetes con destino la propia máquina - Output:
Paquetes que salen de la propia máquina hacia fuera - Forward:
Paquetes que atraviesan la máquina - Pre routing:
Reglas sobre los paquetes justo antes de enviarlos a la red - Post routing:
Reglas sobre los paquetes justo después de enviarlos a la red
Comandos
-L/–list cadena lista las reglas actualmente en uso en una cadena -F/–flush cadena vacía una cadena
-F/–flush cadena vac ́ıa una cadena
-Z/–zero cadena reinicia los contadores de una cadena -P/–policy cadena DROP/ACCEPT establece la plítica por defecto
-P/–policy cadena DROP/ACCEPT establece la política por defecto
-A/–append cadena an ̃ade una regla (condiciones+objetivos) a una cadena -D/–delete cadena borra una regla de una cadena
-D/–delete cadena borra una regla de una cadena
-R/–replace cadena reemplaza una regla de una cadena
-I/–insert cadena inserta una regla de una cadena
Condiciones
- dirección IP:
Puede ser una dirección física concreta (-s 192.168.1.128), o un id de red (-s 192.168.1.0)
origen: -s / –source
destination: -d / –destionation - interfaz
Interfaz por la que entra o sale el paquete de red
de salida: -i/–in-interface (input, forward, prerouting)
de entrada: -o–out-interface (output, forward, postrouting) - tipo de protocolo
Protocolo por el que se transporta: TCP, UDP, ICMP, ALL
-p–protocol - puertos
Puerto del servicio: (puede ser el número de puerto o el nombre del servicio)
origen: -sport/–source-port
destino: -dport/–destination-port - control de estado
–state ESTADOS
INVALID : paquete no asociado a ninguna conexión conocida.
ESTABLISHED : paquete de red que ya pertenece a una conexión válida y conocida.
NEW : paquete que crea una nueva conexión.
RELATED : paquetes que inician una nueva conexión que está asociada con otra ya establecida.
Objetivos
-j SNAT –to-source. Realiza SNAT(source-NAT) sobre los paquetes de red que salen (enmascaramiento de direcciones)
Cambia dirección IP (opc. puerto) de origen del paquete (sólo disponible en postrouting)
-j MASQUERADE. Igual que snat, pero usando la dir. IP del propio equipo (útil en conexiones volátiles) (sólo disponible en postrouting)
-j DNAT –to-destination. Realiza DNAT(destination-NAT) sobre los paquetes entrantes (redireccionamiento de puertos)
Cambia dir. IP (opción puerto) de destino del paquete (sólo disponible en prerouting y opción en output)
Reglas iptables
Estructura
iptables -t tabla comando condiciones objetivo
Los comandos se meten dentro de un fichero SH que ejecutaremos en la línea de comandos como script: ./script-iptables.sh
Ejemplo de script iptables
La máquina B será nuestro ordenador y la máquina A una máquina de pruebas sin firewall, vamos a proceder a construir un firewall con las siguientes características.
– El firewall utilizará una política por defecto denegar todos los paquetes y además:
Permitirá hacer ping de la máquina A a la máquina B
Rechazará (REJECT) los pings de la máquina B a la A. Comprobad la diferencia entre el DROP y el REJECT.
Permitirá hacer ssh desde las dos máquinas.
Permitirá aceptar conexiones mysql desde las dos máquinas
Permitirá conectarse de la máquina B a la máquina A a través de webmin.
Permitirá conexiones a Apache por HTTP/HTTPS en los dos sentidos.
Solución con Política Por Defecto Denegar
#!/bin/bash iptables -F iptables -X iptables -Z iptables -t nat -F iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -p ICMP -j REJECT iptables -A OUTPUT -d 192.168.0.2 -p tcp -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p icmp -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p tcp --dport 3306 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -o eth1 -p tcp --dport 3306 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -i eth1 -p tcp --dport 10000 -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -o eth1 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p tcp --dport 443 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -o eth1 -p tcp --dport 443 -j ACCEPT
Ahora utilizaremos la misma configuración con una política por defecto aceptar.
Solución con Política Por Defecto Aceptar
#!/bin/bash iptables -F iptables -X iptables -Z iptables -t nat -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -p ICMP -j REJECT iptables -A OUTPUT -d 192.168.0.2 -p tcp -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p ICMP -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p tcp --dport 3306 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -o eth1 -p tcp --dport 3306 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -i eth1 -p tcp --dport 10000 -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -o eth1 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -s 192.168.0.2 -i eth1 -p tcp --dport 443 -j ACCEPT iptables -A OUTPUT -d 192.168.0.2 -o eth1 -p tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp --dport 1:65535 -j DROP iptables -A INPUT -p udp --dport 1:65535 -j DROP iptables -A OUTPUT -p tcp --dport 1:65535 -j DROP iptables -A OUTPUT -p tcp --dport 1:65535 -j DROP
Si te gustó este artículo por favor compártelo, Gracias
Espero que este artículo os sirva de ayuda,
Un saludo,
Por Óscar Carrillo
Marta Domingo says:
Llevaba tiempo buscando un manual Iptables en español, gracias lo veré más despacio, tiene buen pinta…