Optimizar y Depurar la Configuración de Firewalls Cisco ASA con CFWTUNE
Habiendo trabajado como consultor en Seguridad Informática varios años, muchas veces me he encontrado revisando configuraciones de firewalls de clientes que contienen increible cantidad de configuración obsoleta. Esto es generalmente debido a:
- Cambios de Topología de Red
- Merges de Configuración por Migraciones o Vuelcos
- Mala Administración de los Equipos
- Poco mantenimiento de la configuración
No me refiero a problemas de seguridad o compliance en la configuración (como reglas muy permisivas o de habilitación de servicios críticos), lo que sería un segundo problema, sino de configuración en los equipos que lo único que hace es sumar tiempo al procesamiento, o dificultar la admninistración, por estar presente pero no tener sentido, o estar mal aplicada. Un ejemplo común, es encontrar access lists mal aplicadas (en interfaces incorrectas) o access lists shadows (que ya están incluidas en alguna anterior).
En Firewalls con mucha configuración, trabajar en la depuración de estas configuraciones, es un trabajo bastante tedioso.
Por eso desarrollé una herramienta para ayudarme en esa tarea y poder automatizarla. Es para Firewalls Cisco ASA. La publiqué hace un tiempo, y si bien es fácil de utilizar, nunca había escrito una entrada sobre la misma o como utilizarla. Está desarrollada en bash.
La pueden encontrar en la sección de Herramientas, en mi Github.
La herramienta contiene 5 módulos de revisión:
-
Object-Group Subnetting:
Revisa cada uno de los object-groups de la configuración, buscando entradas "hosts", y analiza si es posible unificarlos y armar una entrada aplicando subnetting.
Por ejemplo (output real):
network-object 10.24.2.120 255.255.255.252 network-object 10.24.2.124 255.255.255.254 no network-object host 10.24.2.120 no network-object host 10.24.2.121 no network-object host 10.24.2.122 no network-object host 10.24.2.123 no network-object host 10.24.2.124 no network-object host 10.24.2.125
Mediante subnetting, se unifican 6 líneas, en 2. El output propone primero el add, y luego el remove, para que el cambio no sea disruptivo.
-
Object-Group Dummies (Unused)
Busca object-groups que estén definidos, pero no estén siendo utilizados en ninguna configuración, y propone su eliminación.
Por ejemplo (output real):
no object-group network GRP-TEST
-
ACLS Misapplied (Wrong Routing)
Busca access-lists que estén aplicadas en interfaces incorrectas, verificando previamente el ruteo de cada una y sus access-groups asociados.
Por ejemplo,
RUTEO: C 20.20.20.0 255.255.252.0 is directly connected, desarrollo OUTPUT: no access-list desarrollo extended permit tcp host 20.22.44.97 192.168.200.0 255.255.255.240 eq www no access-list desarrollo extended permit tcp host 20.22.44.97 192.168.200.0 255.255.255.240 eq 8080 no access-list desarrollo extended permit tcp host 20.22.44.97 192.168.200.0 255.255.255.240 eq https
Se propone eliminar las 3 líneas ya que esas redes no son conocidas por dicha interface.
-
ACLS Dummies (Unused)
Verifica si las ACLS están asociadas o no a un access-group. Si no lo están, propone su eliminiación.
-
ACLS Shadows (Duplicate)
Este último módulo intenta descubrir access-lists que están solapadas por alguna regla anterior que incluya el mismo origen, destino o puerto, o alguno de estos que lo incluya:
Por ejemplo (output real):
no access-list gestion extended permit tcp host 10.100.244.24 host 10.88.88.30 eq 8080 > ACL: access-list gestion extended permit tcp 10.100.244.20 255.255.255.254 host 10.88.88.30 eq 8080
En este caso, propone eliminar la línea:
no access-list gestion extended permit tcp host 10.100.244.24 host 10.88.88.30 eq 8080
Y muestra la ACL con la que se solapa, en este caso, por tener un origen que incluye la ip 10.100.244.24, con el mimsmo destino y puerto (cuando digo puerto, me refiero a puerto + protoclo):
access-list gestion extended permit tcp 10.100.244.20 255.255.255.254 host 10.88.88.30 eq 8080
Instalación:
Ya que la herramienta está codificada en bash, lo único que hay que hacer es descargarla, descargar algunas dependencias, y dar permisos de ejecución...
sudo yum -y install git dos2unix ruby ipcalc
git clone https://github.com/gabrielsoltz/cfwtune
chmod a+x cfwtune/cfwtune.sh cfwtune/deps/range2cidr.ry
Uso:
La herramienta no se conecta a los firewalls, sino que se debe obtener de ellos previamente:
show running-config
show route
De cada uno de los comandos anteriores, se debe generar un archivo de texto individual.
Luego se debe ejecutar:
./cfwtune.sh <shroute> <shrun>
La herramienta generará la configuración lista para impactar en el firewall y además un detalle de la cantidad de líneas de configuración que se eliminarán por cada módulo.
En algunos clientes con configuraciones que superaban las 5000 reglas, he podido eliminar cerca del 10% de configuración por ser obsoleta, optimizando el procesamiento del equipo y mejorando la administración del mismo.
Sin embargo, la herramienta es simple, pero no perfecta, muchísimas cosas se pueden mejorar o agregar, y no recomiendo aplicar la configuración sin antes revisarla un poco. Esto pretende ser un punto de partida para este tipo de trabajos, y no un reemplazo del consultor, sino un complemento.
Se aceptan mejoras.
Saludos Colegas !
@Gabriel Soltz