lunes, mayo 04, 2015

Port Security en switches Cisco: los comandos "switchport port-security" y "switchport port-security mac-address" y el error "Found duplicate mac-address"

En una entrada anterior (Port Security en switches Cisco: cuando no podemos asegurar el puerto y nos sale "Command rejected: FastEthernet0/1 is a dynamic port") vimos la razón de cierto error y cómo asegurar un puerto de un switch Cisco para permitir que por el mismo pasase única y exclusivamente una sola MAC y que el puerto se deshabilitase al pasar MACs adicionales, como ocurre cuando se conecta un hub u otro switch a un puerto donde debería haber un único cliente.


miércoles, abril 29, 2015

Desarrollando en Android: Por dónde empezar.


Siempre has querido hacer esa fantástica aplicación, ya fuese para tu negocio, para gestionar tu agenda, quizá para obtener unos ingresos extra (mediante su venta o con publicidad) o, por qué no, para alcanzar la fama y la gloria con esa gran idea que has tenido.


Un Alcoholímetro en tu Android .




Tras un tiempo de intenso desarrollo, finalmente hemos publicado en Google Play nuestra última App. Se trata de Alcoholimetro:

Esta App te ofrece una precisa medida de alcohol en sangre, simplemente desliza los controles sobre la pantalla para indicar, peso, tipo y cantidad de alcohol. Alcoholímetro te mostrará la cantidad de ppm de alcohol contenido en la sangre.
Además calculará por ti la hora en la que tendrás un nivel de alcohol permitido para conducir. 

CARACTERÍSTICAS:
  • Alcoholímetro es Gratis.
  • Calcular la concentración sanguínea de alcohol aproximada (BAC). 
  • Multilenguaje.
  • Controlar el nivel actual, máximo y aceptable de la tasa de alcoholemia.
  • Vista de cambios del BAC en una tabla.

Eso si: Recuerda siempre, beber con moderación y que esta aplicación se basa en un algoritmo matemático. Para obtener un resultado preciso de la concentración de alcohol en sangre haz uso de un alcoholímetro aprobado.Actúa con responsabilidad puesto que ni esta ni ninguna aplicación lo hará por ti.


lunes, abril 13, 2015

Port Security en switches Cisco: cuando no podemos asegurar el puerto y nos sale "Command rejected: FastEthernet0/1 is a dynamic port"

En los switches Cisco es posible asegurar un puerto mediante el comando

switchport port-security

en el modo de configuración de interfaz. Si usamos el comando sin más, sin valores adicionales, garantizamos que en ese mismo puerto solo pueda haber conectado un único host (o lo que es lo mismo, que la conexión se restrinja a una MAC, una dirección física), imposibilitando el uso de hubs o switches conectados a dicho puerto. Si esa regla es violada y por el puerto se ve más de una MAC, el switch tirará el puerto. Para asegurar por ejemplo la interfaz FastEthernet0/1 de un switch Cisco deberíamos hacer lo siguiente:

SW1#conf t
SW1(config)#interface fastEthernet 0/1
SW1(config-if)#switchport port-security
Command rejected: FastEthernet0/1 is a dynamic port.


Ahora bien, hemos intentado habilitar la seguridad en el puerto FastEthernet0/1 pero el comando ha sido rechazado, informándosenos de que dicho puerto es dinámico. ¿Qué significa esto? Si hacemos un show interface switchport de dicho puerto obtenemos esta información:

SW1#show interfaces fastEthernet 0/1 switchport
Name: Fa0/1
Switchport: Enabled
Administrative Mode: dynamic auto
Operational Mode: static access
.

.
.

Vemos que el Administrative Mode del switchport está a auto. El modo administrativo define el modo de trunking del puerto, es decir, si el puerto va a funcionar en modo acceso (access mode), permitiendo el paso de una única VLAN, o en modo trunk, permitiendo el paso de múltiples VLANs. Existe además el modo dinámico en que el puerto es configurado de manera automática como acceso o como trunk según el switch detecte lo que hay conectado a ese puerto. En la captura anterior podemos ver que el Operational Mode es static access porque el switch ha detectado que el equipo conectado a ese puerto funciona en modo acceso. Para equipos finales como PCs lo normal es utilizar el modo acceso a secas, por lo que podemos cambiar sin problemas el modo del switchport:

SW1#conf t
SW1(config)#interface fastEthernet 0/1
SW1(config-if)#switchport mode ?
  access   Set trunking mode to ACCESS unconditionally
  dynamic  Set trunking mode to dynamically negotiate access or trunk mode
  trunk    Set trunking mode to TRUNK unconditionally
 

SW1(config-if)#switchport mode access

Ahora podemos ver que el modo administrativo (además del modo operacional) es static access:

SW1#show interfaces fastEthernet 0/1 switchport
Name: Fa0/1
Switchport: Enabled
Administrative Mode: static access
Operational Mode: static access
.

.
.

Ahora sí vamos a poder habilitar la seguridad:

SW1#conf t
SW1(config)#interface fastEthernet 0/1
SW1(config-if)#switchport port-security
SW1(config-if)#



Hay que recordar que el comando, sin más parámetros, permite el paso de un único host (una sola MAC) y que cuando se detecta más de una el puerto es tirado por el switch. Veámoslo con un ejemplo.

Tenemos el siguiente segmento de red, con un switch (SW1) al que va conectado un hub (Hub0) a través del puerto FastEthernet0/2, hub al que a su vez hay conectado un host (PC0). Hay un host adicional (PC2) que de momento no está conectado al hub. A qué puertos concretos del hub están conectados los hosts es irrelevante.

De momento el switch ve a través del puerto FastEthernet0/2 una sola MAC, la de PC0. La MAC que ve a través del puerto FastEthernet0/1 es irrelevante para el caso.

SW1#show mac-address-table
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----

   1    0060.2f7d.5401    DYNAMIC     Fa0/1
   1    00d0.97ea.6c5a    STATIC      Fa0/2



La norma es que no deben usarse hubs para agregar hosts por los conocidos problemas de colisiones y de bajada del rendimiento en el segmento al que pertenecen. Si como administradores de la red hemos decidido que en la organización no se usarán hubs para agregar equipos, tiene sentido que habilitemos la seguridad en los puertos para equipos finales y evitar precisamente situaciones como esta, en la que posiblemente alguien ha conectado el hub de manera no autorizada y con fines desconocidos. Hemos habilitado la seguridad del puerto en FastEthernet0/2:

SW1#conf t
SW1(config)#interface fastEthernet 0/2
SW1(config-if)#switchport port-security
SW1(config-if)#


Veamos qué ocurre en cuanto conectamos el host PC2 al hub:


El puerto ha caído instantáneamente y el segmento con los hosts ha quedado aislado. En el switch tenemos la siguiente salida:

SW1#
%LINK-5-CHANGED: Interface FastEthernet0/2, changed state to administratively down
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to down



Si hacemos un show interface a la interfaz:

SW1#show interfaces fastEthernet 0/2
FastEthernet0/2 is down, line protocol is down (err-disabled)
  Hardware is Lance, address is 000a.41a4.8602 (bia 000a.41a4.8602)
 BW 100000 Kbit, DLY 1000 usec,
     reliability 255/255, txload 1/255, rxload 1/255

.
.
.


Vemos que la razón de la caída del puerto es err-disabled, que es un código genérico para distintos tipos de motivos por los que el switch puede tirar un puerto, Port Security incluido. Para rehabilitar el puerto necesitamos primero desconectar fisicamente uno de los hosts y realizar primero un shutdown y luego un no shutdown del puerto, con lo que se restaura la situación inicial:

SW1#conf t
SW1(config)#interface fastEthernet 0/2
SW1(config-if)#shut


%LINK-5-CHANGED: Interface FastEthernet0/2, changed state to administratively down
 

SW1(config-if)#no shut

%LINK-5-CHANGED: Interface FastEthernet0/2, changed state to up

%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to up



martes, marzo 17, 2015

Routing: por qué EIGRP envía a Null0 una ruta sumarizada

Cuando sumarizáis una ruta en EIGRP en un router Cisco, al hacer un show ip route veréis una entrada como esta:



Router#show ip route

<omitiendo texto sin interés>

D       192.168.1.0/24 is a summary, 00:10:24, Null0



En este caso se ha configurado EIGRP para que sumarice 192.168.1.0/24 ¿Qué significa que EIGRP envíe a Null0 toda una red? En realidad se trata de un mecanismo de prevención de bucles: con ello se previene que rutas no específicas hagan match con la sumarizada y se envíen a un extremo que nos reenvíe de nuevo el tráfico por tratarse, por ejemplo, de una red inexistente. Enviar a Null0 la red general, sumarizada, resuelve elegantemente el problema. El mecanismo no es exclusivo de EIGRP, sino que también es usado por otros protocolos, como OSPF o ISIS.

domingo, abril 13, 2014

Heartbleed: la debacle de OpenSSL

En la que ya es la noticia del año en cuanto a seguridad informática nos hemos enterado de que OpenSSL, la librería criptográfica de código abierto, sufre un bug en varias de sus versiones que basicamente permite obtener datos de la memoria del sistema que esté utilizándola. Las implicaciones en cuanto a seguridad son enormes, pero como usuarios basicamente lo único que podemos hacer es cambiar todas las claves de todas las aplicaciones y servicios de los que hagamos uso.

Las versiones afectadas son las siguientes:
  •  1.0.2 beta
  • 1.0.1 a 1.0.1f
No están afectadas las ramas 1.0.0 o inferior ni a partir de la 1.0.1.g.

Si tenemos algún servicio abierto hacia la red que use OpenSSL debemos revisar la versión de OpenSSL que tenemos. En Linux es sencillo: con el comando openssl version obtendremos la salida con la versión de openssl instalada en nuestro sistema:

[fedora@localhost ~]$ openssl version
OpenSSL 1.0.0d-fips 8 Feb 2011


En este caso se trata de la rama 1.0.0, por lo que la versión no está afectada con el bug. Si lo estuviese podríamos actualizarla con un yum update openssl o equivalente.

lunes, abril 07, 2014

CACTI: CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'1146'




CACTI  es un popular sofwtare utilizado para graficar distintos parámetros de un sistema, de un equipo, de una red... desde la velocidad de entrada y salida en las interfaces de red a temperatura, uso de CPU y casi lo que se le pueda pasar a uno por la cabeza.


Durante el funcionamiento normal CACTI está graficando continuamente, pero a veces, por diversas razones, las gráficas dejan de funcionar. Suele bastar con echar un vistazo al log para descubrir la causa. En el caso que nos ocupa, el log se llena con mensajes similares al siguiente:

Poller[0] ERROR: A DB Exec Failed!, Error:'1146', SQL:"insert into poller_output (local_data_id, rrd_name, time, output) values (14894, 'traffic_out', '2014-02-14 11:03:39', '5372740')'

El mensaje indica un problema con la base de datos, posiblemente que se haya corrompido por alguna razón. A veces con reparar la tabla es suficiente, pero a menudo el mensaje de error es producto de algo mucho más sencillo: habernos quedado sin espacio en disco en /var. En cuanto liberemos espacio y reparemos, si es necesario, la base de datos, CACTI volverá a graficar sin problemas.