1. Qué es un firewall
Un firewall es un dispositivo, ya sea a nivel hardware o a nivel de software, que filtra el tráfico entre dos o más redes. En general debemos verlo como una caja con DOS o mas interfaces de red en la que se establecen una reglas de filtrado con las que se decide si una conexión determinada puede establecerse o no. Incluso puede ir más allá y realizar modificaciones sobre las comunicaciones, utilizando protocolos como NAT.
Una traducción no muy afortunada para el término fireall es Cortafuegos
Figura 1: Firewall típico entre red local e internet
Ventajas del uso de los Firewalls:
- Protege de Intrusos: Esto hace referencia que los accesos a ciertos fragmentos de la red interna solo es permitida a algunas terminales autorizadas.
- Protección de información privada: Permite definir distintos niveles de accesos a la información de manera que en la organización los grupos de accesos definidos solo contaran con servicios e información limitados.
- Optimización de Accesos: En primero lugar identifica todos los nodos o terminales de la red interna y luego optimiza la comunicación entre ellos.
2. Qué es iptables
IPtables es un firewall vinculado al kernel de GNU/linux que se ha extendido enormemente a partir del kernel 2.4 . Es el sucesor de ipchains. Iptables no es como un servidor que lo iniciamos o detenemos, iptables esta integrado al kernel, es parte del sistema operativo.
3. ¿Cómo se pone en marcha?
Realmente lo que se hace es aplicar reglas. Para ellos se ejecuta el comando iptables, con el que añadimos, borramos, o creamos reglas. Por ello un firewall de iptables no es sino un simple script de shell en el que se van ejecutando las reglas de firewall. En todo caso los Nerdsitos y lo Geeks se pueden crear un shell script que “detenga” el firewall permitiendo o negando el tráfico y otro que “inicie” el firewall aplicando las reglas.

Figura 2: cuando un paquete, una trama u otra comunicación llega al kernel con iptables se sigue este camino
Un firewall con iptables – para proteger un servidor sencillo
Mi buen amigo Pello Xabier Altadill Izura, en su sitio web tiene varios ejemplos muy interesantes, yo tomé un par de ellos y los modifiqué un poco, aquí el primero, pensado para una computadora con un servidor Web, un servidor FTP y un servidor MySQL:
#!/bin/bash
## SCRIPT de IPTABLES - ejemplo
## Ing. Carlos A. Leal S.
## cleal@ns.uca.edu.ni
## basado en www.pello.info
clear
echo “Aplicando Reglas de Firewall…”
echo “Haciendo FLUSH de reglas”
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
echo “Establecemos politica por defecto”
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
echo “Empezamos a filtrar”
echo “El localhost se deja por ejemplo conexiones locales a mysql”
iptables -A INPUT -i lo -j ACCEPT
echo “A nuestra IP le dejamos todo”
iptables -A INPUT -i eth0 -s 165.98.12.189 -j ACCEPT
iptables -A INPUT -i eth0 -s 172.16.8.189 -j ACCEPT
echo “Permitimos mysql desde la red local”
iptables -A INPUT -s 172.16.8.0/24 -p tcp –dport 3306 -j ACCEPT
echo “Al diseñador le dejamos usar el FTP”
iptables -A INPUT -s 172.16.8.194 -p tcp –dport 20:21 -j ACCEPT
echo “El puerto 80 de www debe estar abierto, es un servidor web.”
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
echo “Y el resto, lo cerramos”
iptables -A INPUT -p tcp –dport 20:21 -j DROP
iptables -A INPUT -p tcp –dport 3306 -j DROP
iptables -A INPUT -p tcp –dport 22 -j DROP
iptables -A INPUT -p tcp –dport 10000 -j DROP
iptables -A INPUT -p tcp –dport 3306 -j DROP
echo “OK . Verificando que lo que se aplica con: iptables -L -n”
iptables -L -n
echo “Fin del script”
El segundo ejemplo es una versión mejorada
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina mejorado
## Ing. Carlos A. Leal S. - cleal@ns.uca.edu.ni
## basado en www.pello.info
clear
echo “Aplicando Reglas de Firewall…”
echo “FLUSH de reglas”
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
echo “Establecemos politica por defecto”
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
echo “Empezamos a filtrar”
echo “A localhost se deja por ejemplo conexiones locales a mysql”
iptables -A INPUT -i lo -s 127.0.0.1/8 -j ACCEPT
echo “A nuestra IP le dejamos todo”
iptables -A INPUT -i eth0 -s 165.98.12.189 -j ACCEPT
iptables -A INPUT -i eth0 -s 172.16.8.189 -j ACCEPT
echo “Negamos MySQL”
iptables -A INPUT -p tcp –dport 3306 -j DROP
echo “Permitimos FTP”
iptables -A INPUT -p tcp –dport 20:21 -j ACCEPT
echo “El puerto 80 de www debe estar abierto, es un servidor web.”
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
echo “Cerramos rango de los puertos privilegiados. Cuidado con este tipo de barreras, antes hay que abrir a los que si tienen acceso.”
iptables -A INPUT -p tcp –dport 1:1024 -j DROP
iptables -A INPUT -p udp –dport 1:1024 -j DROP
echo “Cerramos otros puertos que estan abiertos”
iptables -A INPUT -p tcp –dport 10000 -j DROP
iptables -A INPUT -p udp –dport 10000 -j DROP
echo ” OK . Verifique que lo que se aplica con: iptables -L -n”
iptables -L -n
echo “Fin del scrip”