Skip to content

Manual de Introducción a Seguridad Informática con IPTABLES ​

Este manual proporciona una introducción básica al diseño, configuración, administración y gestión de la seguridad informática utilizando IPTABLES en sistemas Linux.

Introducción a la Seguridad Informática ​

La seguridad informática es el conjunto de medidas y prácticas destinadas a proteger los sistemas, redes y datos contra accesos no autorizados, ataques y vulnerabilidades. Uno de los componentes clave de la seguridad en sistemas Linux es el uso de firewalls, y una de las herramientas más utilizadas para este fin es IPTABLES.

¿Qué es IPTABLES? ​

IPTABLES es una herramienta de firewall en sistemas Linux que permite filtrar, modificar y redirigir el tráfico de red. Funciona mediante reglas que definen cómo se manejan los paquetes de red (aceptar, rechazar o descartar).

Conceptos Básicos de IPTABLES ​

  1. Tablas: IPTABLES organiza las reglas en tablas. Las tablas más comunes son:

    • filter: Para filtrar paquetes (aceptar, rechazar o descartar).
    • nat: Para traducción de direcciones de red (NAT).
    • mangle: Para modificar paquetes (por ejemplo, cambiar el TTL).
  2. Cadenas: Cada tabla tiene cadenas predefinidas que representan puntos de decisión:

    • INPUT: Paquetes destinados al sistema local.
    • OUTPUT: Paquetes generados por el sistema local.
    • FORWARD: Paquetes que se enrutarán a través del sistema.
    • PREROUTING y POSTROUTING: Para NAT y mangle.
  3. Reglas: Son las instrucciones que definen qué hacer con los paquetes. Cada regla tiene:

    • Un criterio de coincidencia (por ejemplo, dirección IP, puerto, protocolo).
    • Una acción (ACCEPT, DROP, REJECT).
  4. Argumentos:

    1. -A <CHAIN> : Añade regla a la cadena especificada
    2. -D <CHAIN> : Eliminar Regla
    3. -s <SOURCE> : Fuente, IP de procedencia
    4. -j <ACTION> : (jump) - Salto (ACCEPT, DROP or REJECT)
    5. -p <protocol> : Protocolo
    6. --dport <port>: Destination Port
    7. --sport: <port>: Puerto fuente,
    8. -i :interfaz entrante
    9. -o :interfaz saliente
    10. -s :dirección IP origen
    11. -d :dirección IP destino

Diseño de un Firewall con IPTABLES ​

  1. Definir políticas por defecto: Establece qué hacer con el tráfico que no coincide con ninguna regla.
bash
# Rechazar todo el tráfico entrante por defecto). (-P: policy)
iptables -P INPUT DROP
  1. Permitir tráfico necesario: Abre solo los puertos y servicios esenciales.
bash
# Permitir SSH (Puerto 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Permitir HTTP (80) y HTTPS (443)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  1. Bloquear tráfico no deseado: Bloquea direcciones IP o rangos sospechosos.
bash
# Bloquea una dirección específica:
iptables -A INPUT -s 192.168.1.100 -j DROP
  1. Habilitar NAT (si es necesario):
bash
# Para permitir que los dispositivos internos accedan a Internet.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Configuración Básica de IPTABLES ​

  1. Listar reglas existentes:
bash
iptables -L -v -n
  1. Agregar una regla: Permitir tráfico HTTP (puerto 80):
bash
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  1. Agregar una regla: Permitir tráfico HTTP (puerto 80) y HTTPS (443)
bash
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
  1. Eliminar una regla: Eliminar la regla de HTTP:
bash
iptables -D INPUT -p tcp --dport 80 -j ACCEPT

t. Guardar reglas:

  • En sistemas basados en Debian/Ubuntu:
bash
iptables-save > /etc/iptables/rules.v4
  • En sistemas basados en RedHat/CentOS:
bash
service iptables save

Administración y Gestión de IPTABLES ​

  1. Monitoreo del tráfico:
  • Usa iptables -L -v -n para ver el tráfico que coincide con las reglas.
  1. Bloquear ataques:
  • Limitar el número de conexiones por IP para evitar ataques DDoS:

    bash
    iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute -j ACCEPT
  1. Reglas persistentes:
  • Asegúrate de que las reglas se guarden y se carguen al reiniciar el sistema.
  1. Logging:
  • Registrar tráfico sospechoso:
    bash
    iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH Attempt: "

Ejemplo de Configuración Básica ​

bash
# Establecer políticas por defecto
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Permitir tráfico local
iptables -A INPUT -i lo -j ACCEPT

# Permitir tráfico HTTP y HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Permitir SSH desde una IP específica
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.50 -j ACCEPT

# Habilitar NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Guardar reglas
iptables-save > /etc/iptables/rules.v4

# Permitir tráfico en el Loopback (Localhost)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Fundamental para que los servicios internos se comuniquen entre sí.

Anatomía de un Comando ​

Si quieres construir tus propias reglas, sigue esta estructura:

bash
iptables [−t tabla] comando cadena [match] −j target

# -A: Añadir (Append) al final de la lista.

# -p: Protocolo (tcp, udp, icmp).

# -s / -d: Origen (source) / Destino (destination).

# --dport: Puerto de destino.

# -i / -o: Interfaz de entrada (input) / salida (output), ej: eth0.

Consejos de Seguridad ​

  1. Minimizar la exposición: Abre solo los puertos necesarios.
  2. Actualizar regularmente: Mantén tu sistema y aplicaciones actualizados.
  3. Monitorear registros: Revisa los logs para detectar actividades sospechosas.
  4. Usar herramientas adicionales: Combina IPTABLES con herramientas como Fail2Ban para mayor seguridad.

Ejercicios: ​

1. Permitir SSH solo desde una red local específica: ​

Mostrar solución
bash
iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT
  • -s 10.0.0.0/24: Define el origen como todo el rango de red (máscara 24).

  • --dport 22: Puerto estándar de SSH.

  • -j ACCEPT: Permite el acceso solo si la IP viene de ese rango interno.

2. Redirección de Puertos (NAT) ​

Redirige el tráfico del puerto 80 al 8080 (útil para apps en Node.js, Java, etc.).

Mostrar solución
bash
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

Publicado bajo la licencia MIT.