lunes, 4 de julio de 2011

Configuracion de Iptables (Firewall en Linux)

Que es un firewall
Lo primero que hay que tener en cuenta a la hora de configurar un firewall, es si verdaderamente es necesario, muchas personas, en la actualidad se conectan a Internet, de una u otra manera, desde las empresas, sus hogares o desde algún cybercafe, sin embargo, pocas de estas personas entienden realmente las consecuencias que tiene el abrir sus sistemas informáticos a Internet.

Un firewall es, por lo general, un software o hardware, a través del cual nos conectamos a una red como Internet, y que sirve como filtro sobre el tráfico que por él pasa, en ambas direcciones, y que en un momento dado puede rechazar cierto tráfico en alguna de las direcciones.




Eso quiere decir que, mediante un firewall, podemos detectar el tráfico no deseado hacia nuestros sistemas, y en general, los posibles ataques de que seamos objeto. De esta manera podremos aislar nuestros equipos del exterior, permitiendo nuestro uso de Internet de manera absolutamente normal pero minimizando en lo posible la probabilidad de padecer las consecuencias de un ataque.

Es frecuente también que se necesite exponer algún servidor a Internet (como es el caso de un servidor web, un servidor de correo, etc...), y en esos casos obviamente en principio se debe aceptar cualquier conexión a ellos.

 Iptables (Software Libre)
Iptables es la herramienta que nos permite configurar las reglas del sistema de filtrado de paquetes del kernel de Linux, desde su versión 2.4 (en 2.2 era ipchains). Con esta herramienta, podremos crearnos un firewall adaptado a nuestras necesidades.
El funcionamiento es simple: a iptables se le proporcionan unas reglas, especificando cada una de ellas unas determinadas características que debe cumplir un paquete. Además, se especifica para esa regla una acción o target. Las reglas tienen un orden, y cuando se recibe o se envía un paquete, las reglas se recorren en orden hasta que las condiciones que pide una de ellas se cumplen en el paquete, y la regla se activa realizando la acción que se le ha especificado.

Estas acciones se plasman en los que se denominan targets, que indican lo que se debe hacer con el paquete. Los más usados son bastante explícitos: ACCEPT, DROP y REJECT. En cuanto a los paquetes, el total del sistema de filtrado de paquetes del kernel se divide en tres tablas, cada una con varias cadenas (chains) a las que puede pertenecer un paquete, de la siguiente manera.
  • FILTER: Tabla por defecto, para los paquetes que se refieran a nuestra máquina
    • INPUT: Paquetes recibidos para nuestro sistema
    • FORWARD: Paquetes enrutados a través de nuestro sistema
    • OUTPUT: Paquetes generados en nuestro sistema y que son enviados
  • NAT: Tabla referida a los paquetes enrutados en un sistema con Masquerading
    • PREROUTING: Para alterar los paquetes según entren
    • OUTPUT: Para alterar paquetes generados localmente antes de ser enrutados
    • POSTROUTING: Para alterar los paquetes cuando están a punto para salir


  • MANGLE: Alteraciones más especiales de paquetes
    • PREROUTING: Para alterar los paquetes entrantes antes de ser enrutados
    • OUTPUT: Para alterar los paquetes generados localmente antes de enrutar

Especificación de reglas
Se hace con los siguientes parámetros (especificando aquellos que se necesite):
  • -p [protocolo]: Protocolo al que pertenece el paquete.
  • -s [origen]: dirección de origen del paquete, puede ser un nombre de host, una dirección IP normal, o una dirección de red (con máscara, de forma dirección/máscara).
  • -d [destino]: Al igual que el anterior, puede ser un nombre de host, dirección de red o dirección IP singular.
  • -i [interfaz-entrada]: Especificación del interfaz por el que se recibe el paquete.
  • -o [interfaz-salida]: Interfaz por el que se va a enviar el paquete.
  • [!] -f: Especifica que la regla se refiere al segundo y siguientes fragmentos de un paquete fragmentado. Si se antepone !, se refiere sólo al primer paquete, o a los paquetes no fragmentados.
Y además, uno que nos permitirá elegir qué haremos con el paquete:
  • -j [target]: Nos permite elegir el target al que se debe enviar ese paquete, esto es, la acción a llevar a cabo con él.
Antes de iniciar con el ejemplo de las reglas del firewall es importante reconocer que el orden de las reglas es determinante. Normalmente cuando hay que decidir que se hace con un paquete se va comparando con cada regla del firewall hasta que se encuentra una que le afecta (match), y se hace lo que dicte esta regla (aceptar o denegar); es decir una vez que un paquete coincide con una regla no se analizan las siguientes.


Ejemplo de reglas de iptables Inicializar
Establecer políticas por defecto , importante para definir en principio que todo lo que entra y sale por el firewall se acepta y solo se denegará lo que se diga explícitamente. Esto facilita mucho la gestión del firewall, ya que simplemente nos tenemos que preocupar de proteger aquellos puertos o direcciones que sabemos que nos interesa. Sin embargo esto puede resultar peligroso.


echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -X
iptables -F
iptables -Z
iptables -t nat -F


iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
#iptables -t nat -P FORWARD ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
Establecer políticas para denegar acceso al ssh en las interfaces eth0 y la red 192.168.1.0, permitir acceso total a la red desde las direcciones 172.16.2.0 y la red 172.16.20.0; permitir también que los usuarios de la red 172.16.10.0, puedan acceder al Internet y
Ejemplo de reglas para la tabla Filter
iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP
#
iptables -A INPUT -s 172.16.2.0/24 -j ACCEPT
iptables -A INPUT -s 172.16.20.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 80 -j ACCEPT


Por medio de esta regla se esta indicando que todo el trafico proveniente de la red 192.168.1.0, sera enmascarado con la dirección IP de la tarjeta de red eth0 (172.16.2.13, para este ejemplo)


Ejemplo de reglas para la tabla NAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE


Nota: Si el enrutador no tiene configurada una regla que indique realizar NAT a la red 172.16.10.0, sera indispensable, establecer una regla como la siguiente, sin embargo esto ocultara el trafico que proviene de esta red.

iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE

Este es un pequeño ejemplo de iptables, sin embargo iptables es una herramienta muy poderosa y es útil para realizar un sin numero de restricciones como sean necesarios, algunos prefieren desde el principio configurar un iptables mucho mas fuerte, inicializando las reglas con DROP, esto requerirá mas conocimiento por parte del administrador del equipo.

4 comentarios:

Angeles dijo...

me gusta...q bien Derman

Unknown dijo...

Esta bueno el aporte pero talvez fueras profundizado mas pero goodddddd

Anónimo dijo...

kisiera saber como puedo instalar un servidor firewall en linux pero no encuentro los pasos asta donde se se necesitan iptables pero no se de donde los descargo??

Derman Zepeda dijo...

bueno con esta pregunta, es posible realizar algunas cosas básicas primero.

Si no me equivoco, el iptables viene incorporado en todos los linux.

Ahora, lo que pasa es que iptables es la herramienta a nivel de usuario para configurar el firewall, sin embargo existen algunas aplicaciones que te permiten configurar un firewall básico sin meterse mucho en complicaciones. Sin embargo lo que estas herramientas hacen luego es generar lineas de iptables.

Publicar un comentario