Otra forma de defensa es tomar medidas en las máquinas que tengamos bajo nuestro control para que reaccionen adecuadamente ante la presencia de estos paquetes sospechosos. Si un paquete consigue entrar en la red y engañar al NIPS y llega al equipo, todavía tiene que superar un control más por cada equipo: el firewall o cortafuegos.
¿Qué hace?
El firewall es un software especializado que se interpone entre las aplicaciones y el software de red para hacer un filtrado de paquetes:
- En el tráfico entrante, la tarjeta de red recibe el paquete y lo identifica, pero antes de entregarlo a la aplicación correspondiente, pasa por el firewall para que decida si prospera o no.
- En el tráfico saliente, las aplicaciones elaboran sus paquetes de datos, pero antes de entregarlo al software de red para que lo envíe, pasa por el firewall.
- En los servidores generalmente actúa sobre el tráfico entrante: los servicios que ejecutan abren determinados puertos y nos permite controlar quién se conecta a ellos.
- En los equipos cliente: por defecto, todas las conexiones entrantes están prohibidas si la conversación no la ha iniciado el propio cliente y todas las salientes permitidas.
La inteligencia del firewall se expresa mediante reglas de configuración, donde el administrador de la máquina puede individualmente activarlas, desactivarlas, modificarlas o añadir nuevas. Este proceso puede ser automático.
Las reglas se suelen aplicar sólo a las cabeceras TCP/IP: el firewall básicamente mira direcciones IP y puertos, aunque también puede reconocer conversaciones entre dos equipos y controlarlas.
Existe un tipo de firewall más sofisticado, llamado firewall de nivel de aplicación, donde sí se entra a mirar en los datos de usuario que hay más allá de las cabeceras. Se utiliza sobre todo en protocolos web (HTTP). Por tanto, es más potente (y más lento) que el firewall normal, pero menos complejo (y más rápido) que todo un IPS.
¿Dónde situarlo?
Todas las máquinas de la empresa conectadas a la red necesitan activar un firewall. El firewall nos ayuda a bloquear paquetes de red no solicitados.
Para evitar que se inunde la red con paquetes que no llegarán a su destino, o para ayudar a máquinas que no tienen firewall, en los puntos críticos de la red se suelen colocar máquinas independientes ejecutando tareas de firewall (firewall de red).
Los routers domésticos proporcionados por los ISP (Internet Service Provider) hacen funciones de firewall, porque por defecto se comportan como equipos de usuario y no permiten conexiones entrantes; pero una empresa suele necesitar más configuraciones, por lo que instalará su propio firewall de red.
En las empresas grandes hay máquinas distintas para cada servicio, todas situadas en una subred especial llamada DMZ (Demilitarized Zone, zona desmilitarizada). El firewall de esta zona es menos exigente que el que protege nuestra LAN, porque tenemos que permitir conexiones a esos servicios; pero, como está expuesto a más ataques, se suele acompañar de un IDS/IPS.
Firewall en Linux. iptables
Cuando llega un paquete a la tarjeta de red, el sistema operativo (más concretamente, el software de red) decide qué hacer con él. El resultado de esa decisión puede ser:
- Descartarlo. Si el destinatario del paquete no es nuestra máquina o, aunque lo sea, ningún proceso actual lo espera, el paquete termina aquí.
- Aceptarlo, porque es para nosotros y hay un proceso que sabe qué hacer con ese paquete.
- Aceptarlo, aunque no sea para nosotros, porque somos un router y vamos a enviarlo por otra interfaz.
- Aceptarlo, aunque no es para nosotros y tampoco somos un router: pero estamos escuchando todos los paquetes porque somos un sniffer de red.
En el caso de Linux, la utilidad iptables permite introducir reglas en cada una de estas fases:
- Cuando llega el paquete para un proceso nuestro pero todavía no se lo hemos entregado, en iptables hablamos de input.
- Cuando somos un router y estamos a punto de traspasar el paquete de una interfaz a otra, en iptables hablamos de forward.
- Cuando un paquete está listo para salir por una interfaz, en iptables hablamos de output.
Hay un par de etapas más:
- Prerouting. Se ejecuta antes de input. Sirve para obviar el enrutamiento porque sabemos exactamente qué tratamiento dar a esos paquetes.
- Postrouting (después de output y después de forward). Se utiliza para aplicar alguna modificación a los paquetes que están a punto de abandonar la máquina.
Las reglas de iptables tienen una lista de condiciones y una acción, de manera que, cuando un paquete cumple todas las condiciones de una regla, se ejecuta la acción.
Condiciones:
- interfaz por la que entró, la interfaz por la que va a salir, la dirección IP o la subred del paquete, el tipo de protocolo, el puerto origen o destino, etc.
Acciones:
- Pueden ser simplemente aceptar o rechazar el paquete, o también modificarlo.
Pero no todas las acciones están disponibles en todas las situaciones. Por esto las reglas se agrupan en tres tablas principales:
- filter. Es la tabla principal. Su misión es aceptar o rechazar paquetes. Es el firewall propiamente dicho.
- nat. Las reglas de esta tabla permiten cambiar la dirección de origen o destino de los paquetes.
- mangle. En esta tabla podemos alterar varios campos de la cabecera IP, como el ToS (Type of Service). Se suele usar para aplicar QoS (Quality of Service), marcando los paquetes de determinados servicios para luego priorizarlos.
Firewall en Windows
Los sistemas operativos Windows siempre han tenido mala fama en cuanto a seguridad ante malware; sin embargo, la versión XP introdujo un firewall muy robusto y sencillo. Las versiones posteriores (Vista, Windows 7, 8, 10) han mantenido la robustez, aunque han sacrificado la sencillez para elaborar reglas complejas que permitan cubrir todas las necesidades del usuario.
Comparado con iptables, el firewall de Windows es más sencillo (no hay tantas tablas ni etapas) y más agradable de usar (interfaz de ventanas en lugar de comandos). A diferencia de Linux, la configuración por defecto para las conexiones entrantes es rechazarlas, no aceptarlas.
Cuando un programa decide ofrecer algún tipo de servicio (servidor web apache, mysql, etc) decide abrir un puerto para recibir conexiones, la decisión por defecto del firewall es bloquear esa conexión.
En estos casos podemos decidir desbloquear el acceso a nuestro servidor desde redes públicas y privadas. Si más adelante queremos cambiar este comportamiento, podemos buscar la regla en la lista de reglas y editarla; pero resulta más cómodo utilizar una opción de configuración del firewall donde aparece directamente la lista de programas de nuestra máquina y qué pueden hacer en cada red.