martes, julio 04, 2017

Recuperación de un punto de acceso inalámbrico (AP) Cisco con la flash borrada y sin imagen de arranque

Hay ocasiones en que, por diferentes circunstancias, debemos configurar de cero un punto de acceso inalámbrico (AP de ahora en adelante) de Cisco al que se le ha eliminado la imagen de arranque. Quizás se haya corrompido, quizás la hayamos borrado sin habernos acordado de cargar otra imagen antes de reiniciar el AP, puede que se haya cortado la alimentación mientras estábamos subiendo la nueva imagen... No importa cómo haya ocurrido, el resultado es que tendremos un AP que arrancará, si nos conectamos por consola para ver el arranque, con la temible frase "The system is unable to boot automatically because there are no bootable files to boot." y a continuación mostrará un triste prompt:

ap:

Y nada más. En este modo tenemos una serie de comandos limitados para poder reconfigurar el AP desde cero y cargar una imagen mediante TFTP. Veamos cómo.

Para empezar, los AP de Cisco pueden funcionar  en dos modalidades:

  • Modo ligero: el AP tiene cargada una imagen ligera que se limita a ponerlo en contacto con una controladora wireless donde reside la inteligencia, y que pasa los parámetros al AP sobre cómo debe configurar sus radios en lo relativo a canales, potencia... En este modo la gestión del AP es muy limitada y la configuración se realiza a través de la controladora. Es un modo pensado para el despliegue de muchos APs en una misma sede y cuya gestión y configuración manual y por separado sería inmanejable.
  • Modo autónomo: el AP carga una imagen autónoma tras cuyo arranque podemos gestionarlo total y completamente. Corre de nuestra cuenta configurar el SSID, los canales de emisión, la potencia y el resto de parámetros. Es el modo adecuado si tenemos que desplegar tan solo uno o unos pocos APs.

La única diferencia entre ambos modos a nivel de arranque es el tipo de imagen que utilizan y que tendremos que descargar de la web de Cisco según necesitemos. En cuanto a recuperación a partir de cero es indistinto que utilicemos una imagen ligera o una imagen autónoma.

Los comandos del boot loader

 El boot loader es el punto donde nos quedamos cuando el AP no encuentra una imagen con la que arrancar, el prompt "ap:" del que hablábamos antes. El boot loader dispone de una serie de comandos que nos permitirán recuperar el AP y que podemos ver introduciendo el símbolo ?:

ap: ?
           ? -- Present list of available commands
         arp -- Show arp table or arp-resolve an address
        boot -- Load and boot an executable image
         cat -- Concatenate (type) file(s)
 clear_ether -- clear ethernet port statistics
        copy -- Copy a file
      delete -- Delete file(s)
         dir -- List files in directories
dump_save_regs -- dump saved regs in OCM
       etest -- test emac driver code
  ether_init -- initialize ethernet port
  flash_init -- Initialize flash filesystem(s)
      format -- Format a filesystem
        fsck -- Check filesystem consistency
        help -- Present list of available commands
    init_pci -- initialize pci bridge
    led_test -- cycle led patterns
      memory -- Present memory heap utilization information
       mkdir -- Create dir(s)
        more -- Concatenate (display) file(s)
      rename -- Rename a file
       reset -- Reset the system
  reset_gpio -- reset gpio
       rmdir -- Delete empty dir(s)
         set -- Set or display environment variables
    set_baud -- set baud rates
    set_gpio -- set gpio
   set_sleep -- Pause (sleep) for a specified number of seconds
  show_ether -- show ethernet port statistics
    show_pci -- show pci setting
switch status -- report push button switch status
         tar -- extract or listing a tar file
    test ram -- read at address
   tftp_init -- Initialize tftp file system
        type -- Concatenate (type) file(s)
       unset -- Unset one or more environment variables
     version -- Display boot loader version


Recuperando la imagen

 Para volver a cargar una imagen válida en nuestro AP vamos a necesitar:

  • Conexión por consola al AP (vía PuTTY, TeraTerm o nuestra aplicación de consola favorita) y conexión por cable ethernet entre el AP y un PC (o un switch al que vayan conectados AP y PC).
  • Un servidor TFTP (tftp32 sirve perfectamente) corriendo en el PC con la imagen que vayamos a cargar en el AP.
  • Configurar los parámetros adecuados en el AP y a continuación cargarle la imagen.

Un AP Cisco 1131.
Como ejemplo usaremos la recuperación de un AP Cisco modelo 1131.

El AP arranca con una serie de parámetros por defecto que podemos ver con el comando set:

ap: set
 

?=
DEFAULT_ROUTER=10.0.0.1
ENABLE_BREAK=no
IP_ADDR=10.0.0.1
MANUAL_BOOT=no
NETMASK=255.255.255.224
RELOAD_REASON=36
TERMLINES=0


Los parámetros que nos interesan son DEFAULT_ROUTER (la puerta de enlace), IP_ADDR (la IP de la interfaz ethernet del AP) y NETMASK (la máscara de red). Tenemos dos opciones:

  • O configuramos el PC al que vaya conectado el AP con una IP entre 10.0.0.2 y 10.0.0.30 (fijaos en la IP y máscara que ya tiene el AP por defecto) para que ambos puedan verse.
  • O, más comodamente, configuramos el AP con una IP, una máscara y un puerto de enlace en el rango de nuestra red para poder acceder al TFTP sin problemas.

En nuestro caso elegimos la segunda opción. El AP está conectado a la LAN donde reside el PC con el TFTP corriendo; la red en nuestro caso es 192.168.1.0/24 (y por tanto máscara 255.255.255.0) y puerta de enlace 192.168.1.1. Asignaremos al AP la IP 192.168.1.220 y de paso inicializaremos la interfaz ethernet por si durante el arranque no se hubiese inicializado correctamente.. Los comandos para configurar los valores adecuados en el AP son los siguientes:

ap: set IP_ADDR 192.168.1.220

ap: set NETMASK 255.255.255.0

ap: set DEFAULT_ROUTER 192.168.1.1

ap: ether_init

Initializing ethernet port 0...
Reset ethernet port 0...
Reset done!
ethernet link up, 100 mbps, full-duplex
Ethernet port 0 initialized: link is up


Verificamos que ahora los valores son los que queremos:

ap: set

?=
DEFAULT_ROUTER=192.168.1.1
ENABLE_BREAK=no
IP_ADDR=192.168.1.220
MANUAL_BOOT=no
NETMASK=255.255.255.0
RELOAD_REASON=36
TERMLINES=0


Todo está correcto, pero hay una peculiaridad: si desde nuestra red hacemos ping a la IP del AP no obtendremos respuesta. Esto se encuentra dentro del comportamiento normal del AP en este momento.

Ahora toca inicializar el sistema de ficheros tftp en el AP:

ap: tftp_init

tftp_init success: You can now use tftp file system!


Ya podemos intentar la transferencia de la imagen del TFTP del PC a nuestro AP. En nuestro caso usaremos una imagen autónoma con nombre "c1130-k9w7-tar.124-25d.JA.tar". El comando para cargarlo tiene la siguiente forma:

ap: tar <-table | -xtract> <tar file> <destination>

Lo que queremos es extraer la imagen, que está en formato tar, en la flash del AP, por lo que el comando final será, suponiendo que el PC donde está corriendo el TFTP tiene IP 192.168.1.10:

ap: tar -xtract tftp://192.168.1.10/c1130-k9w7-tar.124-25d.JA.tar flash:

En seguida vemos el resultado:

extracting info (283 bytes)
c1130-k9w7-mx.124-25d.JA/ (directory) 0 (bytes)
c1130-k9w7-mx.124-25d.JA/html/ (directory) 0 (bytes)
c1130-k9w7-mx.124-25d.JA/html/level/ (directory) 0 (bytes)
c1130-k9w7-mx.124-25d.JA/html/level/1/ (directory) 0 (bytes)
extracting c1130-k9w7-mx.124-25d.JA/html/level/1/appsui.js (557 bytes)
extracting c1130-k9w7-mx.124-25d.JA/html/level/1/back.shtml (506 bytes)
extracting c1130-k9w7-mx.124-25d.JA/html/level/1/cookies.js (5026 bytes).
extracting c1130-k9w7-mx.124-25d.JA/html/level/1/forms.js (17486 bytes)...
extracting c1130-k9w7-mx.124-25d.JA/html/level/1/sitewide.js (16548 bytes)...

.
.
.
extracting c1130-k9w7-mx.124-25d.JA/7101.img (131328 bytes)............................
extracting c1130-k9w7-mx.124-25d.JA/6701.img (131328 bytes)............................
extracting c1130-k9w7-mx.124-25d.JA/info (283 bytes)
extracting info.ver (283 bytes)


La extracción llevará un rato y podemos ir siguiéndola por la consola. Al final volveremos al prompt ap:. Ya solo queda arrancar el AP con el comando boot:

ap: boot

Loading "flash:/c1130-k9w7-mx.124-25d.JA/c1130-k9w7-mx.124-25d.JA"...#####################################...

File "flash:/c1130-k9w7-mx.124-25d.JA/c1130-k9w7-mx.124-25d.JA" uncompressed and installed, entry point: 0x3000
executing...

.
.
.
Proceeding with system init

Proceeding to unmask interrupts
Initializing flashfs...

.
.
.
Press RETURN to get started!
.
.
.
*Mar  1 00:00:20.094: AUTOINSTALL: FastEthernet0 is assigned 192.168.1.69
*Mar  1 00:00:59.196: %LINK-5-CHANGED: Interface Dot11Radio1, changed state to administratively down
*Mar  1 00:00:59.196: %LINK-5-CHANGED: Interface Dot11Radio0, changed state to administratively down
*Mar  1 00:00:59.196: %CDP_PD-4-POWER_OK: Full power - AC_ADAPTOR inline power source
*Mar  1 00:01:00.196: %LINEPROTO-5-UPDOWN: Line protocol on Interface Dot11Radio1, changed state to down
*Mar  1 00:01:00.196: %LINEPROTO-5-UPDOWN: Line protocol on Interface Dot11Radio0, changed state to down
*Mar  1 00:01:04.759: %SYS-5-RESTART: System restarted --
Cisco IOS Software, C1130 Software (C1130-K9W7-M), Version 12.4(25d)JA, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by Cisco Systems, Inc.
Compiled Thu 09-Dec-10 15:08 by prod_rel_team
*Mar  1 00:01:04.759: %SNMP-5-COLDSTART: SNMP agent on host ap is undergoing a cold start
*Mar  1 00:01:05.714: %LINEPROTO-5-UPDOWN: Line protocol on Interface BVI1, changed state to up
*Mar  1 00:01:13.854: %DHCP-6-ADDRESS_ASSIGN: Interface BVI1 assigned DHCP address 192.168.1.69, mask 255.255.255.0, hostname ap

ap>


Vemos que el AP ha arrancado correctamente y que además ha adquirido una IP por DHCP, con lo que damos por finalizado el proceso de recuperación.

miércoles, junio 28, 2017

Configurando Cisco NetFlow y usándolo con ntop

NetFlow es una característica del sistema operativo IOS bajo el que funcionan los routers de Cisco que permite la recolección de toda una serie de características relativas al tráfico IP que pasa por el router donde lo hayamos configurado. Nos permite hacer toda una estadística de uso de la red según protocolos, destinos, puertos y muchos otros parámetros que, usada correctamente, nos permitirán optimizar y securizar la red que estemos analizando.

La unidad básica de NetFlow es el flujo (flow), que consiste sencillamente en una corriente unidireccional de paquetes que van de una fuente a un destino y que comparten ciertos campos como IP destino, IP fuente, número de puerto fuente y destino, el protocolo de capa 3 que utilizan... Una arquitectura típica de monitorización de NetFlow consta de un exportador de NetFlow (el router), un colector de NetFlow (el servidor al que se envían los datos de los flujos) y un software de análisis para procesar y presentar los datos. Una aplicación popular y gratuita para recolección y análisis sencillos de flujos es ntop, que funciona como recolector de flujos entre otras muchas cosas. Se puede descargar para varios sistemas operativos en Get Started.

Veamos un ejemplo de configuración de NetFlow en un router Cisco para prepararlo para el envío de flujos a un servidor y la posterior configuración de ntop en sí para analizar el tráfico recibido.

Configurando NetFlow


Los comandos se aplican por interfaz para decidir si se van a transmitir flujos entrantes, salientes o ambos, y en modo global para indicar a qué IP se van a enviar, a qué puerto UDP (en el que va a estar escuchando el servidor al que enviemos los flujos) y la versión de NetFlow con la que queremos transmitir la información.

En nuestro ejemplo el receptor de NetFlow será el servidor con IP 192.168.1.33 y el puerto UDP al que enviar el tráfico será 2055, usado por defecto por ntop para escuchar NetFlow. Usaremos la versión 9. Aunque es obvio, no sobra recordar que desde el router debemos poder llegar al servidor a nivel de red. Los comandos serían los siguientes:

R3#conf t
 

Enter configuration commands, one per line.  End with CNTL/Z.

R3(config)#interface fastEthernet 1/0
R3(config-if)#ip flow ingress
R3(config-if)#ip flow egress
R3(config-if)#exit
 

R3(config)#ip flow-export destination 192.168.1.33 2055
R3(config)#ip flow-export version 9


Con estos comandos elegimos enviar flujos de entrada y salida hacia 192.168.1.33, puero 2055, mediante la interfaz fastEthernet 1/0 (que tiene la IP 192.168.80.129) y usando la versión 9 de NetFlow.

Podemos verificar la configuración y algunos parámetros más, como flujos enviados hasta el momento, con el comando "show ip flow export":

R3#show ip flow export
Flow export v9 is enabled for main cache
  Export source and destination details :
  VRF ID : Default
    Destination(1)  192.168.1.33 (2055)
  Version 9 flow records
  22 flows exported in 8 udp datagrams
  0 flows failed due to lack of export packet
  0 export packets were sent up to process level
  0 export packets were dropped due to no fib
  0 export packets were dropped due to adjacency issues
  0 export packets were dropped due to fragmentation failures
  0 export packets were dropped due to encapsulation fixup failures


Configurando ntop


Tras instalar y poner en marcha ntop podemos acceder a la interfaz de gestión abriendo en un navegador la IP de loopback contra el puerto 3000: http://127.0.0.1:3000

Aunque la configuración de ntop se sale de este artículo, la versión que hemos probado e instalado es la 3.0.170606 sobre Windows 10 x64. Para arrancar ntop es necesario arrancar primero el servidor Redis (redis-server.exe):

cd C:\Program Files\Redis

C:\Program Files\Redis>redis-server
[6236] 28 Jun 02:35:09 # Warning: no config file specified, using the default config. In order to specify a config file use 'redis-server /path/to/redis.conf'
[6236] 28 Jun 16:35:09 * Server started, Redis version 2.4.6
[6236] 28 Jun 16:35:09 # Open data file dump.rdb: No such file or directory
[6236] 28 Jun 16:35:09 * The server is now ready to accept connections on port 6379
[6236] 28 Jun 16:35:10 - 0 clients connected (0 slaves), 1179896 bytes in use
[6236] 28 Jun 16:35:15 - 0 clients connected (0 slaves), 1179896 bytes in use
[6236] 28 Jun 16:35:20 - 0 clients connected (0 slaves), 1179896 bytes in use
.
.
.


 Luego es necesario arrancar el servicio ntopng que se instala en Windows:



Arrancamos finalmente ntopng.exe por línea de comando:

C:\Program Files\ntopng>ntopng.exe /h

Unrecognized option: /h
Available options:
/i [ntopng options] - Install ntopng as service
/c                  - Run ntopng on a console
/r                  - Deinstall the service
/h                  - Prints this help

Usage: type ntopng /c -h

C:\Program Files\ntopng>ntopng.exe /c
Starting ntopng
Running ntopng.
28/Jun/2017 16:41:24 [Prefs.cpp:1143] Logging into C:\Users\Documents\ntopng\ntopng.log
28/Jun/2017 16:41:24 [Ntop.cpp:1359] Setting local networks to 127.0.0.0/8
28/Jun/2017 16:41:24 [Redis.cpp:109] Successfully connected to redis 127.0.0.1:6379@0
28/Jun/2017 16:41:24 [NtopPro.cpp:144] [LICENSE] Read license from Redis []
28/Jun/2017 16:41:24 [NtopPro.cpp:196] ERROR: [LICENSE] Invalid or missing ntopng License [Empty license file]
28/Jun/2017 16:41:24 [NtopPro.cpp:209] WARNING: [LICENSE] ntopng will now run in enterprise edition for 10 minutes
28/Jun/2017 16:41:24 [NtopPro.cpp:211] WARNING: [LICENSE] before returning to community mode
28/Jun/2017 16:41:24 [NtopPro.cpp:212] WARNING: [LICENSE] You can buy a permanent license at http://shop.ntop.org
28/Jun/2017 16:41:24 [NtopPro.cpp:213] WARNING: [LICENSE] or run ntopng in community mode starting
28/Jun/2017 16:41:24 [NtopPro.cpp:214] WARNING: [LICENSE] ntopng --community
28/Jun/2017 16:41:25 [PcapInterface.cpp:86] Reading packets from interface .

.
.
.
28/Jun/2017 16:41:27 [NetworkInterface.cpp:2045] Started packet polling on interface {F40B0BE5-8486-492C-8C68-FE386AA20A4E} [id: 0]...
28/Jun/2017 16:41:27 [NetworkInterface.cpp:2045] Started packet polling on interface {73A04791-3A11-4D3A-B39F-DCAEBDDC1E59} [id: 1]...
28/Jun/2017 16:41:27 [NetworkInterface.cpp:2045] Started packet polling on interface {B79A43B6-5612-441A-8CD1-9A53DC90BDC0} [id: 2]...
28/Jun/2017 16:41:27 [NetworkInterface.cpp:2045] Started packet polling on interface {809C3614-1C19-4042-B021-8A9CFB35B4EA} [id: 3]...

.
.
.

Si ahora accedemos a http://127.0.0.1:3000/ veremos la intefaz de login de ntop:



Entramos con las credenciales por defecto (admin - admin). Nos pedirá cambiar la clave por defecto. Le ponemos cualquiera que queramos:




Ya estamos dentro de ntop. Podemos generar algo de tráfico de la manera que queramos (ICMP, mediante ftp, telnet, cualquier otra aplicación/protocolo...) y ver cómo se refleja en la interfaz gráfica, donde podremos seleccionar los flujos por host, protocolo...