miércoles 23 de septiembre de 2009

Ejemplos de reglas y algunas notas

I usually write the rules in a script file and then execute the file. This allows me to keep everything organized. Also if I make a mistake, I just have to go back and edit the script and re-execute it.

Una nota importante, las reglas que ponga "allow" deben ir antes, preceder a las reglas "deny".


Iptables Rules:

Allow localhost access to everythingiptables -A INPUT -s 127.0.0.1 -j ACCEPTiptables -A OUTPUT -s 127.0.0.1 -j ACCEPT
Allow all related and established tcp connections to my_machine.iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
Allow all outgoing connections from my_machine.iptables -A OUTPUT -j ACCEPT... now start writing the deny rules.
Deny all new tcp connections from remote machines. And log the same.iptables -A INPUT -p tcp -m state --state NEW -j LOGiptables -A INPUT -p tcp -m state --state NEW -j DROP

Block the apache port on my_machine. See the nmap command listing above. Also log the traffic.
iptables -A INPUT -p tcp -s 0/0 --dport 80 -j LOGiptables -A INPUT -p tcp -s 0/0 --dport 80 -j DROPNote: LOG rule must precede the corresponding filter rule.

Block ssh to my_machine. Also log the traffic.iptables -A INPUT -p tcp -s 0/0 --dport 22 -j LOGiptables -A INPUT -p tcp -s 0/0 --dport 22 -j DROP
Finally Deny everything else.iptables -A INPUT -j DROPiptables -A FORWARD -j DROPNow execute the script to load the rules into kernel space. That is it. Now we have got a robust firewall in place. You can check the results by re-running the nmap command listed above.

lunes 21 de septiembre de 2009

¿Que cadenas existen y para que sirven?

Las cadenas internas para la TABLA FILTER son las siguientes:

INPUT — Aplica a los paquetes recibidos a través de una interfaz de red. Paquetes -informacion - que entra desde afuera de la maquina.

OUTPUT — Esta cadena sirve para paquetes enviados hacia afuera de la maquina.

FORWARD — Esta cadena sirve para paquetes recibidos en una interfaz de red y enviados en otra. Los paquetes que entran por una puerta y salen por otra, que no se quedan adentro del equipo.

Las cadenas internas para la TABLA NAT son las siguientes:

PREROUTING — Altera los paquetes de red cuando estos llegan.
OUTPUT — Esta cadena altera paquetes generados localmente antes de que sean dirigidos por medio de una interfaz de red.
POSTROUTING — Altera los paquetes de red cuando estos son enviados.

¿Qué son y como funcionan las TABLAS?

En iptables existen 3 TABLAS principales: FILTER, NAT y MANGLE.

Las dos primeras son las mas usadas. FILTER te da el filtro, el firewall real, lo que define que trafico se admite y en que sentido.

NAT sirve para manipular paquetes, para alterar las direcciones o puertos que traen en el origen y/o destino, antes y/o despues de que se decidió la ruta que va a seguir.

La MANGLE es la tercera y no se usa cotidianamente. Por eso no explicaremos de ella aca mucho.


El kernel de Linux tiene incorporado la característica interna de filtrar paquetes, permitiendo aceptar algunos de ellos en el sistema mientras que intercepta y para a otros.

El netfilter del kernel tiene tres tablas o listas de reglas incorporadas. Son las siguientes:
filter — La tabla por defecto para el manejo de paquetes de red.
nat — Usada para alterar paquetes que crean una nueva conexión y utilizada para la Traducción de direcciones de red (Network Address Translation, NAT).
mangle — Usada por tipos específicos de alteración de paquetes.

Si no especificas ninguna tabla lo que piensa iptables es que quieres filtrar. Asi de simple.


La primera (filter) es donde se encuentran todas las cadenas que pueden contener reglas que hagan filtrado de paquetes (acepten, rechacen o denieguen paquetes).

La regla es la orden específica que le indica al kernel qué hacer cuando encuentra un paquete con las características que están indicadas en la misma regla. Las reglas están contenidas dentro de cadenas y las cadenas están dentro de las tablas. Sino se entiende todavía, a no desesperar que si seguís leyendo vas a terminar entendiendo. Y si ahun despues de leer todo tampoco, entonces, comentenlo por favor.


Entonces, el funcionamiento es sencillo: entra un paquete por una interfase de red y el kernel empieza a procesarlo, el paquete PASA POR TODAS LAS TABLAS SIEMPRE de iptables (pero no por todas las cadenas, ni mucho menos por cada regla) y es verificado contra cada una de las reglas que va encontrando dentro de las cadenas que tengan sentido. Cuando un paquete cumple con las características que se definieron en una regla, la acción es ejecutada.
Luego, dependiendo el tipo de regla, el paquete es verificado contra las subsiguientes reglas o no (generalmente no se continua con la verificación en las siguientes reglas. ¡Ya para que¡)

El paquete pasara por cada tabla, primero la tabla FILTER, luego, NAT y finalmente por la MANGLE. En cada una pasa por las cadenas que tenga sentido y buscara la regla que coincida. Sino coincide con ninguna se aplicara la decisión por default (decisión estandard) que se definio a la cadena. Y como dijimos pasara el paquete a la siguiente tabla y se aplicara la regla que coincida o la decisión por default (decisión estandard). ¿Sencillo verdad?.


Note que por default se aplica la tabla FILTER, si no se especifica alguna en la parametrizacion de la regla.

Se lo explico de otra manera, primero necesita saber como el firewall (iptables) manejara lo paquetes que "salen", "entran", o "pasan" a travez de la computadora. Basicamente hay tres cadenas para cada una de ellas. Cualquier paquete que entre a su computadora pasara por la cadena INPUT. Cualquier paquete que su computadora saque a hacia la red pasara por la cadena OUTPUT. Cualquier paquete que su computadora la tome de una red y la envia a otra pasara a travez de la cadena FORWARD.

Sin embargo las cadenas son la mitad de lo que hace iptables. ¿Que sera la otra mitad?, Siga leyendo y lo sabra.

Ahora lo que realiza iptables es que definir mediante reglas (leyes de computadora inmutables) en cada cadena lo que se hara con los paquetes que pasen a travez de la computadora.

Por ejemplo, si su computadora (el equipo linux donde esta el firewall - iptables-)envia un paquete a www.suwebmaster.net pidiendo una pagina HTML, este paquete primero pasara a travez de la cadena OUTPUT. El kernel revisara en las reglas de esa cadena para ver si alguna concuerda. En la primera regla que concuerde se decidira que hacer con el paquete finalmente. Puede por ejemplo que haya alguna que deniege poder conectarse con esa pagina.

Si ninguna regla coincide, entonces la politica para toda la cadena se aplicara como la decisión final de que hacer con el paquete. La desicion final, bien podria ser. ACCEPT (que se vaya el paquete), DENY (Que no pase pero que avise), (DROP, que no pase y que no se le avise a nadie).

Luego cuando SuWebmaster responda con la pagina esta pasara a travez de la regla INPUT. Asi de simple. Y nuevamente habran reglas que indiquen que sera hara con la respuesta.

¿Comandos para diagnósticos de problemas?

Asumo que los que leen son tecnicos, administradores de sistemas... entonces su vida envuelve revisar, reparar, configurar por ellos estos comandos a escribir dentro del servidor linux les seran de gran utilidad...

Despues de colocar una regla. Como podemos ver como se activo?
#iptables –L

Listar las reglas en mayor detalle?
#iptables -L -v –n

¿Como ver como estan las tablas por default?
#iptables –L

Para limpiar las reglas de la memoria RAM y por lo tanto desactivarlas temporalmente. Ya que si reinica la maquina es probable que vuelvan a activarse.

Escriba:
iptables --flush

El anterior comando es el mismo que:
iptables --table filter --flush
Porque filter se asume por default.

Ahora si quiere borrar de la RAM, y de uso las reglas para la cadena NAT. escriba:

iptables --table nat --flush

Entonces con este comando probablemente ya no podran navegar las computadoras de su red. Probablemente...

¿Porquedo implementar servidores Firewall y Proxy?

Por tres motivos principales: Control. Seguridad y Vigilancia.

Control:
Cuando está usando una máquina Linux para conectar su red interna a Internet, tiene la oportunidad de permitir ciertos tipos de tráfico, y restringir otros. Por ejemplo, la cabecera de un paquete contiene la dirección de destino del paquete, de manera que puede evitar que salgan los que van a cierto sitio fuera de la red.

Seguridad:
Cuando su máquina Linux es lo único entre el caos de Internet y su bonita y ordenada red, es bueno saber que puede restringir lo que llega aporreando su puerta. Por ejemplo, podríamos permitir todo lo que salga de la red, pero puede que esté preocupado que puede llegar gente maliciosa del exterior a invadir su Red local.

Vigilancia:
Algunas veces, una máquina mal configurada de la red local puede decidir vomitar paquetes al mundo exterior. O los usuarios internos estén haciendo uso del servicio de Internet de una manera inapropiada, improductiva. Entonces gracias a los reportes del Proxy server ud. podra saber como esta siendo usado el servicio de internet en su oficina.

Sugerencias para diseñar un proyecto de firewall:

Primero.

Tenga a mano la siguiente información:
Ip publica,
Ip privada,
DNS Servers.
Listado de usuarios y las ips de sus maquinas.
Que programas seran bloqueados y cuales no.

Asegurese que tiene el servicio de iptables funcionando.
Asegurese que el archivo que permite hacer forward de los paquetes es bien.
Asegure que el servicio de iptables sera activado cuando reinicie la compudora.
Verifique que puertos estan abiertos interna y externamente.
Detenga los programas que no necesitara.
Determine que quiere realizar en el equipo.

Conocimientos basicos para crear un firewall

Que debera aprender en este blog:

Poder escribir “reglas” (comandos) apropiadas de las que se valdra iptables para actuar con los paquetes. Estas reglas seran guardadas en un archivo, script localizado en: y llamado. Este sera ejecutado por.
Y para ser detenido se hace. Y para ser cargado al inicio se hace. Y para ser editado se escribe. Tambien saber en que ubicación sera colocadas. Las reglas seran escritas en un archivo por ejemplo: firewall.sc y mediante un comando sera ejecutado. Y se colocara en el arranque de Linux para que se ejecute cada vez que arranque Linux.

¿Qué puede realizar iptables con el paquete?
Puede realizar alguno de estos tres pasos: Lo puede aceptar para procesarlo internamente, lo puede hacer pasar (atraviesa el equipo), lo puede hacer salir. Y en cualquiera de estos tres procesos puede tambien modificar el paquete de su formar original. Y tambien lo puede descartar… que se esfume… desaparezca en cualquier paso. Y tambien el paquete sera comparado para ver si se rutea.

¿En que se agrupan (organizan) los comandos en iptables?
R. En Tablas, Cadenas y Reglas.


Cada TABLA (filter, nat, mangle) esta compuesta de un conjunto de CADENAS (input, output, forward, postrouting, prerouting)
Cada CADENA esta compuesta de un conjunto de REGLAS (- -regla ).
Cada REGLA esta compuesta de un conjunto de OBJETIVOS (accept, drop, reject).