You are on page 1of 5

FIREWALL BSICO

El siguiente es un script muy bsico de iptables que puedes usar para proteger un solo
equipo conectado a Internet a travs de un modem o de una lnea dedicada como adsl (algo
parecido a lo que generalmente utilizamos en nuestra casa). Lo bsico no es sinnimo de
inseguro, de hecho este pequeo firewall es un excelente ejemplo de la potencia de iptables,
El firewall de Linux, que con unas cuantas lneas es posible establecer un cortafuegos
bastante seguro y eficaz.
Tan solo copia y pega lo siguiente en cualquier editor, gurdalo con el nombre que gustes,
ejemplo: fw_equipo, despus cambia sus permisos para que pueda ser ejecutado:
#> chmod 700 fw_equipo

y despus ejectalo: (tienes que ser root para ejecutarlo)


#> ./fw_equipo

Si no manda errores, listo, tu firewall esta protegindote de ataques y de accesos


indeseados.
# -------------------------------------------------------------------------------# www.adminredescauca.net
# firewall para un solo equipo conectado a travs de modem o adsl
# por: Servicio Nacional de Aprendizaje SENA
# (1) se eliminan reglas previas que hubiera y cadenas definidas por el
usuario
iptables -F
iptables -X
# (2) se establecen polticas "duras" por defecto, es decir solo lo que
se autorice
# explicitamente podr ingresar o salir del equipo
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# (3)a la interface lo (localhost) se le permite todo
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# (4) evitamos ataques syn-flood (DOS)limitando el acceso de paquetes
nuevos
# desde internet a solo 4 por segundo y los demas se descartan
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j
DROP
# (5) se evitan paquetes tcp que sean nuevos y que no tengan el flag SYN
# es decir, hay ataques o escaneos que llegan como conexiones nuevas

# pero sin ser paquetes syn, definitivamente no nos interesan


iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# (6) todo lo que sea icmp (ping) y que intente entrar, se descarta
# con esto bloqueamos cualquier tipo de paquetes con protocolo icmp
# evitando ataques como el del ping de la muerte, aunque esta regla
# podria provocar problemas de comunicacion con algunos ISP.
iptables -A INPUT -p icmp -j DROP
# (7) por ultimo las dos siguientes reglas permiten salir del equipo
# (output) conexiones nuevas que nosotros solicitamos, conexiones
establecidas
# y conexiones relacionadas, y deja entrar (input) solo conexiones
establecidas
# y relacionadas.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# --------------------------------------------------------------------------------

Explicacin
El paso (1) hace un Flush (borrado) de las reglas que ya hubiera, muchas distribuciones se
instalan con un juego previo de reglas de iptables que para este caso no nos sirven, por eso
las eliminamos, asi como la opcin X que permite eliminar las cadenas de reglas
personalizadas. Si quieres ver que reglas tienes actualmente en tu firewall usa la opcin -L,
o tambin -L -n que con esta opcin 'n' muestra los puertos en formato numrico:
#> iptables -L

En el segundo paso (2) establecemos las polticas del firewall, hay dos tipos de polticas
ACCEPT y DROP, en el primer caso, estaramos aceptando TODO lo que entre y salga del
equipo y despus se tendra que negar lo que no se quiera, cosa bastante tediosa e insegura.
Lo mejor en firewalls es siempre establecer polticas DROP, con esto por default, todo,
absolutamente todo es prohibido de entrar o salir, as que tenemos que ir poniendo reglas
que abran los puertos o conexiones que si queramos. La desventaja de crear un firewall con
polticas DROP es que suelen ser ms complejos de crear y mantener, pero valen la pena,
son por mucho ms seguros.
Se establecen entonces para los paquetes que entran al equipo INPUT, para los paquetes
que salen del equipo OUTPUT y para paquetes que atraviesan el equipo FORWARD,
aunque esta ltima poltica en el caso de una PC con una sola tarjeta de red es innecesaria,
o ms bien esta sobrando.
El paso (3) es necesario e importante ya que como estamos negando todo por default eso
abarca tambin a nuestro dispositivo de red local o virtual, localhost, y varios servicios que
trabajan de manera local en nuestro equipo como el sistema de ventanas X, hacen uso de
este dispositivo para trabajar. Localhost no se conecta de ninguna manera al exterior a la

LAN o Internet, por lo que es seguro simplemente decirle al firewall que acepte todo de
entrada y salida que provenga de localhost.
Los pasos (4), (5) y (6) podran parecer redundantes o innecesarios ya que como se observa
su target es DROP lo que quiere decir que si el paquete se cumple en alguna de esas tres
reglas se descartar. Realmente no sobran, aaden un extra de seguridad al firewall, ya que
recordemos que las reglas son checadas contra los paquetes que entran o salen en un orden
estrictamente secuencial a como las introducimos. Las dos ltimas reglas permitirn el paso
de paquetes (tal vez), as que lo que hacemos es depurar los paquetes en los pasos (4), (5) y
(6) para que llegan un poco ms controlados a la decisin del paso (7) si son aceptados o
no.
Finalmente en el paso (7) se permiten un par de reglas que forman un firewall de estado
completo, donde se analiza el estado de los paquetes, sin importar su protocolo, destino,
etc. En la regla de INPUT es decir lo que entra al equipo desde Internet solo se permiten
paquetes cuyo estado ya este registrado en la tabla de conexiones del kernel. Esto implica
que ningn paquete que sea nuevo ser permitido, solo se aceptar lo que previamente se
haya solicitado desde nuestro equipo y que es precisamente la ltima regla, la de OUTPUT,
donde establecemos que pueden salir paquetes nuevas, como una peticin de pgina web,
que son paquetes NEW, paquetes previamente establecidos (ESTABLISHED), como
comunicaciones de chat y conexiones relacionadas a una establecida (RELATED), por
ejemplo conexiones ftp que establecen conexin de control y de datos en los puertos 20 y
21.
Recuerda que este pequeo script es solo para un equipo que no ofrece ningn servicio al
exterior, al Internet, por lo que es relativamente fcil con unas cuantas reglas configurarlo y
dejarlo seguro, para un servidor Web por ejemplo, o un equipo Linux con funciones de
NAT (que est ubicado entre una LAN e Internet) tendra que ser un firewall muy distinto
al aqu presentado.

Rutear paquetes al exterior y frenar paquetes que vengan de internet.


Para m una de las mejores formas de aprender es en base a los ejemplos, por lo que voy a
continuar con la explicacin en base a ejemplo nicamente.
Suponiendo que queremos denegar todos los paquetes que vengan de internet y permitir
que los equipos de mi red LAN (192.168.1.0/24) salgan a internet podramos utilizar el
siguiente conjunto de reglas:
# iptables -t filter -A INPUT -i lo -j ACCEPT
# iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -t filter -A INPUT -s 192.168.1.0/24 -m state --state NEW -j ACCEPT
# iptables -t filter -P INPUT DROP
# iptables -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j CCEPT

# iptables -t filter -A FORWARD -s 192.168.1.0/24 -m state --state NEW -j ACCEPT


# iptables -t filter -P FORWARD DROP
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24
-d
\!
192.168.1.0/24
MASQUERADE

-j

Este conjunto de reglas bsicamente deniega toda entrada externa y permite que los
paquetes provenientes de la red local pasen a travs del firewall e incluso esten dirigidos al
firewall mismo. Paso a describir en detalle qu hace cada regla:
Esta regla acepta todos los paquetes que entren por la interfase de red 'lo' (la interfase de
red utilizada para comunicacin interna del mismo equipo: localhost). Est ubicada en la
cadena de INPUT ya que son paquetes que nicamente pueden estar dirigidos al firewall
mismo.
Esta regla permite que todos los paquetes que estn en estado ``relacionado'' o
``establecido'' y que tengan como destino final el mismo firewall se acepten. El estado del
paquete es determinado por el mdulo ``state'', cuando se utiliza este mdulo el kernel va
manteniendo una tabla de conexiones que se han establecido en algn sentido (por ejemplo
un ftp ejecutado en el firewall para bajar algo de internet). Este mdulo es muy til para
identificar los paquetes ``de vuelta'' (o sea paquetes que vienen como respuesta a otros
originalmente enviados por nosotros).
Esta regla permite que todos los paquetes de inicializacin de conexin provenientes de la
red 192.168.1.0/24 sean aceptados. El hecho de utilizar de nuevo el mdulo de estado
permite que el kernel slo acepte paquetes que considere como ``nuevos'', hay paquetes que
se catalogan como invlidos, stos ltimos no van a ser aceptados por ms que vengan de la
red interna.
Esta regla pone la poltica de la cadena en DROP. La poltica de la cadena es la ltima en
ejecutarse (luego de que se evaluaron todas las reglas de la cadena), si un paquete llega a
esta instancia entonces va a ser descartado.
Esta regla hace lo mismo que la regla ``2'' pero con la diferencia que deja pasar los paquetes
en estado ``relacionado'' o ``establecido'' que tienen como destino final una red detrs del
firewall (en este caso sera la red 192.168.1.0/24).
Al igual que la regla ``3'', esta regla acepta los paquetes que son enviados desde la red local
hacia otra red (todos los paquetes que no van al firewall). Bsicamente todos los paquetes
que salen de las estaciones de trabajo de la red interna y que van a internet.
Esta regla pone como poltica de la regla que descarte todos los paquetes que lleguen a esta
instancia.
Esta regla se ubica en la tabla de ``nat'' ya que se utiliza para cambiar el encabezado de
todos los paquetes que provengan de la red 192.168.1.0/24 y vayan a una red que no sea
192.168.1.0/24 (o sea internet en este ejemplo). Se utiliza MASQUERADE para que el
kernel ponga en el campo ``origen del paquete'' la direccin pblica del mismo firewall (la

que tiene en ese momento, es indispensable en firewalls que tienen una IP pblica y
dinmica).
Algunos detalles interesantes del ejemplo anterior. La regla nmero uno de la cadena de
FORWARD es la que ms se ejecuta ya que por lo general hay muchos ms paquetes
considerados como ``relacionados'' o ``establecidos'' a los que se consideran ``nuevos''
(estos ltimos son slo aquellos que se envan al inicio de una conexin). Por lo tanto se
logra mejor performance si se coloca esta regla al inicio de la cadena, evitando que el
kernel verifique las subsiguientes reglas de la cadena. La utilizacin del estado NEW es til
para evitar que paquetes en estado INVALID sean aceptados.
El ejemplo presentado ac est lejos de estar completo o perfecto (y ni hablar de
completamente seguro, ya que eso es algo completamente utpico :-)), pero igualmente
puede ser sumamente til para firewalls que lo nico que hacen es rutear paquetes al
exterior y frenar paquetes que vengan de internet.

You might also like