Kamailio entendiendo lógica de enrutamiento

kamailio_logicaUno de los aspectos mas importantes y a la vez complicados de entender en Kamailio es la lógica de enrutamiento, debido a que tiene mucho que ver con el comportamiento del protocolo SIP.

Luego de mi charla en el ElastixWorld 2015 he tenido varias consulta referente a Kamailio y su comportamiento, un poco de ello lo explique en la charla “Usando el módulo PIKE en Elastix MT”  sin embargo en este post vamos a dar un alcance un poco mayor a este tema.

Primero vemos de manera genera lo que trae el archivo de configuración.

kamailioEsta imagen representa el esquema a nivel de parametrización de un archivo kamailio.cfg

Ahora vamos a ver cada punto:

1.- Definiciones Globales
Variables que vamos a usar a lo largo de la lógica de enrutamiento, las cuales pueden estar referidas a parámetros de log, direcciones IP y puertos que va escuchar el servidor, entre otras.

Tiene la siguiente forma:

Kamailio_globals2.- Sección de Módulos
Es donde definimos o “cargamos” los módulos vamos a user, por ejemplo el modulo de MYSQL  para guardar los registros en base de datos, o el modulo de TLS para cifrado de la señalización.

Tienen las siguiente forma:

kamailio_modules3.- Sección de configuración de módulos
En esta sección de parametrizan o configuran los módulos que hemos cargado en la sección  anterior, es muy importante configurar los módulos adecuadamente, ya que en algunos casos se activan con configuraciones por defecto, lo cuales pueden producir a la larga efectos extraños en el comportamiento.

Tienen la siguiente forma:

kamailio_modules4.- Bloques de rutas o lógica de enrutamiento
Esta es la sección es “clave” en el archivo de configuración ya que va establecer todo el camino que va seguir las peticiones SIP que recibamos, aquí hay que decir que no existe un patrón único, ya que uno puede hacer su lógica tan simple o tan compleja como lo desee, es decir con mas o menos bloques de rutas, sin embargo existen ciertos patrones que uno siempre va respetar o encontrar en otros archivos, estos son bloques de rutas que normalmente vamos a encontrar:

  • Principal (Main ó request_route)
  • Secundarias (REQINIT, WITHINDLG,REGISTRAR)
  • Failure (failure_route)
  • Branch (branch_route)

En esquema que pude realizar para mi autocompasión de un esquema de enrutamiento maso menos complejo:

kamailioComo se puede apreciar todo parte del bloque “Main” o “Request Route” y va ingresando a los demás bloques en donde cada uno tiene un objetivo puntual aplicado a la solicitud SIP entrante.

El bloque “REQINIT” tiene un papel muy importante ya que hace la mayoría de la comprobaciones previas como la evaluación de seguridad entre otras cosas.

Luego los métodos secundarios realizan el registro, localización y reenvío de las solicitudes SIP a otro server, un Asterisk por ejemplo. según sea el caso.

Enlaces:
https://www.kamailio.org/wiki/cookbooks/4.0.x/core
https://www.kamailio.org/wiki/tutorials/getting-started/main

Bueno espero que este post les amplié el panorama respecto al funcionamiento de kamailio, mas adelante desmenuzaremos otros aspectos de este formidable software.

Saludos
Juan Oliva

 

 

 

 

 

 

Desactivando SIP ALG en Fortinet

SIPALGMencionar que el protocolos de Voz son los mas delicados que existen en el mundo de los servicios de infraestructura no es una novedad, debido primordial mente a que no pueden tener ningún tipo de retardo o falla durante su transmisión y en este caso protocolo SIP en este caso no es la excepción.

Bajo este contexto, algunos equipos perimetrales tipo Router, Firewall, UTM durante estos últimos años vienen implementando lo que llaman “Application Layer Gateway” o ALG evidentemente en favor de la protección ante fallas de seguridad,  ya que lo que hace es interceptar el trafico para administrarlo/gestionarlo antes de dejarlo pasar a su destino final.

SIPALG

Sin embargo este tipo de features no necesariamente surten en favor de uno cuando está desplegando una implementación de VoIP ya que ello va producir problemas durante las llamadas, causando entrecortes o caídas de llamada inesperados inclusive.

En este caso vamos a ver como desactivar SIP ALG de un equipo Fortinet 60D sin embargo puede ser aplicable para cualquier modelo.

1.-Desactivar sip-helper y sip-nat-trace

Ingresamos al CLI console mediante la interfase de administración y desactivamos las opciones de sip-helper y sip-nat-trace de la siguiente forma:

SIPALG

Una vez realizado esto es necesario reiniciar el equipo.

2.-Eliminar SIP dentro de session-helper

Luego ingresamos nuevamente, ahora es necesario identificar el ID del protocolo SIP dentro de la opción session-helper para luego eliminarla, esto se consigue de la siguiente forma:

SIPALGSIPALGComo vemos hemos identificado que el protocolo SIP se encuentra en el ID 13 , ahora procedemos a eliminarlo de la siguiente forma:

SIPALGUna vez que hemos eliminado el ID simplemente cerramos la sesion en la consola.

Espero les sirva.
Saludos
Juan Oliva

 

 

 

Instalación de Kamailio en Centos 7

kamailioEs indudable que Kamailio es uno de los software mas potentes en el mundo de la VoIP , por los diferentes escenarios que puedes construir relativos a seguridad, escalabilidad, redundancia y todo lo que termina en “dad”

Sin embargo mucha gente que comienza a aprender su funcionamiento se choca con la curva de aprendizaje, que es necesario tener para entender este programa, como lo dije en un tweet “si no te gusta la consola, kamailio no es lo tuyo” sin embargo nada es imposible de aprender por su puesto.

kamailioAntes de comenzar definamos rápidamente un par de cosas, Kamailio no es igual ni parecido a Asterisk, formalmente Asterisk es lo que se llamaría un “back to back user agent” o “B2UA” el cual es utilizado tradicionalmente para ser una PBX IP ya que cuenta con un sin numero de aplicaciones para un PLANTA IP como voicemail, IVR, Colas,etc,etc.

kamailio

En cambio Kamailio es un SIP PROXY en todos los sentidos, como su nombre lo dice, este tipo de software solo conversa SIP y nada mas, el cual puede trabajar como proxy proiamente, location server, registrar server, servidor de presencia, call routing (LCR) los cuales son algunos de los roles en los que puede trabajar.

kamailioAhora la pregunta sería, para los nativos Asterisk, puedo usar Kamailio como lo uso con Asterisk ?
Pues la respuesta sería que no, ya que si bien es cierto ambos trabajar para brindar servicios de SIP VoIP tienen diferentes usos.

Entonces para que uso Kamailio?
Se puede usar para extender funcionalidades que de pronto Asterisk queda limitado, como por ejemplo, escalar usuarios, ya que Kamailio solo trabaja con SIP su consumo de procesamiento es mucho menor al de Asterisk y puede trabajar como servidor de registro, tambien puedo usarlo para balancear carga hacia un conjunto de servidores Asterisk, o para que sea mi servidor de proteccion hacia internet, solo por citar algunos ejemplos.

kamailioEntonces puedo integrar Asterisk con Kamailio ?
Si, puedo integrarlo de muchas maneras en realidad, algunas muy sencillas otras mas complicadas pero si se puede, de hecho hay varios proyectos y/o productos que han integrado con gran exito Kamalio-Asterisk como Elastix MT SIP WISE

Una vez que hemos revisado un poco para que podemos usar Kamailio, vamos a comenzar con este primer post sobre como instalar Kamailio sobre Centos 7 en una instalación mínima.

1.- Configurar el sistema base
Luego de instalar Centos 7 al mínimo es necesario “arreglar” un par de cosas

Instalar editor, ifconfig , EPEL
yum install net-tools vim
yum -y install epel-release

Desactivar SELINUX
vi /etc/selinux/config
SELINUX=disabled

Desactivar Firewall
systemctl disable firewalld
systemctl status firewalld

2.- Instalar Kamailio
Ahora vamos a instalar desde los repositorios.

Agregar un repositorio
vi /etc/yum.repos.d/kamailio.repo

[kamailio]
name=RPMs for Kamailio on CentOS 7
type=rpm-md
baseurl=http://rpm.kamailio.org/stable/CentOS_7/
gpgcheck=1
gpgkey=http://rpm.kamailio.org/stable/CentOS_7/repodata/repomd.xml.key
enabled=1

Instalar Kamailio básico
yum install kamailio kamailio-utils kamailio-debuginfo

3.- Crear un archivo de configuración básico

vim /etc/kamailio/kamailio.cfg

##### Inicio
debug=2
log_stderror=yes
fork=yes
mpath=”/usr/lib64/kamailio/modules”
loadmodule “pv.so”
loadmodule “xlog.so”

route {
xlog(“L_INFO”,”Requerimiento entrante: $rm de $si a $ru \n”);
forward();
}

onreply_route {
xlog(“L_INFO”,”Respuesta entrante: $rm $rr – de $si a $ru \n”);
}
##### Fin

4.- Levantar el servicio y revisar LOG

Levantamos el servicio y si todo está bien veremos esto
kamailio
También es necesario, sobre todo si salen errores verificar los logs

tail -f /var/log/messages
kamailio

Algunos Links que deberías ver si te interesa saber un poco mas de Kamailio :

Kamailio :: A Quick Introduction
http://es.slideshare.net/oej/kamailio-a-quick-introduction

Kamailio – The Story for Asterisk
http://es.slideshare.net/miconda/kamailiothestory

Usando el módulo PIKE en Elastix MT
http://es.slideshare.net/elastixorg/usando-el-mdulo-pike-en-elastix-mt?qid=db7c2bb7-5d61-4190-a76d-89dd0f97565a&v=&b=&from_search=24

 

En otros post veremos un poco mas kamailio y algunas aplicaciones practicas.

 

Espero les sirva.
Saludos
Juan Oliva

 

 

 

 

Instalación de Openstack en Ubuntu

openstackHace un tiempo que llevo investigando, trabajando y usando de Openstack, es todo un mundo nuevo y fascinante, a continuación les muestro como instalarlo sobre Ubuntu 14.04 64bits en una instalación  All-in-One (todo en uno) ya que existe también la arquitectura muli nodo.

1.- Preparación del sistema operativo

Algunos detalles de la instalación y post instalación de Ubuntu para openstack

  • Es recomendable crear un usuario “stack” para ser usado, luego ingresar con ese usuario para realizar la instalación.
  • Es necesario configurar una dirección IP fija en el archivo “interfaces”

2.- Instalación de pre-requisitos
Ingresar con el usuario “stack” y luego escalar a root

2.1.- Instalar git
sudo su
sudo apt-get -y install git

2.2.- Clonar openstack del repostitorio dev
git clone https://git.openstack.org/openstack-dev/devstack

2.3.- Configurar el archivo “local.conf” con las credenciales y parámetros de red.
cp /home/stack/devstack/samples/local.conf /home/stack/devstack/local.conf
cd devstack/
vim local.conf

openstackDonde:

ADMIN_PASSWORD : Es la contraseña de acceso para horinzon
FLOATING_RANGE=192.168.10.224/27 : El el segmento LAN de la red, se considera el pool de IPs que seran asignadas para las maquinas virtuales.
FIXED_RANGE=10.11.12.0/24 : El segmento de direcciones internas asignadas a las maquinas virtuales.

3.- Instalación de Openstack
Una vez que tengamos configurado el archivo “local.conf” iniciarnos el proceso de instalación, Es un proceso largo, de 30 a 40 minutos, así que tengan un buen cafe a la mano.

./stack.sh

4.- Ingresar a Horizon
Una vez que el proceso culmine será posible ingresar a hortizon que es la interfase de administración de openstack de la siguiente forma:

openstack5.- Crear imágenes
Se puede definir a una imagen como un sistema pre configurado que se usa como base para crear una “instancia” , aterrizando conceptos sería instancia = maquina virtual, una instalación por defecto:

openstackEvidentemente es posible crear una nueva imagen las cuales pueden ser de tipo : AKI, AMI, ARI, hasta de tipo ISO, sin embargo la mas común es de tipo QCOW2 que son de tipo qemu.

Una buena explicación de los tipos de imágenes pueden encontrarla aquí: http://docs.openstack.org/image-guide/image-formats.html

Se puede encontrar imágenes de las principales distribuciones de Linux :
https://www.rdoproject.org/resources/image-resources/

Y crear sus propias imágenes :

openstack6.- Crear instancias.
Conceptual mente es un “clon” de una imagen que crea un usuario, es decir es bueno tener una diversa cantidad de imágenes para poder tener instancias de los diversas distribuciones.

openstack7.- Conclusiones
Definitivamente Openstack es ahora una nueva alternativa para crear nubes o virtualizar simplemente, definitivamente crear instancias solo es la punta del iceberg en este entorno de trabajo.

Una Guía muy detallada de como usar horizon pueden encontrarla aquí

Espero les sirva
Juan Oliva
@jroliva

 

 

 

 

 

Curso a distancia : Desarrollo de Aplicaciones en Asterisk

Hola a todos, debido a muchas preguntas de como poder desarrollar aplicaciones y/o características adicionales sobre implementaciones Asterisk/Elastix, en SILCOM hemos desarrollado este curso el cual tengo el gusto de dictar.

Objetivo
El curso online de “Desarrollo de Aplicaciones en Asterisk” es completamente práctico y tiene como objetivo que el participante desarrolle capacidades para implementar, desarrollar y programar aplicaciones interactivas con Asterisk, usando consulta de base de datos y haciendo uso de Asterisk Gateway Interfase (AGI) , así mismo gestionar y hacer uso de los diferentes métodos para originar llamadas con Asterisk Manager Interfase (AMI) y Asterisk auto-dial out , para desarrollar aplicaciones como click to call y programas generadores de encuestas, control de llamadas con autenticación de contraseña basadas en perfiles que incluyen bolsas de minutos, temporizadores, además de configuración y uso de WebRTC ,etc.etc.
desarrolloaplicacionesasterisk

Fechas y programación del curso
El curso tiene una duración de 20 horas, las cuales están divididas en 5 sesiones de 4 horas cada uno.

Inicio : 07 Mayo hasta 04 Junio 2016
Horario : Sábados de 16:00 a 20:00 (UTC -05:00)

Esta semana que viene es la ultima semana de inscripción!!

Más Información
Email : training@silcom.com.pe
Web del curso : http://www.silcom.com.pe/capacitacion-desarrollo_aplicaciones_asterisk.html

Espero verlos en el curso!!
Saludos
Juan Oliva

Fortinet SSH Backdoor Exploit P.O.C.

fortinet-backdoor-welcomeHace solo un par de semanas el mundo de uno de los mas famosos UTMs del mercado Fortinet, fue remecido por la divulgación de una puerta trasera de acceso a sus equipos.

Inicialmente se reveló un script que sacaba provecho a un método de “soporte” usado por el personal de firma para brindar ayuda, si bien es cierto este método tenia involucrado la generación de claves aleatorias, sin embargo usaba un algoritmo al parecer bastante sencillo.

Por supuesto luego de a ver sido revelado este “método” apareció un script en Python que explota y automatiza la apertura de un shell mediante SSH.

Cabe señalar que la firma emitió un comunicado (ver aquí) en donde aduce que lo revelado se trata de un problema de gestión y no de un puerta trasera, lo real es que ahora la vulnerabilidad afecta a las versiones 4.X hasta las 5.0.7 del sistema operativo.

Aquí el P.O.C. que realicé contra un Fortinet VM

Es claro que todos los equipos que tengan la versiones afectadas y que tengan SSH abierto, es altamente recomendable actualizar (pagar la licencia) para evitar ser comprometidos.

Espero les sirva
Juan Oliva
@jroliva

 

Los números de 2015

Los duendes de las estadísticas de WordPress.com prepararon un informe sobre el año 2015 de este blog.

Aquí hay un extracto:

El Museo del Louvre tiene 8.5 millones de visitantes por año. Este blog fue visto cerca de 150.000 veces en 2015. Si fuese una exposición en el Museo del Louvre, se precisarían alrededor de 6 días para que toda esa gente la visitase.

Haz click para ver el reporte completo.