Actualmente, lo habitual en una organización es disponer de un firewall/cluster y mediante el uso de vlans, ir creando nuevos segmentos dependiendo del crecimiento de la red, lógicamente siempre que el sistema a nivel de procesamiento no se vea afectado. No obstante, puede darse el caso de empresas que den servicio a múltiples clientes con el mismo firewall, de forma que se quiera diferenciar cada cliente de forma unívoca. Para ello, cada vez más aparecen en el mercado soluciones de firewalls virtuales y como casi siempre, el uso de una funcionalidad lleva asociada la licencia correspondiente.
Para este post, vamos a crear un firewall virtual en un dispositivo Cisco ASA 5550, no obstante, fabricantes como Fortinet disponen de soluciones similares.
Centrándonos en nuestro sistema, podemos crear múltiples firewalls virtuales llamados contextos, donde cada contexto es independiente del resto, y dispone de su propia política de seguridad, interfaces, usuarios o rutas, aunque hay otras funcionalidades que no vienen soportadas, como VPN o protocolos de enrutamiento dinámico (parece que en versiones actuales mejoran considerablemente estas limitaciones), no obstante, para nuestro caso, será suficiente.
Existen tres tipos de contexto:
- system: el contexto raíz donde el administrador gestiona el resto de contextos del sistema, interfaces, recursos, etc.
- admin: igual que cualquier otro contexto pero donde el administrador tiene permisos para acceder a otros contextos.
- normal: una partición del firewall donde sólo se puede acceder a la información del propio contexto.
En nuestro ejemplo, partimos de un firewall sin configuración previa, si no lo fuera, deberíamos realizar una copia de seguridad previa. Una vez conectados al sistema, debemos asegurarnos de cuantos firewalls virtuales podemos crear con la licencia disponible:
ciscoasa# show version Licensed features for this platform: Maximum Physical Interfaces : Unlimited Maximum VLANs : 250 Inside Hosts : Unlimited Failover : Active/Active VPN-DES : Enabled VPN-3DES-AES : Enabled Security Contexts : 5 GTP/GPRS : Disabled VPN Peers : 5000 WebVPN Peers : 2 Advanced Endpoint Assessment : Disabled
En éste caso, podríamos tener 5 contextos. Aclarado esto, procedemos con la configuración:
1. Configurar el sistema en modo múltiple:
ciscoasa# show mode Security context mode: single ciscoasa(config)# mode multiple WARNING: This command will change the behavior of the device WARNING: This command will initiate a Reboot Proceed with change mode? [confirm] Convert the system configuration? [confirm]
Tras reiniciar, podemos comprobar que el sistema ya aparece configurado en modo múltiple y dispone de configuración específica para el contexto admin:
ciscoasa# show mode Security context mode: multiple ciscoasa# show run …... class default limit-resource All 0 limit-resource ASDM 5 limit-resource SSH 5 limit-resource Telnet 5 admin-context admin context admin config-url disk0:/admin.cfg
2. Crear interfaces virtuales y asociarles identificador de vlan. Ya que vamos a usar vlans para confgurar contextos, necesitamos definir trunks en los switches
ciscoasa(config)# mac-address auto ciscoasa(config)# interface GigabitEthernet0/1.1 ciscoasa(config-subif)# vlan 100 ciscoasa(config-subif)# no shutdown ciscoasa(config-subif)# interface GigabitEthernet0/2.1 ciscoasa(config-subif)# no shutdown ciscoasa(config-subif)# vlan 200 ciscoasa(config-subif)# interface GigabitEthernet0/3.1 ciscoasa(config-subif)# no shutdown ciscoasa(config-subif)# vlan 300
3. Definir los contextos (el contexto admin ya existe):
ciscoasa(config)# context Cliente1 Creating context 'Cliente1'... Done. (2) ciscoasa(config-ctx)# description Contexto1
4. Asignar visibilidad sobre las interfaces a cada contexto e indicar el fichero de configuración del mismo:
ciscoasa(config-ctx)# allocate-interface GigabitEthernet0/1.1 inside ciscoasa(config-ctx)# allocate-interface GigabitEthernet0/2.1 outside ciscoasa(config-ctx)# allocate-interface GigabitEthernet0/3.1 dmz ciscoasa(config-ctx)# config-url disk0:/cliente1.cfg
Una vez configurados los contextos, podemos cambiar a un contexto específico y configurarlo como si de un único firewall se tratara. Una vez nos situamos en el contexto, vemos que el prompt cambia:
ciscoasa# changeto context Cliente1 ciscoasa/Cliente1# show running-config ... interface inside no nameif no security-level no ip address ! interface outside no nameif no security-level no ip address ! interface dmz no nameif no security-level no ip address
En este punto, podemos volver al contexto system para crear un nuevo contexto:
ciscoasa/Cliente1(config)# changeto system ciscoasa(config)# context Cliente2 Creating context 'Cliente2'... Done. (3) ciscoasa(config-ctx)# description Contexto2 ciscoasa(config-ctx)# allocate-interface GigabitEthernet0/1.2 inside ciscoasa(config-ctx)# allocate-interface GigabitEthernet0/2.2 outside ciscoasa(config-ctx)# allocate-interface GigabitEthernet0/3.2 dmz config-url disk0:/cliente2.cfg
Una vez creado (no tiene asignadas vlans todavía), podemos ver los contextos definidos en el sistema:
ciscoasa(config)# show context Context Name Class Interfaces URL *admin default disk0:/admin.cfg Cliente1 default GigabitEthernet0/1.1, disk0:/cliente1.cfg GigabitEthernet0/2.1, GigabitEthernet0/3.1 Cliente2 default GigabitEthernet0/1.2, disk0:/cliente2.cfg GigabitEthernet0/2.2, GigabitEthernet0/3.2 Total active Security Contexts: 3
Antes de entrar a configurar nuestro contexto, si nos fijamos en la salida del comando anterior, vemos que aparece una class definida por defecto. Esta opción es útil si queremos limitar los recursos de nuestros contextos, ya sea para evitar la saturación del sistema, o por que dispongamos de contratos gold/silver y en cada uno de ellos, limitemos los recursos contratados.
Tras esto, volvemos a configurar nuestro contexto de forma independiente:
ciscoasa# changeto context Cliente1 ciscoasa/Cliente1(config)# hostname ASA1 ciscoasa/Cliente1(config)# domain-name cliente1.com ciscoasa/Cliente1(config)# username admin password admin privilege 15 ciscoasa/Cliente1(config)# interface inside ciscoasa/Cliente1(config-if)# nameif inside ciscoasa/Cliente1(config-if)# security-level 100 ciscoasa/Cliente1(config-if)# ip address 172.18.0.200 255.255.255.0 ciscoasa/Cliente1(config-if)# no shutdown ciscoasa/Cliente1(config)# http server enable ciscoasa/Cliente1(config)# crypto key generate rsa ciscoasa/Cliente1(config)# show crypto key mypubkey rsa Key pair was generated at: 06:14:35 UTC Dec 17 2013 Key name:Usage: General Purpose Key Modulus Size (bits): 1024 Key Data: 30819f30 0d06092a 864886f7 0d010101 05000381 8d003081 89028181 00d81874 dcca041b fbb5752c 5f5562f1 95422b42 e825e7b4 0b7b0aee 5cd90c04 e3302ddc d9ee6c98 8664e8cd 2a3ad611 aa6b9d35 09cc81f3 48eccbe3 129d5483 17170a54 b1bef1ca b351ede5 86e3b26b 8f8619f9 b5d928c7 3b391861 8a1c72de 449e0fbc b2acddee 3deaa0ff db55df25 4ba26f7b 6446972c e05e1839 52a09bad 45020301 0001 ciscoasa/Cliente1(config)# http 172.18.0.150 255.255.255.255 inside ciscoasa/Cliente1(config)# ssh 172.18.0.150 255.255.255.255 inside ciscoasa/Cliente1(config)# wr mem
En este punto, ya podríamos acceder de forma remota al dispositivo y gestionarlo de forma independiente.
Desde el contexto admin, podemos ver la configuración de los contextos con el comando show running-config all context [name] y los recursos consumidos con show resource usage context [name]:
ciscoasa(config)# show resource usage context Cliente1 Resource Current Peak Limit Denied Context ASDM 1 1 5 0 Cliente1 Conns 2 9 unlimited 0 Cliente1 Hosts 2 2 unlimited 0 Cliente1 Conns [rate] 1 11 unlimited 0 Cliente1
También podemos guardar todos los cambios de los contextos:
ciscoasa(config)# wr mem all Building configuration... Saving context : system : (000/003 Contexts saved) Cryptochecksum: 1eb2b9ed bf4f0170 628827cb cda1116d 1612 bytes copied in 3.300 secs (537 bytes/sec) Saving context : admin : (001/003 Contexts saved) Cryptochecksum: d367f98b 4f1280c6 2a3275f4 5e0df5eb 1313 bytes copied in 0.200 secs Saving context : Cliente1 : (002/003 Contexts saved) Cryptochecksum: fc0590ec a8514229 3d126e92 4052d174 1572 bytes copied in 0.210 secs Saving context : Cliente2 : (003/003 Contexts saved) Cryptochecksum: 81553ccc ebd17807 b63b1f4b ee30b125 1432 bytes copied in 0.200 secs [OK]
Finalmente, podemos borrar contextos o volver a dejar el sistema en modo single:
ciscoasa(config)# no context Cliente2 WARNING: Removing context 'Cliente2' Proceed with removing the context? [confirm] Removing context 'Cliente2' (3)... Done ciscoasa(config)# show context Context Name Class Interfaces URL *admin default disk0:/admin.cfg Cliente1 default GigabitEthernet0/1.1, disk0:/cliente1.cfg GigabitEthernet0/2.1, GigabitEthernet0/3.1 Total active Security Contexts: 2
Para restaurar el sistema, debemos recuperar la copia de seguridad previa si disponemos de ella, en otro caso, perderemos los cambios iniciales:
ciscoasa(config)# mode single WARNING: This command will change the behavior of the device WARNING: This command will initiate a Reboot Proceed with change mode? [confirm] Security context mode: single
Tras reiniciar, podremos borrar los ficheros generados anteriormente
ciscoasa# delete disk0:/cliente1.cfg Delete filename [cliente1.cfg]? Delete disk0:/cliente1.cfg? [confirm] ciscoasa# delete disk0:/cliente2.cfg Delete filename [cliente2.cfg]? Delete disk0:/cliente2.cfg? [confirm] ciscoasa# delete disk0:/admin.cfg Delete filename [admin.cfg]? Delete disk0:/admin.cfg? [confirm]
De esta forma, y salvado las limitaciones existentes, podríamos disponer de mútiples firewalls independientes para dar soporte a distintos clientes en una única plataforma.
Gracias por l aporte estoy dándole al CCNA Securty que me lo saque este viernes 13 de 2013 ;-)))) y me viene de perlas esta explicación ..
s3movil gracias por tu comentario .
He visto que el temario del CCNA Security ha cambiado algo desde que yo lo hice. Antes no se daba ASA, solo filtrado en routers con IOS de seguridad y los distintos tipos de ACL/CBACs.