miércoles, 30 de julio de 2014

IPTABLES (desde otra perspectiva)

Indagando mas sobre seguridad en redes y sobre configuración de IPTABLES, encontré un curso muy interesante que quisiera compartir con ustedes, pero de forma mas clara y resumida, ya que es algo extenso y por este medio solo colocare los puntos mas importantes y combinados con otros documentos que he conseguido que me han parecido muy interesante sobre esta herramienta, no creo que sea el mejor post sobre el tema pero voy a tratar de no ser tan teórico sino que también colocar algunos ejemplos para poder asimilar mejor los conocimientos, pero como todo, sino tenemos una buena base teórica se nos puede realizar un tanto engorroso la configuración, y sin mas preámbulos, realmente que es 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. esta construido sobre Netfilter que es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento. 

En resumidas cuentas que puedo hacer con esta herramienta: 

1. IPTABLES permite definir reglas acerca de que hacer con los paquetes de red.
2. Las reglas se agrupan en cadenas.
3. Cada cadena es una lista ordenada de reglas.
4. Las cadenas se agrupan en tablas
5. Cada tabla esta asociada con un tipo diferente de paquete.

El total del sistema de filtrado de paquetes del kernel se divide en tres tablas, cada una con varias chains a las que puede pertenecer un paquete, de la siguiente manera.

Filter, el filtrado de paquetes, contienen las siguientes cadenas predefinidas: 

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, reenvío de paquetes, contiene las siguientes cadenas predefinidas: 

PREROUTING: los paquetes entrante pasan a través de esta cadena, antes de que se consulte la tabla de enrutamiento local (DNAT - Destination-NAT). 
POSTROUTING: los paquetes salientes pasan por esta cadena, después de haber tomado la decisión de ruteo. (SNAT - Source-NAT)
OUTPUT: permite hacer un DNAT limitado en paquetes generado localmente. 

Mangle, diseñada para efectos avanzados, permite la alteración de paquetes y tramas, contiene las siguientes cadenas predefinidas:

PREROUTING: todos los paquetes que logran entrar a esta sistema, antes de que el ruteo decida si el paquete debe ser enviado o si tiene destino local. 
INPUT: todos los paquetes destinados para este sistema
FORWARD: todos los paquetes que pasan por este sistema. 
OUTPUT: todos los paquetes creados en el sistema
POSTROUTING: todos los paquetes que abandonan este sistema. 

Lo que dejo a continuación son algunas reglas básicas. 

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT 

En la primeras 2 lineas tenemos que todo los que sea entrada (INPUT) y re-direccionamiento (FORWARD) quedan bloqueados (DROP) y mediante la 2 ultimas lineas aceptamos (ACCEPT) el enrutamiento. 

Cada regla especifica que paquetes la cumplan y un destino que indica que hacer con el paquete si esté cumple esta regla. su sintaxis la podemos plasmar de la siguiente manera: 

iptables -t [tabla] -o[operación] [cadena] [coincidencia] -j[ACCIÓN]

operación 

A (add) agregar la regla al final
I (insert) agregar regla al principio 
R (replace) reemplazar una regla 
D (delete) borrar una regla
F (flush) borrar todas las reglas de una sola cadena 
L (list) muestra las reglas de una cadena 

coincidencia 

-p [protocolo]: puede ser tcp, udp, icmp, all. o alguno de los indicados en /etc/protocols .
-s [ip/mascara]: dirección de origen o grupo de host.
-d [ip/mascara]: dirección de destino o grupo de host. 
-i [interfaz]: interfaz donde se recibe el paquete (solo INPUT, FORWARD y PREROUTING)
-o [interfaz]: interfaz de salida (solo OUTPUT, FORWARD y POSTROUTING)
--sport: puerto de origen de la transacción (solo para protocolo tcp o udp)
--dport: puerto de destina de la transacción (solo para protocolos tcp o udp)

ACCIÓN 

ACCEPT: acepta la transacción 
DROOP: rechaza la transacción
REJECT: rechaza la transacción y notifica al emisor
QUEUE: encola el paquete, para ser alterado por la biblioteca libipq
RETURN: el paquete deja de circular por la cadena 
LOG: crea una bitácora de los paquetes (ejemplo verificar que paquetes están siendo rechazados)
DNAT: permite modificar la dirección y el puerto de destino. 
SNAT: permite modificar la dirección y el puerto de origen. 
MASQUERADE: forma especial y restringida de SNAT. 

0 comentarios :

Publicar un comentario