24 de junio de 2012

Practicando MPLS: Securización

Como comentaba al final de la entrada anterior, vamos a ver algunas configuraciones y comandos para asegurar nuestros equipos y el escenario con el que estamos trabajando. En primer lugar vamos a fortificar el acceso a los equipos, deberíamos utilizar SSH para el acceso remoto a la consola pero como se trata de un entorno virtual no vamos a alargarlo más.

Deshabilitaremos algunos servicios y activaremos otros

no service finger
no service nagle
!
service password-encryption
service tcp-keepalives-in


Luego pasamos a configurar las contraseñas de algunos usuarios al igual que el acceso al modo enable


enable secret class
username one password cisco
username two password cisco
!
line con 0
  exec-timeout 5
  login local
!
line vty 0 15
  exec-timeout 5
  login local


Entre otras recomendaciones, deshabilitaremos el servidor Web y filtraremos las peticiones broadcast con los comandos:

no ip http server
no ip http secure-server
!
interface <interfaz>
  no ip directed-broadcast


Para el routing OSPF utilizaremos autenticación MD5 y utilizaremos dicha clave y un índice (key) configurable para crear un hash que compartir entre los nodos.


router ospf 100
  area 0 authentication message-digest
!
interface FastEthernet 0/0
  ip ospf message-digest-key 1 md5 test

Comando: debug ip ospf adj


En el caso de BGP, igualmente utilizaremos autenticación MD5 y se configura fácilmente con el comando:


router bgp 300
  neighbor <neighbor> password test

Comando: debug ip bgp


Además, buscando por Internet he visto que también se puede utilizar autenticación MD5 para el protocolo LDP. En el siguiente apartado podéis encontrar enlaces útiles sobre MPLS y sobre la securización de dichos protocolos, espero que os sean útiles.

bla, bla, bla... jejeje se colo : p

Actualización: Al final no he comentado nada relacionado con las Access List, fundamentales para el control de tráfico al igual que sus semejantes: Prefix List, Prefix AS, Route Map, etc.

Enlaces

Configuring Secure Shell on Routers and Switches Running Cisco IOS
Security of the MPLS Architecture - Securing the Core
Sample Configuration for Authentication in OSPF
MD5 Authentication Between BGP Peers Configuration Example
MPLS: LDP MD5 Global Configuration

Un saludo, Brixton Cat.

22 de junio de 2012

Practicando MPLS: Troubleshooting II

Continuando con la entrada anterior, en este caso veremos algunos comandos útiles para la resolución de problemas ya una vez visto algunas funciones de la consola de Cisco. Algunos comandos son de lo más básico y otros están orientados al escenario con el que estamos trabajando, también utilizaremos algunos que hemos visto anteriormente y otros nuevos que me han parecido interesantes.

Interfaces

Podemos ver rápidamente el estado de las interfaces con el comando show ip interface brief


O ver en detalle la configuración, contadores de paquetes y bytes, errores, etc. Especificaremos el interfaz con el comando show interface FastEthernet 0/0 por ejemplo.

 

Routing

Otro de los grandes comandos que utilizaremos sera show ip route que nos devuelve toda la tabla de rutas del equipo.


Además podemos ver la información de cada protocolo, para el caso de OSPF utilizaremos el comando show ip ospf neighbor


O show ip bgp summary para el caso de BGP


Con el comando show ip bgp vpnv4 all vemos las rutas aprendidas por cada dirección VPNv4 configurada en el equipo.



MPLS

Igualmente con el comando show ip route vrf ROJA podemos ver la información de las rutas aprendidas por dicha VRF.


Para ver las distintas VRFs configuradas podemos utilizar el comando show ip vrf interfaces que nos proporciona el estado de cada enlace.

O ver en detalle la información de una determinada VRF: show ip vrf detail AZUL


En MPLS también podemos ver la tabla de reenvio con el comando show mpls forwarding-table


O ver la información de los vecinos LDPs con el comando show mpls ldp neighbor


Conectividad

Por último podemos lanzar pruebas ping y tracer con los comandos ping/traceroute vrf VERDE 172.16.1.1


 

Para la siguiente entrada realizaremos una práctica de securización, tanto de cara al acceso del propio equipo así como de los protocolos utilizados. Próximamente haremos un ejercicio completo incluyendo los equipos clientes (CEs) desarrollando un escenario más parecido a la realidad.

Un saludo, Brixton Cat

20 de junio de 2012

Practicando MPLS: Troubleshooting I

Voy a dividir esta entrada en dos partes: trucos del CLI y Resolución de problemas, para no hacerla demasiado pesada; son varios trucos y comandos que me ha parecido importante reseñar basándonos en los ejercicios que hemos estados desarrollando anteriormente.

Empezaré con algunos trucos y atajos que están presentes en la consola de los equipos Cisco, desde comandos básicos para revisar la configuración realizada hasta secuencias de escape de determinadas pruebas.

Tenemos varias opciones a la hora de obtener ayuda una vez logueados en un equipo, siendo imprescindible conocer el funcionamiento del caracter ? que nos informa de los comandos permitidos además de las opciones de los mismos.


Todos los comandos tienen abreviaturas. Otro uso de la ayuda es ver las coincidencias con los caracteres que hemos intrducido y sacar un patrón común para cada comando. Es decir, no es lo mismo introducir el comando ip ad que ip add, con el segundo podemos definir la dirección IP de una interfaz que habremos seleccionado previamente.


Yo soy uno más de los que les gusta ver la configuración a pelo para buscar errores, por lo que uno de mis comandos favoritos es show running-config:


Casi todos los comandos nos proporcionarán opciones extras con los que completar nuestras consultas


Además podremos utilizar opciones de filtrado utilizando el carácter | como en cualquier sistema Unix


Como incluir palabras clave (include)


Excluirlas (exclude)


Ver determinadas secciones (section), etc...


Para salir de los distintos niveles utilizaremos el comando exit y para salir del modo de configuración utilizaremos el comando end o la secuencia de escape Ctrl+Z.


En algunas versiones de las IOS de Cisco, podremos utilizar el comando do en cualquier nivel que nos encontremos para ejecutar cualquier comando que se nos ocurra


Para evitar que los mensajes del log nos molesten continuamente utilizaremos el comando: no logging console


Y para cuando nos equivocamos de comando utilizaremos: no ip domain lookup


A la hora de realizar pruebas de conectividad, imprescindiblemente utilizaremos el comando ping; pero en caso de no tener éxito y nos desesperemos, podremos cortar el comando pulsando Ctrl+6 y ahorrarnos un tiempo durante las tareas de resolución de problemas.


Igualmente es utilizable en el comando traceroute que por defecto viene configurado con muchos saltos.


En esta primera entrada he querido mostrar algunos trucos y comandos útiles de los equipos Cisco a través de la consola que proporciona su software. En la siguiente entrada veremos otros comandos que nos serán de ayuda en la resolución de problemas para escenarios basados en las configuraciones que hemos realizado. Posteriormente endureceremos los protocolos y configuraciones realizadas para evitar posibles riesgos de seguridad.

Un saludo, Brixton Cat.

17 de junio de 2012

Practicando MPLS: Reflector de Rutas

Continuando la serie Practicando MPLS y como comentabamos en la entrada anterior, una de las limitaciones es el incremento del número de sesiones iBGP a medida que se añade un nuevo router frontera a la red. Se introduce el concepto de Reflector de Rutas que se encarga de centralizar las sesiones que se establecen entre los PEs y simplificar la escalabilidad de la red.

El escenario que vamos a desarrollar va a ser el siguiente:


Y el direccionamiento de los equipos:


Como siempre los datos de las VRFs y el direccionamiento de éstas será:

 

El P (Madrid) y el Reflector de Rutas (RR) sólo intervendrán en el routing OSPF para conectar equipos no directamente conectados y el RR intervendrá además en el routing MP-BGP para la conexión de los distintos PEs, pero ninguno de ellos conocerá las VRFs configuradas ni el direccionamiento de los clientes.

Configuración Común

Inicialmente agregaremos una controladora y una tarjeta al Cisco 7200 dado que por defecto no cuenta con ninguna.


Como siempre realizaremos la configuración común a todos los equipos, esto incluye: la configuración básica, la configuración MPLS, la interfaz Loopback y la interfaz WAN.

!
mpls label protocol ldp
mpls ldp loop-detection
mpls ldp explicit-null
!
interface Loopback 0
 description INT GEST
 ip address <IP> <Mask>
!
interface FastEthernet 0/0
 desc INT <Name>
 ip address <IP> <Mask>
 speed 100
 duplex full
 mpls ip
 mpls mtu 1520
 no shutdown
!

Comprobamos que hay respuesta entre los equipos directamente conectados.

Comando: ping <IP>


Pasamos a configurar el routing OSPF para el core MPLS y comprobamos que la configuración es correcta.

! Routing OSPF
router ospf 100
 log-adjacency-changes
 network 1.0.0.0 0.0.0.255 area 0
 network 10.0.0.0 0.0.0.255 area 0
!

Comando: show ip route


Configuración MP-BGP

Pasamos a configurar el routing BGP en todos los PEs y en el Reflector de Rutas para que cada PE establezca una sesión iBGP contra el RR.

! Routing BGP
router bgp <ASN>
 bgp log-neighbor-changes
 neighbor <IP> remote-as <ASN>
 neighbor <IP> update-source Loopback 0
!
address-family vpnv4
 neighbor <IP> activate
 neighbor <IP> send-community both
 neighbor <IP> route-reflector-client
!

La palabra mágica es neighbor <IP> route-reflector-cliente que debe ser configurada en todos los equipos. El RR debe establecer sesiones iBGP contra cada uno de los PEs mientras que los PEs establecerán una sesión contra el reflector.

Comando: show ip bgp summary


Configuración VRFs

Como comentaba anteriormente, la información de las VRFs así como su direccionamiento sólo es accesible por los routers frontera de la red, los equipos intermediarios únicamente se dedicarán a retransmitir los paquetes en función de la etiqueta que sea asociada a dicha VRF.


! RD & RT = <ASN>:Number
ip vrf <VRF>
 rd <RD>
 router-target export <RT>
 router-target import <RT>
!
router bgp <ASN>
 address-family ipv4 vrf <VRF>
  redistribute connected
!

Una vez definidas las VRFs y asociadas al routing BGP, igual que en las prácticas anteriores. Crearemos las distintas subinterfaces y las asociaremos con su correspondiente VRF.

!
interface FastEthernet 0/1
 speed 100
 duplex full
 no shutdown
!
interface FastEthernet 0/1.<VLAN>
 desc INT <Name>
 encapsulation dot1Q <VLAN>
 ip vrf forwarding <VRF>
 ip address <IP> <Mask>
!


Comando: show ip vrf


Comprobaciones

Una vez configuradas todas las interfaces de los clientes (VRFs), pasamos a comprobar que conocemos el direccionamiento que hemos definido en el resto de equipos frontera.

Comando: show ip route vrf <VRF>


Y comprobamos que hay respuesta en las direcciones aprendidas por cada VRF.

Comando: ping vrf <VRF> <IP>


En la siguiente entrada realizaremos prácticas de resolución de problemas con algunos de los comandos más importantes, además de algunos trucos del CLI de Cisco que nos ayudan en el desarrollo de las mismas. Posteriormente también realizaremos una pequeña securización de la configuración, aplicando comandos con los que asegurar las conexiones de algunos protocolos que utilizamos.

Un saludo, Brixton Cat.

Resolviendo ejercicios de subnetting


Como de momento vuelvo a tener algo de tiempo para el blog y antes de continuar la serie Practicando MPLS, aprovecho un tema recurrente en el mundo del networking, el Subnetting y sus derivados. Recientemente me ha tocado recordar viejas cosas así que con algunos ejercicios quiero mostrar una manera fácil de realizar los cálculos para toda clase de direccionamiento.

No quiero entrar en detalle en la teoría, dado que existe mucha documentación y me limitare a desarrollar ejercicios con los que mostrar distintos métodos para realizar los cálculos. No por ello comentar por encima algunas técnicas que utilizaremos:

* Exponecial: En el octeto correspondiente, utilizaremos el número de bits de hosts y de redes como exponente del número 2 (binario) para calcular los totales.

11110000 => 2³ = 8    11111000 => 2² = 4    11111100 => 2¹ = 2    11111110 => 2 = 1

* Restando: En el octeto correspondiente, restaremos el valor de la máscara a 256 para obtener el número de direcciones por red. Teniendo una máscara de 240 realizaremos el siguiente cálculo:

256 - 240 = 16

* Multiplicando: Multiplicaremos por 2 el valor de los bits utilizados en función del número de host que necesitemos.

11111000 => 2x3 = 8    11111100 => 2x2 = 4    11111110 => 2x1 = 2

* Sumar número de hosts: Para crear las tablas de direccionamiento iremos sumando en el octeto correspondiente el número de host obtenido.

Si tenemos 4 redes de 64 direcciones, iremos sumando de 64 en 64: 0, 64, 128 y 192.

* Tabla de binario: Es imprescindible conocerse la siguiente secuencia de valores

Nº bit:    7      6     5     4    3   2   1   0
Valor:  128    64   32   16   8   4   2   1

Con ella podremos realizar todos los cálculos que necesitemos: obtener el valor de los bits subnetteados y viceversa, calcular el valor digital y binario de las máscaras de red, etc.

Máscara: 128   192   224   240   248   252   254   255

* Descarte: Como en cualquier otro cuestionario, siempre nos encontraremos con preguntas trampas, autenticas burradas que poco tienen que ver con la pregunta, etc.

Como vamos a utilizar todas las clases que existen dentro del direccionamiento IPv4, empezaremos desde los más "sencillos" hasta los más "complejos", usando ejercicios reales y algunos modificados.

Ejercicios

Clase C

Ejercicio: Utilizando el siguiente direccionamiento: 192.168.16.0/24, nos piden crear 10 redes de 10 direcciones.

Podemos calcular el exponente en función del número de redes y direcciones que necesitemos:

Red:         2⁴ = 16
Hosts:      2⁴ = 16


Con lo que obtenemos que necesitamos 4 bits tanto para la parte de red como para la de host y una máscara de red 255.255.255.240 que nos proporciona un total de 16 redes.

Si restamos a 256 el valor del último octeto, 256 - 240 = 16, obtenemos el número de direcciones que tenemos por cada subred. Dicho valor coincide con el resultado anterior.

Igualmente podríamos calcular el número de bits de hosts que necesitamos multiplicando por 2 el valor de los bits que utilizamos, es decir:

Host: 2x1 2x2 2x4 2x8 = 16 (4 bits)

En la siguiente imagen se puede observar el direccionamiento obtenido en el ejercicio


Clase B

Ejercicio: Necesitamos dividir una red de clase B en subredes con un mínimo de 500 direcciones ¿Qué máscara utilizará?.

De las distintas maneras que hemos visto para obtener el número de bits en función del número de hosts, el más rápido es ir multiplicando por 2 según vamos cogiendo bits para el rango. En este caso:

Host: 2x1 2x2 ... 2x64 2x128 2x256 = 512

Donde obtenemos 9 bits para el total de direcciones de hosts y 7 bits del tercer octeto para subnettear: 2⁷ = 128.

Obteneniendo un total de 128 redes de 512 direcciones cada una. La máscara que utilizaremos será: 255.255.254.0.

Utilizando por ejemplo el rango: 172.30.0.0/23, obtendremos la siguiente tabla de direcciones:


Clase A

Ejercicio: Teniendo el siguiente direccionamiento 10.18.71.2 255.248.0.0 ¿Cuál es la dirección de Red y de Broadcast?

En primer lugar vamos a realizar algunos cálculos para obtener el número de bits de máscara y el número de host por red: 256 - 248 = 8 == 2³

De donde obtenemos un total de redes de 2⁵ = 32

Por tanto tendremos una máscara de 13 bits (/13). Resumiendo la tabla de direcciones, obtenemos la siguiente lista:


Resultando que la dirección de red es 10.16.0.0 y la de broadcast 10.23.255.255.

VLSM

Ejercicio: Teniendo el siguiente direccionamiento completo 172.25.0.0/16 nos piden crear los siguientes rangos:


                                                         2 subredes de 1000 hosts
                                                         2000 hosts
                                                         5 hosts
                                                         60 hosts
                                                         70 hosts
                                                         15 enlaces de 2 hosts por enlace

En este caso vamos a utilizar un ejercicio complejo de VLSM que aglutina todo lo que hemos aprendido en los ejercicios anteriores.

En primer lugar deberemos organizar los distintos rangos de mayor a menor dado que es en ese orden como iremos realizando los cálculos.

1 x 2000 direcciones
2 x 1000 direcciones
1 x 70 direcciones
1 x 60 direcciones
1 x 5 direcciones
15 x 2 direcciones

Iremos calculando el número de direcciones multiplicando por 2 los valores de los bits que utilizaremos. Para el primer rango, de 2000 direcciones:

1.1.11111000.00000000
2048 direcciones

Para los rangos de 1000 direcciones:

1.1.11111100.00000000
1024 direcciones

Para el siguiente rango, de 70 direcciones:

1.1.1.10000000
128 direcciones

Una vez realizados todos los cálculos, tenemos las diferentes máscaras de red que utilizarán cada fragmento:

1 x 2000 direcciones - 5 bits de red - 255.255.248.0
2 x 1000 direcciones - 6 bits de red - 255.255.252.0
1 x 70 direcciones - 1 bits de red - 255.255.255.128
1 x 60 direcciones - 2 bits de red - 255.255.255.192
1 x 5 direcciones - 5 bits de red - 255.255.255.248
15 x 2 direcciones - 6 bits de red - 255.255.255.252

Con estos datos podremos calcular los distintos rangos partiendo desde el mayor hasta el menor para perder el mínimo número de direcciones.


Traducción decimal/binario

Ejercicio: Cual de las siguientes direcciones corresponde a una clase A privada

00001010.01111000.01101101.11111000
00001011.11111010.11100001.01100111
00101010.11001000.11110111.01001100
00000010.01001010.01101001.11110011

En primer lugar podemos utilizar el método de descarte para determinar rápidamente cual es la dirección que nos pide el enunciado. En este caso ha coincidido con un ejercicio sencillo pero que demuestra como fácilmente podemos contestar este tipo de preguntas.

En este caso nos hablan de una red de clase A privada, donde el rango empieza en 10.0.0.0 y finaliza en 10.255.255.255. Basándonos en el primer octeto, obtenemos un binario de 00001010 por lo que descartaríamos las siguientes respuestas:

00001010.01111000.01101101.11111000
00001011.11111010.11100001.01100111
00101010.11001000.11110111.01001100
00000010.01001010.01101001.11110011

Ejercicio: Convertir en binario la siguiente dirección: 191.168.10.11

10111001.10101000.00001010.00001011
11000001.10101100.00001110.00001011
10111111.10101000.00001010.00001011
10111111.10101001.00001010.00001011
01111111.10101000.00001011.00001011
10111111.10101001.00001010.00001011

Utilizando el mismo método anterior, descartaremos inicialmente las respuestas que sepamos. Recomendablemente utilizaremos valores pequeños para facilitar el trabajo, en este caso nos fijaremos en el tercer octeto que debería corresponder con 00001010 (10)

10111001.10101000.00001010.00001011
11000001.10101100.00001110.00001011
10111111.10101000.00001010.00001011
10111111.10101001.00001010.00001011
01111111.10101000.00001011.00001011
10111111.10101001.00001010.00001011

Posteriormente pasaremos octeto a octeto, según el nivel del dificultad, descartando respuestas. En éste caso utilizamos el primer octeto: 255 - 191 = 64, de donde obtenemos que el primer octeto debe ser 10111111:

10111001.10101000.00001010.00001011
11000001.10101100.00001110.00001011
10111111.10101000.00001010.00001011
10111111.10101001.00001010.00001011
01111111.10101000.00001011.00001011
10111111.10101001.00001010.00001011

Como con el primer octeto no hemos tenido mucho éxito pasamos al siguiente. Otra de las técnicas que podemos utilizar es ver si se trata de un número par o impar; cuando nos piden números impares, el bit menos significativo debe estar activo:













10111001.10101000.00001010.00001011

11000001.10101100.00001110.00001011
10111111.10101000.00001010.00001011
10111111.10101001.00001010.00001011
01111111.10101000.00001011.00001011
10111111.10101001.00001010.00001011



Actualización: No sé por qué leches hace lo que le da la gana con el formato : (




Resultando que la respuesta correcta es 10111111.10101000.00001010.00001011.

Supernetting

Ejercicio: Dado el siguiente rango: 200.17.7.0 255.255.255.224, sumariza las redes obtenidas.

En primer lugar pasaremos a desarrollar todo el direccionamiento:

Host:       256-224 = 32 == 2⁵
Red:                             2³ = 8

Por tanto, obtenemos la siguiente tabla de resultados:


A simple vista se puede observar un patrón común entre todas las direcciones de red, pero vamos a pasar a traducir el octeto correspondiente a la máscara proporcionada. Dado que tenemos una máscara de 27 bits, utilizaremos el último octeto de cada dirección:

0     = 00000000
32   = 00100000
64   = 01000000
96   = 01100000
128 = 10000000
160 = 10100000
192 = 11000000
224 = 11100000

Como se puede observar, todos los bits más significativos son utilizados imposibilitando sacar un patrón común de los mismo. Deberemos utilizar el octeto anterior, en donde observamos:

00000111 00000000
00000111 00100000
00000111 01000000
00000111 01100000
00000111 10000000
00000111 10100000
00000111 11000000
00000111 11100000

Obtenemos que la máscara que nos sumarizará la red es 255.255.255.0 (24 bits).

Ejercicio: Sumarizar los siguientes rangos de red:

172.16.0.0/24
172.16.1.0/24
172.16.2.0/24
172.16.3.0/24

Una manera sencilla de realizar este ejercicio sería calcular el exponente que debemos utilizar: 2² = 4 redes. Pero vamos a desarrollar el ejercicio para entenderlo mejor:

172.16.0.0 -> ... 00000000 00000000
172.16.1.0 -> ... 00000001 00000000
172.16.2.0 -> ... 00000010 00000000
172.16.3.0 -> ... 00000011 00000000

Con 2 bits del rango de red, obtenemos un patrón común a utilizar simplificado en la siguiente máscara 255.255.252.0 (22 bits).

Enlaces

Un saludo, Brixton Cat.