domingo, 20 de noviembre de 2011

CORFAFUEGOS





Un cortafuegos o firewall es un sistema que previene el uso y el acceso desautorizados a tu ordenador.
Los cortafuegos pueden ser software, hardware, o una combinación de ambos. Se utilizan con frecuencia para evitar que los usuarios desautorizados de Internet tengan acceso a las redes privadas conectadas con Internet, especialmente intranets.
Todos los mensajes que entran o salen de la Intranet pasan a través del cortafuegos, que examina cada mensaje y bloquea los que no cumplen los criterios de seguridad especificados.
Es importante recordar que un cortafuegos no elimina problemas de virus del ordenador, sino que cuando se utiliza conjuntamente con actualizaciones regulares del sistema operativo y un buen software antivirus, añadirá cierta seguridad y protección adicionales para tu ordenador o red.


Cortafuegos de hardware


Los cortafuegos de hardware proporcionan una fuerte protección contra la mayoría de las formas de ataque que vienen del mundo exterior y se pueden comprar como producto independiente o en routers de banda ancha.
Desafortunadamente, luchando contra virus, gusanos y Troyanos, un cortafuegos de hardware puede ser menos eficaz que un cortafuegos de software, pues podría no detectar gusanos en emails.


Cortafuegos de software


Para usuarios particulares, el cortafuegos más utilizado es un cortafuego de software. Un buen cortafuegos de software protegerá tu ordenador contra intentos de controlar o acceder a tu ordenador desde el exterior, y generalmente proporciona protección adicional contra los troyanos o gusanos de E-mail más comunes.
La desventaja de los cortafuegos de software es que protegen solamente al ordenador en el que están instalados y no protegen una red.







Tipos de técnicas cortafuegos


Packet filter: mira cada paquete que entra o sale de la red y lo acepta o rechaza basándose en reglas definidas por el usario. La filtración del paquete es bastante eficaz y transparente a los usuarios, pero es difícil de configurar. Además, es susceptible al IP spoofing.
Application gateway: Aplica mecanismos de seguridad a ciertas aplicaciones, tales como servidores ftp y servidores telnet. Esto es muy eficaz, pero puede producir una disminución de las prestaciones.
Circuit-level gateway: Aplica mecanismos de seguridad cuando se establece una conexión TCP o UDP. Una vez que se haya hecho la conexión, los paquetes pueden fluir entre los anfitriones sin más comprobaciones.
Proxy server: Intercepta todos los mensajes que entran y salen de la red. El servidor proxy oculta con eficacia las direcciones de red verdaderas.
En la práctica, muchos cortafuegos utilizan dos o más de estas técnicas a la vez.
Un cortafuegos se considera la primera línea de defensa en la protección de la información privada. Para mayor seguridad, los datos pueden ser cifrados.



Reglas del cortafuegos:


Comenzaremos con las reglas para soportar el uso de ftp-proxy(8), de modo que los clientes FTP en la red local puede conectarse a servidores FTP en Internet. Esto funciona mediante la inserción dinámica de las reglas cuando se realiza una conexión ftp. Se hace por medio de un anclaje:
anchor "ftp-proxy/*"

Ahora añadiremos la regla que permita la redirección de las conexiones FTP para que puedan ser vistas por ftp-proxy(8):
pass in quick on $int_if inet proto tcp to any port ftp \
rdr-to 127.0.0.1 port 8021

Esta regla interceptará las conexiones FTP en el puerto 21 y las redirigirá a una instancia ftp-proxy(8) que se ejecuta en el puerto 8021 y, a través del uso de la palabra clave quick, los paquetes válidos no serán verificados por el resto del conjunto de reglas. Si los usuarios se conectan regularmente a los servidores FTP en otros puertos, entonces se debe utilizar una lista para especificar el puerto de destino, por ejemplo: to any port { 21, 2121 }.

Hay que subrayar que tanto el anclaje como la regla de redirección ftp-proxy(8) necesitan ser situados antes de cualquier regla match para el NAT o el ftp-proxy(8) no funcionará como se espera.

Ahora vamos a ver las reglas match. Por sí misma, una regla match no determina si a un paquete se le permite o no pasar. En cambio, se almacenarán los parámetros de los paquetes que coincidan con esta regla y se utilizarán en cualquier regla pass que luego valide estos paquetes.

Esto es potente: parámetros tales como NAT o formación de colas (queueing) pueden aplicarse a ciertas clases de paquetes y los permisos de acceso definirse después por separado.

Para disponer de NAT en toda la red interna se utiliza la siguiente regla match:
match out on egress inet from !(egress:network) to any nat-to (egress:0)

En este caso, el "!(egress:network)" podría ser fácilmente reemplazado por un "$int_if:network", pero si usted ha agregado múltiples interfaces internas, habría que añadir reglas NAT adicionales, mientras que con esta estructura NAT será manejado en todas las interfaces protegidas.

Dado que la dirección IP de la interfaz externa se asigna dinámicamente, los paréntesis se colocan en torno a la interfaz de traducción para que PF sea avisado cuando la dirección cambia. El sufijo :0 se utiliza para que si la interfaz externa tiene múltiples direcciones, sólo la primera dirección se utilice para la traducción.

Para acabar, se especifica la familia de protocolos inet (IPv4) Esto suprime la traducción de todos los paquetes inet6 (IPv6) que puedan ser recibidos.

Ahora las reglas para controlar los permisos de acceso. Se empieza con una denegación de forma predeterminada:
block in log

En este punto todo el tráfico que intenta entrar en la interfaz será bloqueado, incluso el que proviene de la red interna. Estos paquetes también son logueados. Las reglas siguientes abrirán el cortafuegos de acuerdo con los objetivos descritos anteriormente, y abrirán también todos los interfaces virtuales necesarios.

Tenga en cuenta que pf puede bloquear el tráfico entrante o saliente de un interfaz. Puede simplificar su vida si usted elige filtrar el tráfico en una dirección, en lugar de tratar de bloquear entrada y salida. En nuestro caso, optaremos por filtrar únicamente el tráfico de entrada, pero una vez permitida la entrada en una interfaz, no vamos a tratar de obstruir la salida, por lo que haremos lo siguiente:
pass out quick
Utilizando quick puede evitarse que los paquetes salientes sean verificados contra las reglas siguientes, mejorando así el rendimiento.

Es útil usar también la protección contra la falsificación de direcciones (antispoofing):
antispoof quick for { lo $int_if }

Ahora abrimos los puertos usados por los servicios de red que estarán disponibles desde Internet. Primero, el tráfico que se destina al cortafuegos mismo:
pass in on egress inet proto tcp from any to (egress) \
port $tcp_services

Especificar los puertos de red en la macro $tcp_services simplifica la apertura de servicios adicionales a Internet, simplemente mediante la edición de la macro y la recarga del conjunto de reglas. Los servicios UDP también pueden abrirse mediante la creación de una macro $udp_services y la adición de una regla de filtrado, similar a la indicada anteriormente, que especifique proto udp.

La siguiente regla captura cualquier intento de conexión desde Internet por medio del puerto TCP 80 del cortafuegos. Los intentos legítimos para acceder a este puerto procederán de usuarios que tratan de acceder al servidor web de la red. Estos intentos de conexión deben ser redirigidos a COMP3:
pass in on egress inet proto tcp to (egress) port 80 \
rdr-to $comp3 synproxy state

Para incrementar un poco la seguridad, usaremos el proxy de paquetes TCP SYN con el fin de proteger el servidor web.

Debe permitirse el tráfico ICMP:
pass in inet proto icmp all icmp-type $icmp_types

Similar a la macro $tcp_services, la macro $icmp_types puede fácilmente ser modificada para alterar los tipos de paquetes ICMP que serán autorizados a alcanzar el cortafuegos. Téngase en cuenta que esta regla se aplica a todas las interfaces de red.

Ahora el tráfico de la red interna debe ser permitido. Asumimos que los usuarios de la red interna saben lo que hacen y no causarán problemas. Esto no es necesariamente una asunción válida para muchos entornos; para muchos otros contextos pueden ser más apropiado un conjunto de reglas más restrictivo.
pass in on $int_if

Se permite que el tráfico TCP, UDP y ICMP salga del cortafuegos hacia Internet gracias a la regla precedente "pass out". La información sobre el estado se guarda para que los paquetes de vuelta pasen a través del cortafuegos.