Tutorial IPTABLES Firewall, Manual de Configuración Básico

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.

configuración iptables

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.
ejemplo firewall iptables
– 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