miércoles, 18 de marzo de 2009

FIREWALL en Linux

Firewall es una combinación de hardware y de software para la protección de una red LAN evitando los accesos no autorizados a dicha red. Este es uno de los métodos mas utilizados para la protección en cuanto a recursos.

DIAGRAMA DE CONEXION



El FIREWALL en Linux esta incluido dentro del kernel a partir de su versión 2.4, el cual para su control utiliza iptables. Las acciones que podemos hacer en un firewall son tres;
ACCETP el cual permite la acción o regla, REJECT que niega la conexión enviando un mensaje al cliente, y DROP el cual niega la conexión sin ningún tipo de aviso en el cliente la conexión termina cuando espire el tiempo de vida del paquete.
INPUT y OUTPUT los utilizaremos cuando una petición de conexión tenga como destino un servicio dentro de nuestro firewall, si el destino es una red diferente al origen usamos FORWARD.

Para a clarar y practicar un poco daré algunos ejemplos de código y su respectiva funcionalidad. Pues empecemos!!!!

Es recomendable trabajar todo desde un archivo que crearemos y luego ejecutaremos cada vez que hagamos una modificación a las políticas del firewall.

Para crear el archivo: # touch firewall
Para definir una nueva regla sólo tenemos que decirle a iptables si tiene que insertar la nueva regla en alguna posición (-I numero) o bien simplemente añadirla al final (-A) y la descripción de la regla.

#!/bin/bash > firewall.
echo –n un mensaje para indicar que se a ejecutado el archivo

##para borrar las tablas actuales y evitar cualquier conflicto.
iptables -F
iptables -X
iptables -Z

## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

Con este bloque de instrucciones nuestro firewall esta listo y esta aceptando cualquier conexión asía él podemos ver como queda nuestra tabla con el comando desde la consola:
# iptables -L

ahora solo permitiremos conexiones salientes desde nuestro firewall asía el puerto 80.

#!/bin/bash > firewall.
echo –n un mensaje para indicar que se a ejecutado el archivo

##para borrar las tablas actuales y evitar cualquier conflicto.
iptables -F
iptables -X
iptables -Z

## Establecemos politica por defecto
iptables -P INPUT DROP
iptables -P OUTPUT DROP

## Establecer las politicas de conexión.
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

Se aceptan cohttp://www.blogger.com/img/blank.gifnexiones de entrada que tengan como puerto origen 80 (servicio WEB)y de salida co puerto de destino 80, hay que tener cuidado al crear una regra ya que si se hace una de entrada se debe hacer otra de salida. Ahora explicare un poco mas el comando; -A quire decir que adicionaremos una nueva regla en este caso INPUT o OUTPUT, el -p (minuscula) indica que protocolo se va a manejar en la regla tcp, udp o icmp, --sport indica el puesto de origen, --dport puesto destino y el -j indica que accion se va a tomar ACCEPT, REJECT o DROP.

NOTA:si se va a trabajar con DNS para realizar la conexión al servicio WEB tambien debemos permitir la entrada y salida del DNS. la configuracion es similar a la anterior.

Para continuar mostrare un archivo en el cual se recreara el siguiente escenario

Hay una red LAN con unservidor web el cual quiero que visiten pero que no puedan asceder desde internet pero de una forma segura para mi red, para esto mi cuento con una ip publica 200.13.215.12 asignada a mi eht0, y dentro de mi LAN una direccion 192.168.1.1 asignada mi tarjeta de red eth1, además la direccion de mi servidor web es 192.168.1.2.

#!/bin/bash

##FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z

## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

#empesaremos a filtrar
#ahora redigiremos todo lo que venga del exterior y valla hacia el puerto 80
#hacia una nuestra red interna
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80

# Ahora hacemos enmascaramiento de la red local
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# Aceptamos que nuestra interna vayan a puertos 80
iptables -A FORWARD -s 0.0.0.0/0 -d 10.5.3.0/24 -p tcp --sport 80 -j ACCEPT
iptables -A FORWARD -s 10.5.3.0/24 -d 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT

iptables -A FORWARD -s 0.0.0.0/0 -d 10.5.3.0/24 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -s 10.5.3.0/24 -d 0.0.0.0/0 -p tcp --sport 80 -j ACCEPT

iptables -A FORWARD -s 0.0.0.0/0 -d 10.5.3.0/24 -p udp --sport 53 -j ACCEPT
iptables -A FORWARD -s 10.5.3.0/24 -d 0.0.0.0/0 -p udp --dport 53 -j ACCEPT

en este punto habremos notado algunos elementos nuevos como son NAT que cambiara en la cabecera la direccion IP de destino por la del Firewall (a este proceso lo llamos enmascaramineto).


NOTA: para la ejecucion del archivo que hemos creado en la consola donde esta el archivo y le concederemos permisos chmod 755 nombre_archivo y luego digitamos ./nombre_archivo, donde nombre_archivo es el archivo creado.

Datos personales

solo quiero compartir algo