Skip to content

Firewall configuration on Linux systems using UFW for IPTables. Filtering policies, port control, IP blocking, and activity logging.

Notifications You must be signed in to change notification settings

JohanMV/firewall-linux-ufw-iptables

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 

Repository files navigation

🌐 Español

🔐 Firewall Personalizado con UFW e IPTables

Este proyecto simula la implementación y configuración de un firewall personalizado en un entorno Linux, utilizando UFW como interfaz de gestión y reglas avanzadas mediante IPTables. El objetivo es mejorar la postura defensiva de una máquina servidor, controlar el tráfico entrante y saliente, y proteger servicios críticos frente a ataques internos.

🧰 Herramientas utilizadas

  • Ubuntu Server
  • UFW (Uncomplicated Firewall)
  • IPTables
  • Nmap
  • hping3 / netcat

🔍 Metodología aplicada

  1. Verificación de conectividad entre interfaces
  2. Aplicación de políticas predeterminadas de UFW (deny incoming, allow outgoing)
  3. Definición de puertos y servicios esenciales permitidos
  4. Integración de reglas avanzadas de IPTables para refuerzo (DROP, REJECT, filtrado por protocolo/IP)
  5. Simulación de escaneos y ataques para validación
  6. Revisión de logs y documentación

📄 Informe final

El informe documenta el comportamiento del firewall bajo diferentes condiciones, evidencia el bloqueo de escaneos, ataques ICMP y puertos no autorizados, y ofrece recomendaciones de mejora alineadas a los CIS Benchmarks (nivel 1). Se incluye comparación entre enfoques UFW y reglas manuales con IPTables.


🌍 English

🔐 Custom Firewall with UFW and IPTables

This project simulates the implementation and configuration of a custom firewall in a Linux environment, using UFW as a management interface and advanced rules with IPTables. The objective is to improve the defensive posture of a server machine, control incoming and outgoing traffic, and protect critical services against internal attacks.

🧰 Tools Used

  • Ubuntu Server
  • UFW (Uncomplicated Firewall)
  • IPTables
  • Nmap
  • hping3 / netcat

🔍 Applied Methodology

  1. Connectivity check between interfaces
  2. Application of UFW default policies (deny incoming, allow outgoing)
  3. Definition of essential ports and allowed services
  4. Integration of advanced IPTables rules for hardening (DROP, REJECT, protocol/IP filtering)
  5. Attack and scan simulation for validation
  6. Log review and documentation

📄 Final Report

The report documents the firewall behavior under various conditions, evidences the blocking of scans, ICMP attacks, and unauthorized ports, and offers improvement recommendations aligned with CIS Benchmarks (Level 1). A comparison between UFW and manual IPTables rules is also included.

🧭 Flujo Técnico del Proyecto

Paso Acción Herramienta Resultado esperado
1️⃣ Verificar el estado inicial de red y firewall ifconfig, ss -tulnp, ufw status, iptables -L Confirmar que la interfaz de red está activa, detectar servicios en escucha y validar que no existen reglas previas activas
2️⃣ Aplicar políticas predeterminadas y permitir servicios esenciales UFW Solo puertos específicos accesibles (ej. 22/SSH)
3️⃣ Crear reglas personalizadas para proteger el sistema IPTables Bloqueo de puertos, protocolos o IPs sospechosas
4️⃣ Simular escaneos y ataques nmap, hping3, netcat Comprobar que el firewall bloquea intentos no autorizados
5️⃣ Revisar registros y ajustar reglas UFW logging, dmesg Validar que los eventos sospechosos sean registrados
6️⃣ Documentar configuraciones y recomendaciones Markdown (README.md) Informe estructurado con reglas, pruebas y medidas alineadas a CIS

1️⃣ Verificar el estado inicial de red y firewall


En este primer paso nos aseguramos que el entorno esté limpio y funcional antes de aplicar reglas de firewall.

Verificar el estado inicial de red y firewall


De esta forma garantizamos que cualquier bloqueo posterior sea atribuible únicamente a las reglas que aplicaremos y no a configuraciones residuales.
La máquina tenga una IP válida (verificado con ifconfig)
 No existan servicios inesperados abiertos (ss -tulnp)
El firewall UFW esté inactivo (ufw status)
No haya reglas previas en IPTables (iptables -L)

2️⃣ Aplicar políticas predeterminadas y permitir servicios esenciales


Estableceremos las reglas mínimas para que la máquina solo permita conexiones salientes y bloquee cualquier intento de conexión entrante no autorizado. Esto es una medida base recomendada por los CIS Benchmarks para servidores.

🎯 El objetivo será:

  • Bloquear todo el tráfico entrante por defecto (deny incoming)

  • Permitir todo el tráfico saliente (allow outgoing)

  • Habilitar el acceso por SSH (puerto 22) para administración remota (opcional)

  • Activar el firewall UFW y verificar el estado

Aplicar politicas y activar el Firewall

Resultado esperado:

🔒 Todo tráfico entrante no autorizado es bloqueado por defecto.

✅ El tráfico saliente (como actualizaciones del sistema) se mantiene habilitado.

🔓 El puerto 22/tcp queda accesible para conexiones SSH (seguridad remota).

📊 El estado del firewall se puede verificar con ufw status verbose.

🛡️ En este paso sentamos la base de una política de mínimo privilegio, recomendada por los CIS Brenchmarks (Control 9.1).

3️⃣ Crear reglas personalizadas para proteger el sistema


Ahora fortaleceremos la seguridad más allá de las políticas generales de UFW, aplicando reglas directas en IPTables para controlar con precisión el tráfico basado en protocolos, puertos, y direcciones IP.

🔸 3.1 Establecer políticas predeterminadas

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

🔸 3.2 Permitir tráfico legítimo y conexiones establecidas

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

 Reglas iptables


Primero implementamos un enfoque "default deny" y luego evita bloqueos innecesarios y mantiene la funcionalidad normal del sistema sin exponer puertos.

🔸 3.3 Definir reglas explícitas de filtrado

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT       # Permitir SSH
sudo iptables -A INPUT -p tcp --dport 23 -j DROP         # Bloquear Telnet
sudo iptables -A INPUT -s 203.0.113.45 -j DROP           # Bloquear IP específica

Reglas iptables 2

Estas reglas personalizadas permiten construir una política de defensa efectiva, basada en el principio de mínimo privilegio.

4️⃣ Simular escaneos y validar bloqueos


En esta etapa realizamos pruebas de escaneo contra el Firewall configurado con reglas iptables, desde un host externo (máquina física con Windows) utilizando Zenmap (Nmap GUI).

El objetivo fue validar que los servicios no autorizados (puertos no permitidos explícitamente) estén correctamente bloqueados por el firewall.

nmap -sS -p- 192.168.0.106
nmap -sV -p22,23,80 192.168.0.106

🔐 Resultado esperado

Puerto 22 (SSH): Permitido

Puerto 23 (Telnet): Bloqueado

Puerto 80 (HTTP): Bloqueado

Todos los demás puertos: Bloqueados

Ataque Nmap Windows 1

Ataque Nmap Windows 2

Donde 192.168.0.106 corresponde a la dirección IP de la máquina con iptables activo (Kali Linux en VirtualBox).

✅ Resultados

  • El escaneo con -p- (todos los puertos) no detectó ningún puerto abierto, lo que demuestra que las políticas DROP en iptables están funcionando correctamente.

  • El escaneo dirigido a puertos 22, 23 y 80 solo detectó el puerto 22 como abierto, cumpliendo con la regla de permitir SSH y bloquear Telnet y HTTP.

  • Se demostró resistencia a técnicas básicas de reconocimiento pasivo y activo.

5️⃣ Revisar registros del sistema y ajustar reglas si es necesario


En este paso se valida que los eventos sospechosos (intentos de conexión, escaneos, paquetes ICMP, etc.) estén siendo registrados por el sistema y el firewall. Esta fase es clave para detectar actividad no autorizada y afinar las reglas establecidas previamente.

Se activó el registro del firewall con:

sudo ufw logging on

Y se visualizaron eventos bloqueados con:

sudo dmesg | grep "IN="

UFW

📊 Validación visual con Gufw

Para complementar la revisión, se utilizó Gufw, la interfaz gráfica de UFW, permitiendo visualizar:

  • Las reglas permitidas (puerto 22/tcp habilitado)

  • Reportes de actividad de red

  • Historial de activación del firewall

Figura 8 - UFW 1

Figura 9 - UFW 2

Figura 10 - UFW 3

6️⃣ Documentar configuraciones y recomendaciones


En esta última etapa se recopila toda la evidencia generada a lo largo del proyecto para producir un informe técnico claro, estructurado y alineado con buenas prácticas de ciberseguridad.

El objetivo es que cualquier profesional de TI o auditor pueda comprender fácilmente qué configuraciones se aplicaron, cómo se comportó el firewall ante intentos de escaneo o acceso no autorizado, y qué medidas se recomiendan para entornos reales.

📌 Evidencia recopilada:

  • Capturas de pantalla de reglas configuradas (UFW e IPTables)
  • Escaneos realizados con nmap y resultados bloqueados
  • Registros generados por dmesg y GUI de Gufw

✅ Buenas prácticas aplicadas (alineadas a CIS Benchmarks):

  • Bloqueo de todas las conexiones entrantes por defecto
  • Permisos explícitos solo a servicios esenciales como SSH
  • Registro de eventos y análisis de paquetes ICMP y escaneos
  • Refuerzo de políticas con IPTables para control detallado de puertos y direcciones IP

💡 Recomendaciones finales:

  • Activar el monitoreo continuo de logs (ufw logging on)
  • Aplicar reglas más estrictas en redes productivas (permitir solo IPs confiables)
  • Integrar alertas automáticas ante eventos de DROP o BLOCK repetidos
  • Evaluar la adopción de herramientas como fail2ban o suricata para detección temprana

Este informe sirve como referencia para configurar firewalls en entornos Linux, reforzando la seguridad perimetral incluso en escenarios simulados de red.


🛡️ Proyecto completo y validado: Firewall Personalizado con UFW + IPTables

About

Firewall configuration on Linux systems using UFW for IPTables. Filtering policies, port control, IP blocking, and activity logging.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published