Un Cisco ASA (Adaptive Security Appliances) integra un firewall, IPS y concentrador VPN.

En este post mostraré como configurar lo básico de los Cisco Asa para tener conectividad entre la LAN y otras redes, además de realizar pruebas de conectividad.

Lo que se hará es lo siguiente:

  • Configurar direccionamiento IP
  • Configurar los nameif y los security level en las interfaces del ASA
  • Habilitar la inspección de ICMP

Para este laboratorio, se utilizará la siguiente topología:

Lo primero a realizar, es la configuración de los routers:

R1:

R1(config)#interface g0/0
R1(config-if)#ip add 192.168.10.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#
*Apr 21 02:39:32.874: %LINK-3-UPDOWN: Interface GigabitEthernet0/0, changed state to up
*Apr 21 02:39:33.875: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/0, changed state to up
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 192.168.10.2 

R2:

R2(config)#interface g0/1
R2(config-if)#ip add 192.168.20.1 255.255.255.0
R2(config-if)#no sh
R2(config-if)#
*Apr 21 02:41:13.541: %LINK-3-UPDOWN: Interface GigabitEthernet0/1, changed state to up
*Apr 21 02:41:14.541: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to up
R2(config-if)#exit
R2(config)#ip route 0.0.0.0 0.0.0.0 192.168.20.2 

Con respecto a los ASA, la configuración de estos es similar al de los routers, pero en las interfaces es necesario configurar los nameif y los security level.

El security level indica que tan confiable es dicha interfaz, donde puede tomar un valor entre 0 y 100. Una interfaz con un security level de 100 indica que es una red muy confiable (segura), utilizada por lo general en las interfaces que dan hacia la LAN, mientras que una interfaz con security level 0, indica que la red que conecta a esa interfaz no es segura, y se configura en interfaces que conectan a la WAN o Internet.

El comando nameif asigna un nombre a la interfaz, con la finalidad de tener una descripción del tráfico que pasa a través de esta. Por defecto, si se usa el nombre inside, se asigna automáticamente el security level 100, mientras que cualquier otro nombre configura la interfaz con un security level de 0.

Junto con esto, por defecto no se permite el tráfico entre interfaces con igual security level, solo entre interfaces con distinto nivel, pero de uno mayor a uno menor, pero no de menor a mayor.

Como el Cisco ASA es un stateful firewall, este crea una sesión en la comunicación que pasa a través de este, permitiendo la respuesta del tráfico desde un security level menor a uno mayor.

En caso de que se necesite permitir el tráfico entre interfaces con el mismo nivel, usar el comando de configuración global same-security-traffic permit inter-interface.

La configuración del ASA es la siguiente:

ASA(config)# interface g0/0
ASA(config-if)# nameif inside
INFO: Security level for "inside" set to 100 by default.
ASA(config-if)# ip add 192.168.10.2 255.255.255.0
ASA(config-if)# no sh
ASA(config-if)# interface g0/1
ASA(config-if)# nameif outside
INFO: Security level for "outside" set to 0 by default.
ASA(config-if)# ip add 192.168.20.2 255.255.255.0
ASA(config-if)# no sh
ASA(config-if)# sh run interface g0/0
!
interface GigabitEthernet0/0
 nameif inside
 security-level 100
 ip address 192.168.10.2 255.255.255.0 
ASA(config-if)# sh run interface g0/1
!
interface GigabitEthernet0/1
 nameif outside
 security-level 0
 ip address 192.168.20.2 255.255.255.0

Como pueden ver, la configuración del security policy se realiza automáticamente, pero si es necesario configurarlo manual, el comando es security-policy <number>.

Una de las ventajas que tiene el software del ASA en comparación de IOS, es que no se necesita utilizar el comando do para hacer un show en un modo de configuración distinto al privilegiado.

Para comprobar el estado de las interfaces, usar los siguientes comandos:

ASA# show ip
System IP Addresses:
Interface                Name                   IP address      Subnet mask     Method 
GigabitEthernet0/0       inside                 192.168.10.2    255.255.255.0   manual
GigabitEthernet0/1       outside                192.168.20.2    255.255.255.0   manual
Current IP Addresses:
Interface                Name                   IP address      Subnet mask     Method 
GigabitEthernet0/0       inside                 192.168.10.2    255.255.255.0   manual
GigabitEthernet0/1       outside                192.168.20.2    255.255.255.0   manual
ASA# show interface ip brief
Interface                  IP-Address      OK? Method Status                Protocol
GigabitEthernet0/0         192.168.10.2    YES manual up                    up  
GigabitEthernet0/1         192.168.20.2    YES manual up                    up  
GigabitEthernet0/2         unassigned      YES unset  administratively down up  
GigabitEthernet0/3         unassigned      YES unset  administratively down up  
GigabitEthernet0/4         unassigned      YES unset  administratively down up  
GigabitEthernet0/5         unassigned      YES unset  administratively down up  
GigabitEthernet0/6         unassigned      YES unset  administratively down up  
Management0/0              unassigned      YES unset  administratively down up  
ASA# show interface g0/0    
Interface GigabitEthernet0/0 "inside", is up, line protocol is up
  Hardware is i82540EM rev03, BW 1000 Mbps, DLY 10 usec
        Auto-Duplex(Full-duplex), Auto-Speed(1000 Mbps)
        Input flow control is unsupported, output flow control is off
        MAC address 5000.0001.0001, MTU 1500
        IP address 192.168.10.2, subnet mask 255.255.255.0
        50 packets input, 0 bytes, 0 no buffer
        Received 0 broadcasts, 0 runts, 0 giants
        0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
        0 pause input, 0 resume input
        0 L2 decode drops
        16 packets output, 0 bytes, 0 underruns
        0 pause output, 0 resume output
        0 output errors, 0 collisions, 1 interface resets
        0 late collisions, 0 deferred
        20 input reset drops, 0 output reset drops
        input queue (blocks free curr/low): hardware (481/481)
        output queue (blocks free curr/low): hardware (511/510)
  Traffic Statistics for "inside":
        30 packets input, 2946 bytes
        16 packets output, 1456 bytes
        5 packets dropped
      1 minute input rate 0 pkts/sec,  0 bytes/sec
      1 minute output rate 0 pkts/sec,  0 bytes/sec
      1 minute drop rate, 0 pkts/sec
      5 minute input rate 0 pkts/sec,  0 bytes/sec
      5 minute output rate 0 pkts/sec,  0 bytes/sec
      5 minute drop rate, 0 pkts/sec
ASA# show interface g0/1
Interface GigabitEthernet0/1 "outside", is up, line protocol is up
  Hardware is i82540EM rev03, BW 1000 Mbps, DLY 10 usec
        Auto-Duplex(Full-duplex), Auto-Speed(1000 Mbps)
        Input flow control is unsupported, output flow control is off
        MAC address 5000.0001.0002, MTU 1500
        IP address 192.168.20.2, subnet mask 255.255.255.0
        56 packets input, 0 bytes, 0 no buffer
        Received 0 broadcasts, 0 runts, 0 giants
        0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
        0 pause input, 0 resume input
        0 L2 decode drops
        26 packets output, 0 bytes, 0 underruns
        0 pause output, 0 resume output
        0 output errors, 0 collisions, 1 interface resets
        0 late collisions, 0 deferred
        20 input reset drops, 0 output reset drops
        input queue (blocks free curr/low): hardware (475/475)
        output queue (blocks free curr/low): hardware (511/510)
  Traffic Statistics for "outside":
        36 packets input, 3546 bytes
        26 packets output, 2456 bytes
        21 packets dropped
      1 minute input rate 0 pkts/sec,  0 bytes/sec
      1 minute output rate 0 pkts/sec,  0 bytes/sec
      1 minute drop rate, 0 pkts/sec
      5 minute input rate 0 pkts/sec,  0 bytes/sec
      5 minute output rate 0 pkts/sec,  0 bytes/sec
      5 minute drop rate, 0 pkts/sec

Realizamos pruebas de conectividad local en el segmento:

----# R1 #----

R1#ping 192.168.10.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 2/2/3 ms

----# R2 #----

R2#ping 192.168.20.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 2/2/4 ms

Y ahora pruebas de conectividad entre la red de la interfaz inside hacia la red de la interfaz outside:

R1#ping 192.168.20.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

Según la teoría, la comunicación entre una zona con un security level mayor a uno menor no debería tener problemas, pero por defecto, el ASA no deja pasar el ping, porque este no puede inspeccionar el tráfico icmp. Esto lo podemos comprobar viendo los log del equipo.

NOTA: no se recomienda habilitar el logging en nivel 7, porque el nivel debug puede causar un deterioro del performance del equipo.

ASA# %ASA-7-609001: Built local-host inside:192.168.10.1
%ASA-7-609001: Built local-host outside:192.168.20.1
%ASA-6-302020: Built outbound ICMP connection for faddr 192.168.20.1/0 gaddr 192.168.10.1/3 laddr 192.168.10.1/3
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 0, code 0)
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 0, code 0)
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 0, code 0)
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 0, code 0)
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 0, code 0)
%ASA-6-302021: Teardown ICMP connection for faddr 192.168.20.1/0 gaddr 192.168.10.1/3 laddr 192.168.10.1/3
%ASA-7-609002: Teardown local-host inside:192.168.10.1 duration 0:00:10
%ASA-7-609002: Teardown local-host outside:192.168.20.1 duration 0:00:10

Para permitir el tráfico icmp, es necesario agregar un policy-map para realizar la inspección de este, o modificar el policy-map global_policy:

ASA(config)# sh run policy-map global_policy
!
policy-map global_policy
 class inspection_default
  inspect dns migrated_dns_map_1 
  inspect ftp 
  inspect h323 h225 
  inspect h323 ras 
  inspect ip-options 
  inspect netbios 
  inspect rsh 
  inspect rtsp 
  inspect skinny  
  inspect esmtp 
  inspect sqlnet 
  inspect sunrpc 
  inspect tftp 
  inspect sip  
  inspect xdmcp 
!
ASA(config)# policy-map global_policy
ASA(config-pmap)# class inspection_default
ASA(config-pmap-c)# inspect icmp

Si ahora realizamos la prueba de conectividad otra vez, veremos que tenemos ping desde R1 a R2:

----# R1 #----

R1#ping 192.168.20.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 3/4/7 ms

----# ASA #----

ASA(config)# %ASA-7-609001: Built local-host inside:192.168.10.1
%ASA-7-609001: Built local-host outside:192.168.20.1
%ASA-6-302020: Built outbound ICMP connection for faddr 192.168.20.1/0 gaddr 192.168.10.1/5 laddr 192.168.10.1/5
%ASA-6-302021: Teardown ICMP connection for faddr 192.168.20.1/0 gaddr 192.168.10.1/5 laddr 192.168.10.1/5
%ASA-7-609002: Teardown local-host inside:192.168.10.1 duration 0:00:00
%ASA-7-609002: Teardown local-host outside:192.168.20.1 duration 0:00:00

Y si haces la prueba desde R2 a R1, veremos que el tráfico es denegado:

----# R2 #----

R2#ping 192.168.10.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.1, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

----# ASA #----

ASA(config)# %ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 8, code 0)
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 8, code 0)
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 8, code 0)
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 8, code 0)
%ASA-3-106014: Deny inbound icmp src outside:192.168.20.1 dst inside:192.168.10.1 (type 8, code 0)

Para validar las sesiones de tráfico que pasan a través del firewall, usar el comando show local-host all y show conn:

ASA# show local-host all 

Interface outside: 1 active, 1 maximum active, 0 denied
local host: <192.168.20.1>,
    SCTP flow count/limit = 0/unlimited
    TCP flow count/limit = 0/unlimited
    TCP embryonic count to host = 0
    TCP intercept watermark = unlimited
    UDP flow count/limit = 0/unlimited

  Conn:
    ICMP outside 192.168.20.1:0 inside  192.168.10.1:6, idle 0:00:00, bytes 39744, flags  
Interface inside: 1 active, 1 maximum active, 0 denied
local host: <192.168.10.1>,
    SCTP flow count/limit = 0/unlimited
    TCP flow count/limit = 0/unlimited
    TCP embryonic count to host = 0
    TCP intercept watermark = unlimited
    UDP flow count/limit = 0/unlimited

  Conn:
    ICMP outside 192.168.20.1:0 inside  192.168.10.1:6, idle 0:00:00, bytes 39744, flags  
Interface any: 0 active, 0 maximum active, 0 denied
Interface identity: 0 active, 1 maximum active, 0 denied
ASA# sho conn 
0 in use, 1 most used

ASA# sho conn 
1 in use, 1 most used

ICMP outside 192.168.20.1:0 inside  192.168.10.1:7, idle 0:00:00, bytes 21960, flags