[tutorial]IPtables - Firewall Linux

Discussion in 'Manuales' started by Batusai.cl, Mar 22, 2010.

  1. Batusai.cl

    Batusai.cl Usuario Nuevo nvl. 1
    37/41

    Joined:
    Jul 27, 2009
    Messages:
    218
    Likes Received:
    1
    Introducción

    Que es Iptables? Sirve para filtrar paquetes tcp/ip mediante reglas estrictamente establecidas (es pocas palabras smile.gif es un cortafuegos o firewall).

    Para que me demonios me sirve un firewall? Para controlar el trafico de información o paquetes que pasa por nuestra ordenador e internet (incluyendo redes locales).

    Bien, como obtengo un firewall en Linux? Facil wink.gif, solo debes cargar los "modulos" necesarios que te permitiran realizar cierta actividad con los paquetes que especifiques (Para información sobre los modulos consultar google.com o la ayuda del kernel), en conjunto con el kernel y el programa "Iptables" ( http://www.iptables.org/ http://www.linuximq.net/ http://l7-filter.sf.net/ ).
    Para descargar iptables se puede usar nuestro gestor de paquetes, algunos de los que conosco:

    Debian: apt-get install iptables
    Gentoo: emerge iptables

    Claro tambien puede optar por compilar el programa a mano o usar paquetes precompilados de ciertas distros..

    Demonios! xD, pero como levanto esos mentados modulos? Basicamente estos modulos estan ya disponibles en la mayoria de las distribuciones GNU/Linux que existen en la actualidad..
    Para darlos de alta utilizamos la herramienta modprobe, primero antes que nada hay que mirar que modulos tenemos disponibles con modprobe -l | grep netfilter :


    Se preguntaran que modulos necesito, para esto les recomiendo levantar los modulos principales para el funcionamiento:


    Conforme estemos asignando nuestras reglas de iptables puede que pida algun modulo y mande algun error, solo quedaria montar dicho modulo que nos pida wink.gif.


    Mmm y si no tengo los modulos? Buena pregunta, pues habrá que modificar el kernel (tema que no nos corresponde en este momento). Solo como nota hay que entrar a la carpeta del kernel, modificar el kernel y hacer los cambios correspondientes en nuestro gestor de arranque si es necesario, serÃ*a algo como esto:


    Conceptos basicos

    En primera necesitamos saber las politicas que iptables usa por defecto:

    Por asi definirlas, tenemos tres secciones: INPUT (entrada), OUTPUT (salida) y FORWARD (Redireccionamiento). Estas por defecto estan puestas para aceptar todo el trafico (ACCEPT), bien!?, pues aqui necesitamos saber bien que es lo que queremos:

    - Denegar todo y aceptar solo lo que necesitamos
    - Aceptar todo y denegar solo lo que se necesita

    En este punto ustedes tendrán que idear una estrategia de filtrado, en mi caso les recomiendo denegar la entrada y el redireccionamiento (INPUT Y FORWARD) y aceptar todo lo que yo mande al exterior (OUTPUT). Para esto, hacemos lo siguiente:




    Quedando:



    Nomenclatura de Iptables

    iptables -A Agrega una regla
    iptables -D Elimina una regla
    iptables -P Politica por defecto
    iptables -R Reemplazar una ragla
    iptables -L Lista las reglas actuales
    iptables -F Elimina todas las reglas

    En las reglas podemos hacer uso de ciertos parametros que son los siguientes:

    -p Potocolo (tcp,icmp,udp,etc)
    -s Ip fuente
    -d Ip destino
    -o Interfaz de salida (ethx, lo, etc)
    -i Interfaz de entrada (ethx, lo, etc)
    --sport Puerto o rango de puertos fuente
    --dport Puerto o rango de puertos destino
    -j Acción a tomar ( ACCEPT o DROP, Aceptar o Denegar)

    Denegar todo y aceptar solo lo que necesitamos

    Quiero creer que esta es la mejor manera de entender las reglas de iptables y por obvió la opción mas segura para nuestro equipo de computo.

    Les muestro mi ip de la tarjeta Ethernet:


    Asignamos politicas por defecto



    Haciendo ping?

    (vale es como si la tarjeta de red estuviera desconectada) XD




    Aceptando ping al exterior

    Que demonios dice lo de arriba? Aceptamos paquetes de salida de la ip 192.168.1.2 (nuestra ip) hacia la ip 192.168.1.1 del protocolo icmp..

    Excelente!! Hacemos el ping?

    [/QUOTE]

    Pero que sucede? Nada smile.gif, el problema esta en que aceptamos paquetes para enviar pero recuerden que tenemos cualquier paquete de entrada denegado. En este caso el ping usa el protocolo icmp el cual envia un paquete para saber si el host esta conectado a la red (echo-request), el host destino una ves recibido el paquete de pregunta xD reenvia otro paquete con el cual contestara a nuestra solicitud (conocido como echo-reply)..

    Agregamos la regla faltante
    Hacemos ping xO
    Miramos nuestras primeras dos reglas para que se familiarizen con estos reportes tongue.gif

    Ejercicio: Permitir ping desde el exterior

    Haciendo telnet?

    Malo malo, manos a la obra xD

    Aceptamos paquetes de salida de cualquier puerto privilegiado (1024:65535 son puertos que por default estan asignados a ciertos programas o servicios, paquetes enviados fuera de este rango puede ser inseguros) de mi ip hacia el puerto telnet (23) de la ip 192.168.1.1.

    Aceptamos paquetes de entrada del puerto 23 de la ip 192.168.1.1 hacia nuestra ip en cualquiera de los puertos privilegiados.

    Ejercicio: Permitir que entre desde telnet del exterior

    Obteniendo Internet?

    Vamos estoy atras de un router el cual me comparte internet a la red local, por ende necesito tener comunicación con el..

    ####Primero que nada quiero conexión entre ellos asi que habilitamos los paquetes icmp
    Aceptamos paquetes de entrada icmp de la ip 192.168.1.1 (router) hacia la interfaz eth0

    ##Resolviendo mis DNS
    Aceptamos paquetes de entrada del puerto 53 de nuestros servidores de nombres hacia mi interfaz eth0


    ####Accediendo a paginas WEB
    Aceptamos paquetes de entrada del puerto 80 de cualquier ip hacia mi interfaz eth0

    ###Aceptar cualquier otra conexión del exterior ya establecida o relacionada anteriormente con nosotros:
    Esto en gran medida puede reemplazar a las otras dos reglas anteriores XD..
    Aqui se presnetan parametros nuevos:
    -m --state se utiliza para comparar el tipo de conexión existente, puede obtener los siguientes estados:

    NEW Conexión nueva
    ESTABLISHED Conexión ya establecida anteriormente
    RELATED Conexión relacionada
    INVALID Conexión invalida

    Les dejo las reglas realizadas:
    Si apreciaron con el paremtro --line-numbers enumeramos las reglas, esto es util al momento de reemplazar una o al querer eliminarlas..

    Para eliminar la regla "ACCEPT icmp -- 192.168.1.1 anywhere" hacemos:
    A estas altura ya sabrán como abrir y cerrar puertos, no¿?

    Funcionar como gateway con iptables

    Que es un gateway? También es conocido como encaminador, esto permite reenviar paquetes que pasa por una tarjeta de red hacia una dirección especifca..

    Que necesitamos? Basicamente disponer de dos tarjetas de red, digo dos por que una será utilizada para obtener internet y otra para hacer funcionar la red local (LAN)..

    Para activar nuestro sistema como gateway hay que permitir el forward entre interfaces de red. Hay dos formas de hacerlo, una temporal y otra permanente (la temporal puede servir para hacer pruebas nadamás):

    Temporal (programación bash XD):

    echo "1" > /proc/sys/net/ipv4/ip_forward

    Permanente

    Editar /etc/sysctl.conf (es necesario reiniciar):

    Hay otras maneras claro, pero son las mas comunes, las cuales depende en gran medida de la distribución. Igual puede agregar el primer comando al momento de levantar su configuración de su tarjeta al iniciar el sistema..

    Aqui hay algo importante de mencionar, para poder compartir internet deberán tener su modem en modo bridge o monopuesto conectado a la pc que funcionará como gateway (supongamos a la interfaz eth0) y la otra tarjeta de red (eth1) conectada a un switch o hub (o a otra pc si solo cuentan con dos). El esquema es algo asÃ*:

    Code:
    
    Modem
    ---------  eth0    ---------------   eth1    -----------
    router   ---->  MiPc (gateway) ------>  switch/hub
    ---------    ---------------        -----------
                          |__|___|__________________________    
                                |    |    |                    
                               --------  -------  --------
                                 PC1       PC2     PC3    
                               --------  -------  --------
    
    Un gateway funciona mas o menos como un router..

    Como le digo a mis otros host que mi pc es el gateway al que deben de consultar? Regramos al mismo tema XD, depende de la distribución:

    En debian y derivados: Editar /etc/sysconfig/network y agregar GATEWAY=ip

    En gentoo: Editar /etc/conf.d/net y agregar routes_eth0=( "default gw ip" )

    Temporal: Teclear el siguiente comando (funciona en todas las distros):

    # route add default gw ip

    Empezando a filtrar paquetes con la tabla NAT (Ejemplos)

    Basicamente esta tabla se encarga de dos cosas:

    1)Modificar la dirección ip fuente de los paquetes

    2)Modificar la dirección ip destino de los paquetes

    Por este motivo se divide en dos secciones:

    SNAT (Source NAT): Cuando se altera la ip fuente del paquete (paquetes de salida)
    DNAT (Destination NAT): Cuando se altera la ip destino del paquete (paquetes de entrada)

    Como maneja iptables estas tablas?
    En primera hay que usar la opción -t nat..
    Seguido de una de estas dos opciones:

    POSTROUTING: Se usa para SNAT
    PREROUTING: Se usa para DNAT

    Obteniendo Internet en la red local (SNAT)

    Supongamos que tenemos salida hacia Internet con una ip fija.

    Que necesitamos? Editar el paquete de salida a nombre de la ip que nos ofrece internet, el por que? es facil, cuando un host de la red local haga ping a google.com estará tratando de enviar paquetes con una ip privada, lo cual ni de risa nos permitirá hacer conexión con tal host (google.com), tengan en cuenta que siempre tenemos que tener una ip publica con acceso a internet..

    Que bien, pero que coño dice?

    -t nat Especificamos que usamos la tabla NAT para hacer forward (que por defecto esta activado)

    -A POSTROUTING Indicamos que vamos a modificar la ip fuente del paquete

    -o eth0 Es la interfaz de la cual vamos a enviar el paquete (deberá ser la interfaz con conexión a internet)

    -j SNAT --to 200.33.146.217 Señalamos que todos los paquetes que salgan de la interfaz eth0 tendrán la ip 200.33.146.217, la cual tiene acceso a internet

    Supongamos que tenemos salida hacia Internet con una ip dinamica.

    La mayoria de los ISP dan a sus cliente acceso a internet mediante un rango de ip's (ip's dinamicas), por lo tanto es dificil decidir cual será la ip fuente con acceso a la red mundial. Para esto hacemos uso del Enmascaramiento (similar a SNAT) en donde no se especifica la ip fuente, la cual tomará la ip del host emisor el cuál pertenece a otra subred (en este caso la ip con salida a Internet):

    Servidor Web (DNAT)

    Supongamos tenemos la siguiente situación: Internet ( 200.33.146.217) y un host con servidor WEB dentro de la red local (192.33.20.3)

    Con esto deseamos que puedan acceder a nuestro sercvidor WEB desde cualquier parte del mundo, asÃ* que agregamos la siguiente regla al gateway wink.gif

    Se lee: Todos aquellos paquetes tcp que vengan de Internet con destino al puerto 80 serán reenviados a nuestro servidor web que se encuentra en el host y puerto 192.33.20.3:80

    Redireccionamiento de puertos localmente (DNAT)


    [/QUOTE]

    Se lee: Todos los paquetes que se reciban con destino al puerto local 80 del gateway serán redireccionados al puerto 113.


    PD: info sakada de un pdf que me envio mi ex profe de 4 medio... perdon los errores de las letras.


    ::portalnet::
     
    Ogroberto likes this.
  2. AL2_

    AL2_ Usuario Habitual nvl.3 ★
    187/244

    Joined:
    Apr 25, 2009
    Messages:
    20,230
    Likes Received:
    12
    gracias por la info!!
     
  3. Ogroberto

    Ogroberto Usuario Casual nvl. 2
    87/163

    Joined:
    Sep 11, 2008
    Messages:
    5,396
    Likes Received:
    7
    Aportazo wn!!

    Te las mandaste.

    Se agradece
     
  4. Merovingio

    Merovingio Usuario Habitual nvl.3 ★
    187/244

    Joined:
    Mar 20, 2009
    Messages:
    33,491
    Likes Received:
    6
    se agradece el tuto
     
  5. keldon

    keldon Usuario Nuevo nvl. 1
    6/41

    Joined:
    Dec 14, 2009
    Messages:
    48
    Likes Received:
    0
    vale men por la info!!!
     
  6. - El Naxo -

    - El Naxo - Usuario Casual nvl. 2
    37/41

    Joined:
    May 7, 2009
    Messages:
    2,098
    Likes Received:
    8
    wow
    se agradece el aporte