domingo, 21 de noviembre de 2010

Bria para iPhone y Android

Hasta 2000 llamadas con G.729

Sangoma lanza la D500, la primera tarjeta de Alta Densidad para Transcodificación de la industria, con la que podremos tener desde 400 hasta 2000 llamadas simultáneas en G.729, G.726, AMR, G.722, iLBC, y otros.

La nueva Sangoma D500 funciona con Asterisk y con FreeSWITCH convirtiendo numerosos codecs en el G.711 sin que se requieran licencias adicionales.



Ingreso sin contraseña a servidor Elastix por consola

Con colaboración de Frank Cristino.

Cuando tenemos un gran número de conmutadores implementados y queremos ingresar por ssh, aún y cuando tengamos una metodología para asignar las contraseñas de root, es dificil recordar todas ellas o simplemente nos da flojera estar ingresando las contraseñas y mas aún cuando estamos trabajando en más de un equipo a la vez, para ello existe una forma muy sencilla de ingresar a nuestros equipos sin la necesidad de estar ingresando una y otra vez la contraseña, usando keys.

Primero que nada abrimos una consola dentro de nuestra máquina y ejecutamos el siguiente comando:
ssh-keygen -t rsa

Nos hara algunas preguntas en las cuales solo daremos “Enter” sin escribir nada mas.

Con esto generaremos 2 archivos de forma automática id_rsa y id_rsa.pub (normalmente los encontramos dentro de la carpeta del usuario que estamos utilizando dentro de la carpeta /.ssh ej. /home/usuario/.ssh/ )

Abrimos el archivo id_rsa.pub y copiamos el contenido. (ej. vi /home/usuario/.ssh/id_rsa.pub)

Posteriormente ingresamos a nuestro servidor elastix por consola como lo hacemos normalmente y editamos el archivo:
/root/.ssh/authorized_keys y pegamos el contenido que copiamos del archivo id_rsa.pub de nuestra máquina.

Todo listo, ahora bastara con ingresar en nuestra consola “ssh root@direlastix.org” como normalmente ingresamos a nuestro equipo elastix, pero ahora veran que no les solicita contraseña y que ingresaran automáticamente.

Tips desconocidos y que todos tenemos al alcance de la mano: Actualizar el firmware de una tarjeta Sangoma de 1 enlace primario

Siguiendo con una línea de tocar temas raros y a veces desconocidos para muchos hoy les voy a mostrar en este sencillo tutorial una opción super interesante y poco comentada que tienen todas las tarjetas SANGOMA, la opción de actualizar su firmware y programación interna, por ejemplo si tuvieramos el caso de que no funcionan por una incompatibilidad con x o y fabricantes de hardware.
Requisito inicial de este tutorial: Tener una tarjeta Sangoma instalada y detectada en el sistema y los drivers perfectamente compilados.
El proceso comienza simplemente observando con el siguiente comando desde consola de linux o Windows(r) la versión de firmware y las tarjetas Sangoma que poseemos (en este caso una Sangoma a101 de 1 conexión E1/T1):
[root@voip2 ~]# wanrouter hwprobe
——————————-
| Wanpipe Hardware Probe Info |
——————————-
1 . AFT-A101-SH : SLOT=4 : BUS=4 : IRQ=10 : CPU=A : PORT=1 : HWEC=0 : V=34
Card Cnt: A101-2=1
[root@voip2 ~]#
Como podemos ver al final de la línea que marca la tarjeta 1 dice v34 lo cual es la versión de firmware actual que posee dicha tarjeta…Ahora para saber si debemos actualizar o no miraremos en la siguiente página que posee Sangoma para estos upgrades de sus tarjetas AFT…
http://wiki.sangoma.com/sangoma-hardware#aft_firmware

De esa lista que nos aparece seleccionamos el firmware adecuado, en este caso el correspondiente a la tarjeta a101d marcado como VXX (v37 al momento en la tarjeta A101d).
Queda claro que solo se debería seguir el procedimiento si el firmware de la página es de una versión mayor al que tenemos en la tarjeta
Entonces suponiendo que nuestro firmware es menor en la tarjeta como en este caso, procedemos a bajarlo a la carpeta donde estan los firmwares de las tarjetas Sangoma luego de la instalación de sus drivers, es decir,  /etc/wanpipe/firmware/wan_aftup
Por consola sería algo así:
[root@voip2 wan_aftup]# cd /etc/wanpipe/firmware/wan_aftup/
[root@voip2 wan_aftup]# wget ftp://ftp.sangoma.com/firmware/A101dm_0040_V37.BIN
–2010-03-19 15:42:32–  ftp://ftp.sangoma.com/firmware/A101dm_0040_V37.BIN
           => `A101dm_0040_V37.BIN’
Resolviendo ftp.sangoma.com… 205.207.146.107
Connecting to ftp.sangoma.com|205.207.146.107|:21… conectado.
Identificándose como anonymous … ¡Dentro!
==> SYST … hecho.   ==> PWD … hecho.
==> TYPE I … hecho.  ==> CWD /firmware … hecho.
==> SIZE A101dm_0040_V37.BIN … 212392
==> PASV … hecho.   ==> RETR A101dm_0040_V37.BIN … hecho.
Longitud: 212392 (207K)
100%[======================================>] 212.392      154K/s   in 1,3s
2010-03-19 15:42:36 (154 KB/s) – `A101dm_0040_V37.BIN’ saved [212392]
[root@voip2 wan_aftup]#
Luego importantisimo…bajar los servicios de asterisk y de la tarjeta Sangoma!!!! (En mi caso uso elastix se vería así):
[root@voip2 wan_aftup]# amportal stop
STOPPING ASTERISK
Asterisk Stopped
STOPPING FOP SERVER
FOP Server Stopped
[root@voip2 wan_aftup]# service wanrouter stop
Shutting down wanpipe1 interface: w1g1
Shutting down device: wanpipe1
No devices running, Unloading Modules
[root@voip2 wan_aftup]#
Y ahora si ejecutamos el script de actualización de firmware llamado update_aft_firm.sh…
CUIDADO!!! Deben hacerlo sabiendo que si algo falla hay que restablecer la tarjeta con su firmware de repuesto y que hay que saber muy bien lo que se esta tocando…sin UPS ni se les ocurra por ejemplo ya que un corte de energía es complicado en estos casos!!!
[root@voip2 wan_aftup]# ./update_aft_firm.sh
modprobe wan_aften  > /dev/null
AFT card enabled
Sangoma AFT Series card update flash software (version 1.9)
Sangoma AFT card list:
 w1g1: AFT-A101-SH : SLOT=4 : BUS=4 : IRQ=169 : CPU=A : PORT=1 : HWEC=0 : V=34 (Ver.34)
Please select card interface [def=w1g1; q=exit] >
Aquí seleccionamos la interfaz a upgradear en este caso w1g1 y le damos enter.
Please select card interface [def=w1g1; q=exit] > w1g1
List of available versions:
         Version no. 37 (filename=A101dm_0040_V37.BIN)
         Version no. 36 (filename=A101dm_0040_V36.BIN)
Please specify version number [def=37; q=exit] >
Elegimos la mas reciente en este caso 37 y le damos enter…comienza el flasheo….al terminar nos queda algo como lo siguiente:
Please specify version number [def=37; q=exit] > 37
w1g1: Current Sangoma Flash: Revision=34 ID=0×205B
        Erasing sectors                         Passed
        Updating flash                          Passed
        Verification                            Passed
w1g1: Sangoma Flash update                      DONE
w1g1: Reloading Sangoma flash           DONE
w1g1: Sangoma Flash updated successfully
modprobe -r wan_aften
AFT card disabled
[root@voip2 wan_aftup]#
Verificamos por último que efectivamente la tarjeta se haya upgradeado…
[root@voip2 wan_aftup]# wanrouter hwprobe
——————————-
| Wanpipe Hardware Probe Info |
——————————-
1 . AFT-A101-SH : SLOT=4 : BUS=4 : IRQ=169 : CPU=A : PORT=1 : HWEC=0 : V=37
Card Cnt: A101-2=1
[root@voip2 wan_aftup]#
Y efectivamente asi fue ya que ahora nos marca V37 en su firmware….
Ahora reiniciamos el server asterisk y a disfrutar las mejoras o bug fixes que nos haya provisto el nuevo release…
Espero les sirva ya que con estos upgrades se han solucionado muchas incompatibilidades con servers, sobre todo DELL y Sangoma es uno de los único fabricantes mundiales que permiten estas actualizaciones y realmente es importante que los usuarios y consumidores sepan estos detalles.
Autor: Ing. Fernando Villares

PPTP en Centos y Tunneles con SSH

Es común que una vez que tenemos un PBX instalado requiramos de accesar via remota a algún equipo telefónico para realizar algún cambio o incluso al router para realizar algún redireccionamiento de puertos, a continuación veremos 3 soluciones distintas para lograr esto.
La primera opción y a mi gusto la mas práctica es instalar un servidor PPTP en nuestro servidor Elastix, para ellos debemos de seguir los siguientes pasos:
Tuneles Utilizando Servidor PPTP
Instalamos el servicio ppp
[root@ipcomms ~]# yum install ppp
Generamos el archivo pptpd.repo
[root@ipcomms ~]# vi /etc/yum.repos.d/pptpd.repo
Y pegamos el siguiente contenido
[doylenet]
name=Doylenet custom repository for CentOS
baseurl=http://files.doylenet.net/linux/yum/centos/5/i386/doylenet/
gpgcheck=1
gpgkey=http://files.doylenet.net/linux/yum/centos/RPM-GPG-KEY-rdoyle
enabled=1
Guardamos y cerramos el archivo
Instalamos el servidor pptpd
[root@ipcomms ~]# yum install pptpd
Editamos el archivo pptpd.conf
[root@ipcomms ~]# vi /etc/pptp.conf
Buscamos la sección
#
# (Recommended)
localip XXX.XXX.XXX.XXX
remoteip XXX.XXX.XXX.XXX-XXX
Remplazamos localip por la ip de nuestro conmutador y en remote ip colocamos el rango que se le asignara a los usuarios de nuestra vpn, Ej. 192.168.1.1-5
Agregamos nuestros usuarios
[root@ipcomms ~]# /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
user1 pptpd pass1 *
Finalmente iniciamos nuestro servicio pptp
[root@ipcomms ~]# /etc/init.d/pptpd start
Para poder utilziar el internet a donde esta conectado nuestro PBX se requieren de otras configuraciones que no veremos en este tutorial ya que el objetivo es unicamente tener acceso a los equipos de la red mas no salir por el enlace de nuestro conmutador, si requieren eso pueden visitar los siguientes links: http://blog.doylenet.net/?p=17 , http://www.anindya.com/installing-configuring-pptp-vpn-rhel-centos/ .

Tuneles Utilizando Terminal en Linux

Esta opción es la mas viable cuando necesitamos hacer un tunel rapido desde nuestra máquina a algún equipo de la red de nuestro conmutador, para ello unicamente debemos de abrir nuestra terminal en linux e ingresar el sigueitne comando:
ssh -f user@personal-server.com -L 8080:X.X.X.X:80 -N
Donde:
-f manda al background el ssh una vez que se ejecuto el comando
user@personal-server.com es el usuario y la dirección de nuestro servidor
8080:X.X.X.X:80
8080: es el puerto local que utilizaremos para accesar
X.X.X.X: es la direccion ip del equipo al que queremos ingresar
80: es el puerto al cual nos conectaremos
Una vez que hemos ingresado el comando nos pedirá el password de nuestro conmutador, posteriormente abrimos un navegador e ingresamos la direccion localhost:8080 y tendremos acceso al teléfono o router como si estuvieramos en sitio.

Llamadas automatizadas con Call Center

El objetivo de ésta implementación es la utilización del dialer de Elastix para llamar a una lista de clientes, reproducir un mensaje, y a su vez, no perder la funcionalidad de call center con agentes “reales”, además tener la posibilidad de utilizar un script mediante AGI para guardar las respuestas (en caso de una encuesta o pregunta) en una base de datos una vez que llamada fue completada.
Para comenzar, es necesario que creemos:
  1. Algunos “agentes virtuales”, que en principio son creados desde la interfaz de call center.
  2. Un custom context para “loguearlos” mediante el comando AgentCallbackLogin (que lamentablemente no estará disponible desde Asterix 1.5, pero ya existen formas de implementarlo de otra manera).
  3. Otro custom context para “desloguearlos” (básicamente con el proposito de debugging, pero en ciertas ocasiones resulta útil).
  4. Un custom context para redireccionar las a llamadas hacia un último custom context que se encargará de manipular inalmente las llamadas.
Suena bastante confuso en una primera instancia, pero la realidad es que con unos pocos custom contexts, podremos añadir una funcionalidad bastante buscada a nuestro servidor Elastix.
Ahora la pregunta sería, ¿por qué “agentes virtuales”? La respuesta es bastante simple, mediante el uso de éstos podremos seguir utilizando el módulo de call center de la misma forma conservando su funcionalidad original.
Como deben haber notado, el dialer de Elastix antes de generar las llamadas, revisa que haya agentes disponibles para las llamadas a generarse, de ésta forma mediante el comando AgentCallbackLogin nuestros agentes figurarán como agentes disponibles y así, se les generarán llamadas.
Ahora que ya estamos immerss en el tema, el procedimiento a grandes rasgos sería el siguiente:
1º Creamos los agentes en la interfaz de call center.
2º Eliminamos el password de nuestros “agentes” virtuales en el archivo etc/asterisk/agents.conf , y quedará algo como ésto:
Prototipo de los Agentes: agent => [Agent ID],[password],[Agent’s Name]
[agents]
Agent => 1001,,Virtual 1
Agent => 1002,,Virtual 2
Agent => 1003,,Virtual 3
Agent => 1004,,Virtual 4
3º Creamos un custom context para “loguear” a los agentes en el archivo extenstions.custom.conf:
El prototipo para el comando AgentCallbackLogin es el siguiente:
AgentCallbackLogin([AgentNo][|Options[|exten[@context]]])
[login-agents]
exten => 1111,1,Answer
exten => 1111,n,NoOp(Logueando Agentes)
exten => 1111,n,AgentCallbackLogin(1001,s,501@from-internal)
exten => 1111,n,AgentCallbackLogin(1002,s,502@from-internal)
exten => 1111,n,AgentCallbackLogin(1003,s,503@from-internal)
exten => 1111,n,AgentCallbackLogin(1004,s,504@from-internal)
exten => 1111,n,NoOp(Todos los agentes estan logueados)
exten => 1111,n,Hangup()
4º Creamos un custom context para capturar las llamadas dirigidas a nuestros agentes virtuales:

[catchcalls]
exten => 501,1, Goto(amessage,s,1)
exten => 502,1, Goto(amessage,s,1)
exten => 503,1, Goto(amessage,s,1)
exten => 504,1, Goto(amessage,s,1)
5º Y finalmente creamos el custom context que reproducirá el mensaje y que de ser necesario, enviará los datos obtenidos de la llamada a un script para su procesamiento:
[amessage]
exten => s,1,Answer
exten => s,2,Wait,2
exten => s,n,Read(tmp,custom/mensaje1,1||1|5)
exten => s,n,Set(RESP=${tmp})
exten => s,n,Playback(thank-you-cooperation)
exten => s,n,Hangup()
exten => h,1,DeadAGI(llamadas.php,${RESP})
Como deben haberlo notado, en éste caso, el mensaje fue reproducido y el dato fue obtenido mediante el comando “read“, en el caso de no querer obtener un dato, simplemente usaremos el comando playback.
6º Creamos una cola para poner allí nuestros agentes virtuales.
7º Creamos una campaña saliente y empezamos a quemar minutos!

Elastix redundante, método fácil

Este manual describe como armar un cluster con dos elastix para tener redundancia en caso de que el principal falle. La operación nos dará mas disponibilidad del servicio, en condiciones normales si nuestra centralita falla el tiempo que estaremos sin comunicación será el que nos tome copiar las configuraciones en otro servidor, ó si ya lo tenemos listo, el tiempo que sea necesario para encenderlo y conectarlo.

La ventaja del sistema que se plantea en este manual es que las configuraciones se respaldan por red cada minuto, así en caso de fallas tendremos en un par de minutos un sistema casi idéntico al que estaba en producción antes del fallo.

El servidor Maestro copiará cada minuto sus archivos de configuración hacia el Esclavo.

El servidor Esclavo verificará cada minuto si el Maestro esta en línea;

Cuando el servidor Maestro falle o este fuera de línea, el servidor Esclavo asumirá su rol;
Cuando el servidor Maestro regrese, el servidor Esclavo copiará los archivos de configuración hacia el Maestro.

Los teléfonos y dispositivos deberán utilizar la IP flotante para registrarse.
Requerimientos:
- instalar nmap, arping y rsync
- 2 servidores con dos elastix con la configuración básica;
- 3 direcciones IP del mismo segmento de red (una para cada servidor y una virtual flotante);
- configurar una “llave compartida” para que el acceso ssh entre servidores no requiera contraseña;
- el script flisp1405.sh ( http://www.thiscoolsite.com/?p=6 );

Instrucciones:
Instalamos las dependencias:

yum install nmap rsync
Asignamos una dirección IP a cada servidor, por ejemplo:
Maestro 192.168.0.1
Esclavo 192.168.0.2

Descargarmos el script flip1405.sh (ligeramente modificado para trabajar con elastix) en cada servidor:
cd /usr/bin
wget http://www.razametal.org/asterisk/flip1405.sh

La versión original de este script se puede encontrar en:
http://www.thiscoolsite.com/scripts/flip1405.sh

Damos permisos de ejecución:
chmod a+x /usr/bin/flip1405.sh
Editamos el script flip1405.sh en Maestro para que contenga nuestra configuración IP:
# If set to “1″ this is the Master server.
# If commented out, or set to anything else, this will act as if it is a slave
MASTER=”1″
# The Master and Slave IP Addresses for Replication / Testing
MASTERIP=”192.168.0.2″
SLAVEIP=”192.168.0.3″
# The IP address that will float between Master and Slave
FLOAT=”192.168.0.1″
# The device on which the floating interface exists
DEVICE=”eth0″
# The specific interface alias on the device
IFACE=”$DEVICE:1″
Editamos el script flip1405.sh en Esclavo :
# If set to “1″ this is the Master server.
# If commented out, or set to anything else, this will act as if it is a slave
MASTER=”NO”
# The Master and Slave IP Addresses for Replication / Testing
MASTERIP=”192.168.0.2″
SLAVEIP=”192.168.0.3″
# The IP address that will float between Master and Slave
FLOAT=”192.168.0.1″
# The device on which the floating interface exists
DEVICE=”eth0″
# The specific interface alias on the device
IFACE=”$DEVICE:1″

Configuramos las llaves ssh para que el acceso entre servidores no requiera de contraseña.
En el Maestro ejecutamos como root:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub|ssh 192.168.0.3 tee -a ~/.ssh/authorized_keys
ssh 192.168.0.3 ssh-keygen -t rsa
ssh 192.168.0.3 cat ~/.ssh/id_rsa.pub |tee -a ~/.ssh/authorized_keys

Después de generadas y copiadas las llaves será posible ingresar via ssh y sin que se solicite contraseña desde Maestro a Esclavo y viceversa.
Programamos la ejecución del script a cada minuto en ambos servidores, este copiará los archivos modificados desde el Maestro hacia el Esclavo, verificará la disponibilidad del Maestro, y se encargará de hacer que el servidor de backup asuma el rol de Maestro cuando sea necesario:
crontab -e
*/1 * * * *  /usr/bin/flip1405.sh > /var/log/flip1405.log 2>&1

Creamos el archivo de log para mirar lo que el script esta haciendo:
touch /var/log/flip1505.log

Finalmente, modificamos asterisk para que el canal SIP escuche en la IP flotante, editamos en el Maestro
/etc/asteris/sip_general_custom.conf:
bindaddr=192.168.0.1
bindport=5060

Si todo anda bien, cada minuto Maestro copiará su configuración a Esclavo. Cuando Maestro este fuera de línea, Esclavo asumirá su rol y dejará de hacerlo cuando el Maestro este en línea nuevamente.

Esta es una manera rápida y sencilla de lograr redundancia, existen otras recetas que en algún momento intente pero me parecieron muy complicadas de implementar.

martes, 9 de noviembre de 2010

“Backdoor” en FreePBX

Saludos, esta info la copie de los foros de Elastix.org, es muy importante, lean.
Desde ya algunas semanas atrás quería publicar en este blog este artículo de mi estimado amigo Fernando Villares, como verán al leerlo es una falla grave de seguridad que expone los equipos a un ataque, es como cerrar la puerta con seguro pero dejar la llave pegada por fuera,
A continuación les dejo el articulo intacto tal como Fernando lo publico en el Blog de Sinologic.
Durante el movidísimo día de ayer en las listas de Elastix(r) recibimos un dato desconcertante que nos alarmó sobremanera. Ante todo….FreePBX para quien no conoce, es un front end que conecta las configuraciones que creamos en una interfaz web, que son guardadas en una base de datos de MySQL y luego transformadas en los archivos de texto que asterisk utiliza para tomar sus configuraciones.

Ahora la cuestión es la siguiente, en todas las versiones de FreePBX, utilizamos normalmente el user admin o similar para crear, modificar o ver datos del mismo sistema de front end de Asterisk(r)….pero resulta ser que si tenemos en FreePBX definido el método de autenticación de ingreso al sistema como database…(o sea que no toma los users autorizados de los users del server web apache, sino que los toma de una lista de users en las bases de datos MySQL) el usuario y clave definidos para acceder a las bases de datos también pueden acceder a la interfaz Web…y con permisos de ADMIN!!!!!!
Esto no es tan grave podrán pensan muchas personas…porque si puse un user x y una clave secreta solo para mi sistema, si el atacante no sabe la clave no podría acceder ….y aquí viene lo interesante….las distros que traen FreePBX integrado desde 0, como AsteriskNow(r), Trixbox CE,Elastix(r), PBX in A flash, etc….todas traen un user por default de su db, normalmente llamado asteriskuser con permisos solo en el localhost y claves conocidas y ESTÁNDARES!!!!!
Por lo tanto todos esos sistemas son pasibles de que cualquier atacante solo con saber que en X ip hay un sistema de este tipo instalado, simplemente intentando loguearse via web en http://mi-ip/admin o sea al FreePBX con user asteriskuser y la clave por default de esa distro, ya tendría acceso completo a nuestra interfaz de configuración, pudiendo desde ese momemto crear extensiones y usar ilegalmente nuestro sistema, eliminar configuraciones, etc, etc….
Ahora, antes de hacer esta noticia de público conocimiento en la comunidad, en el proyecto Elastix(r) inmediatamente nos pusimos manos a la obra y gracias a los excelentes desarrolladores de Palosanto, en unas pocas horas ya teníamos el paquete RPM de FreePBX corregido listo para download en los repositorios de nuestra distro…
Formas de corregir esta gravísima falla:
En Elastix(r), ejecutar el comando yum upgrade freePBX* o yum upgrade -y
En las demás distros,
1) desde mysql cambiar la clave del usuario asteriskuser por una nueva, para eso podemos usar webmin, phpMyadmin o mysql por consola….
2) Ejecutar ésta sentencia en las carpetas /etc y /var/www/ para reemplazar las líneas de código que apuntan a dicha clave
grep -rlZ ‘clave-a-cambiar’ /etc/ | xargs -r0 perl -pi -e ‘s/clave-a-cambiar/nuevaclave/g’
Ejecutar service mysqld restart y service httpd restart para que el sistema acepte los nuevos cambios y probar que nuestro usuario y clave por default de la db no queden mas abiertos tratando de entrar nuevamente con ellos….
También ya que estamos no es mala idea ver si tenemos por default el usuario admin de la interfaz Asterisk Recording Interface que también trae el FreePBX…
Como lo cambiamos…
vi /etc/amportal.conf y agregamos al final del archivo estas 2 líneas….
ARI_ADMIN_USERNAME=admin
ARI_ADMIN_PASSWORD=mi-nueva-clave
Luego restarteamos con:
amportal restart
Con esto ya tenemos esta grave vulnerabilidad solucionada….
Recalco nuevamente la necesidad y la importancia de la seguridad física y lógica de las centrales IP publicadas en Internet y la importancia del acceso seguro a las mismas….ya sea por VPN´s de cualquier tipo, eliminación de accesos web para usuarios de la WAN, etc, etc…
Saludos a todos, espero que esta información les sea de utilidad y agradezco a toda la gente que brindó información y soluciones durante todo el día en los foros de Elastix.

Comunicación entre dos localidades remotas con Elastix + IAX2

Supongamos que tenemos dos localidades y en cada una un Asterisk. Podemos interconectar estas a través de Internet con este sencillo procedimiento.
Es el mas facil de todos, tiene la debilidad de no ser muy seguro, pero con encriptacion aes128 y una red vpn se solventa parte del problema
Voy a llamar al servidor de la Localidad A como ServidorA y al de la Localidad B ServidorB.
De igual manera, voy a asumir el siguiente esquema de extensiones:
Servidor          IP            Extensiones
ServidorA         192.168.0.1   2001 a 2099
ServidorB         192.168.1.1   3001 a 3099
Creamos una nueva troncal IAX2 desde el menú PBX / Troncales:
En ServidorA:
TRUNK NAME:  servidorb
host=192.168.1.1
encryption=aes128
auth=md5
type=friend
qualify=yes
En ServidorB:
TRUNK NAME: servidora
host=192.168.0.1
encryption=aes128
auth=md5
type=friend
qualify=yes
Creamos las rutas salientes en ServidorA:

Route Name: LocalidadB
Dial Patterns: 3XXX
Trunk Sequence: IAX2/servidorb
Creamos las rutas salientes en ServidorB:

Route Name: LocalidadA
Dial Patterns: 2XXX
Trunk Sequence: IAX2/servidora
Ahora podemos llamar desde LocalidadA hacia LocalidadB y viceversa :)
Si queremos ahorrar ancho de banda se pueden agregar estas dos líneas en la configuración de cada troncal estos parámetros para permitir el uso de codecs de bajo consumo de ancho de banda:
disallow=all
allow=gsm&ilbc

El otro caso es que ambos rangos de extensiones en los dos servidores sean iguales o se solapen parcialmente. Al ser iguales en partes cuando marcamos la extension 3501 en el servidorA el no sabra si enrutar la llamada a la extension 3501 del servidorA o a la del servidorB. Para evitar esto se usa un prefijo que le dira a cada servidor hacia donde dirigir la llamada, solo añadimos en las rutas salientes el prefijo a usar, de esta manera:
Para ServidorA:

Route Name: LocalidadB
Dial Patterns: 9 | 3XXX
Trunk Sequence: IAX2/servidorb
Para ServidorB:

Route Name: LocalidadA
Dial Patterns: 9 | 2XXX
Trunk Sequence: IAX2/servidora

Como podran ver yo use el prefijo 9, uds pueden usar cualquiera. Espero les sirva de ayuda.

VoIP: Una Sopa de Protocolos

Hay muchos protocolos involucrados en la transmisión de voz sobre IP. Ya de por sí hay protocolos de red involucrados como el propio protocolo IP y otros protocolos de transporte como TCP o UDP. Encima de ellos se colocan los protocolos de señalización de voz y como si esto fuera poco existen además muchas opciones de protocolos de señalización disponibles lo que puede hacer que todo suene un poco confuso al principio.

            Para simplificar las cosas podríamos clasificar a los protocolos utilizados en la VoIP en tres grupos.

Protocolos de señalización

            Los protocolos de señalización en VoIP cumplen funciones similares a sus homólogos en la telefonía tradicional, es decir tareas de establecimiento de sesión, control del progreso de la llamada, entre otras. Se encuentran en la capa 5 del modelo OSI, es decir en la capa de Sesión.

Existen algunos protocolos de señalización, que han sido desarrollados por diferentes fabricantes u organismos como la ITU o el IETF, y que se encuentran soportados por Asterisk. Algunos son:
• SIP
• IAX
• H.323
• MGCP
• SCCP
Entre estos los más populares en el ámbito de Asterisk son SIP e IAX.

Protocolos de transporte de voz

            No se debe confundir aquí con protocolos de transporte de bajo nivel como TCP y UDP. Nos referimos aquí al protocolo que transporta la voz propiamente dicha o lo que comúnmente se denomina carga útil. Este protocolo se llama RTP (Real-time Transport Protocol) y función es simple: transportar la voz con el menor retraso posible. Este protocolo entra a funcionar una vez que el protocolo de señalización ha establecido la llamada entre los participantes.

Protocolos de plataforma IP

            En esta categoría agruparemos a los protocolos básicos en redes IP y que forman la base sobre la cual se añaden los protocolos de voz anteriores. En estos protocolos podríamos mencionar a Ethernet, IP, TCP y UDP.

domingo, 7 de noviembre de 2010

ElastixWorld 2010

PaloSanto Solutions tiene el pacer de anunciar la primera edición de ElastixWorld, la cual se desarrollará el próximo 18 y 19 de Noviembre, en Quito - Ecuador, a la cual están invitados!! El objetivo principal de este evento es el de tener un espacio para compartir con miembros de la comunidad, productores de hardware, resellers y clientes sobre Elastix, sobre las capacidades del producto, desarrollo futuro, experiencias de implementadores y múltiples temas relacionados.

El evento será desarrollado en torno a dos días de conferencias magistrales y matizado con actividades y presentación de nuevos productos y soluciones. Este evento se organizará cada año en distintas sedes alrededor del mundo, este año se ha escogido Ecuador, la casa de Elastix, como punto de partida para este ambicioso proyecto.

Ficha Técnica

Nombre del evento:

elastixWorld

Fecha de Inicio:
17 de Noviembre de 2010
Hora: 14h00

Fecha de Finalización:
19 de Noviembre de 2010
Hora: 16h00

Sede 2010:
Hotel Sheraton Quito
Quito
Ecuador
Sudamérica

Organizador:

PaloSanto Solutions

Precio:

USD$35 por día.

Tipo de evento

Evento para la presentación de conferencias y casos de éxito. El evento está dedicados principalmente al mercado de la comunicación IP y está relacionado principalmente con el proyecto Elastix. Se han integrado al evento partners tecnológicos del proyecto que formarán parte del los ciclos de conferencia.

Número de asistentes esperados

600 asistentes cada día

sábado, 6 de noviembre de 2010

Guía de referencia para instalaciones de Elastix® IP PBX Versión 1.5.2-2 y E1 MFC/R2

MFC/R2 es un protocolo de señalización dentro de banda por cada canal (CAS channel associated signalling) sobre tramas digitales E1 usado principalmente en Latinoamérica (quizás el más usado todavía hoy). El cual es soportado perfectamente en Elastix® debido a la inclusión de la librería OpenR2 la cual implementa señalización MFC/R2 sobre líneas E1 usando la interfaz de telefonía DAHDI. El autor de dicha librería y los parches de Asterisk® correspondientes es Moisés Silva quien actualmente trabaja para la firma canadiense Sangoma® y a quien personalmente agradezco por todo su trabajo y ayuda.

¿Qué es MFC/R2?

MFC/R2 es una señalización telefónica usada ampliamente en Argentina, Colombia, Venezuela, México, Brasil y otros países de Latinoamérica y Asia con su origen en los inicios de la telefonía digital allá por fines de la década del 70.

Las iniciales de MFC/R2 provienen de Multi-Frequency Compelled R2 (R2 dirigido por multifrecuencia). Comparado con protocolos de señalización más recientes como el ISDN PRI/BRI o SS7, R2 ofrece funcionalidades bastante limitadas. La señalización solo se usa para establecer la llamada o para finalizarla. A su vez algunas de las variantes MFC/R2 envían pulsos de cobro mientras dura la llamada, aunque raramente son usados.

Existen variantes analógicas y digitales de MFC/R2, pero cualquier referencia a MFC/R2 o R2 en éste documento solo se basa en la versión digital usada sobre enlaces E1.

Un dato curioso sobre este protocolo es que a pesar de estar definido y estandarizado por la ITU (International Telecommunication Union), cada país sigue su propia variante… L

¿Cómo funciona MFC/R2?

MFC/R2 es un protocolo de señalización peer-to-peer, lo cual significa que solo hay dos participantes involucrados sobre un enlace E1 R2 y ambos extremos se comportan del mismo modo, muy distinto con respecto a ISDN PRI donde se tiene la un extremo servidor “NET” y otro cliente “CPE” del enlace.

Como se nombró anteriormente, MFC/R2 significa Multi-Frecuency Compelled R2 y dicho nombre describe la naturaleza de ésta señalización, donde se tienen dos tipos de señales (valga la redundancia):

· Señales de Línea. Son usadas para monitorear el estado de la llamada y las señales MF son usadas para transmitir información de la misma durante el establecimiento de la misma (DNIS, ANI, Calling Party Category). Las señales de línea se envían utilizando señales CAS que viajan usando el canal 16 del enlace E1. Todas las señales CAS de cada canal del E1 son multiplexadas en éste canal. Cada 2 milisegundos cada extremo del enlace actualiza sus 4 bits de señal CAS mas conocidos como los infames bits ABCD.

MFC/R2 usa 2 de esos 4 bits para enviar las siguientes señales:

Idle, Block, Seize, Seize Ack, Clear Back, Forced Release, Clear Forward, Answer.

Al usarse sólo 2 bits para 7 posibles señales es imposible no repetir algún patrón, es por eso que algunas de las 7 señales tienen el mismo patrón de bits, pero esto no representa un problema considerando que, por ejemplo, no se puede ir del estado Idle al Forced Release, por lo tanto, aunque el patrón de bits para Forced Release y Seize son los mismos, el protocolo conoce lo que lo que el otro extremo del enlace quiere decir de forma inequívoca.

La razón de usar sólo 2 bits teniendo 4 disponibles es histórica y proviene de la época donde la versión analógica de MFC/R2 fue portada para trabajar en el ese entonces novedoso mundo digital.

La siguiente tabla describe los patrones de bits usados en la señalización R2 mediante los bits ABCD de CAS.


· Las señales de direccionamiento, por el otro lado, son 15 diferentes señales MF, que son tonos audibles compuestos por 2 frecuencias que viajan usando el canal de audio, y es por eso que el analizador/detector de audio es el componente quizás mas importante en el paquete R2.

La librería OpenR2 por defecto usa su propio analizador/detector de MF sobre R2, el cual fue tomado prestado de la librería SpanDSP de Steve Underwood. A diferencia de su antecesor Unicall no es necesario instalar SpanDSP ni otras librerías para usar OpenR2, ya que el detector se encuentra “embebido” dentro de la misma de forma nativa.

La ITU define qué frecuencias pueden ser mezcladas para componer los tonos MF y asigna los significados de cada uno de ellos. Sin embargo tal como fue comentado anteriormente, algunos países asignan diferentes significados a estos tonos MF.

Dichos tonos MF son identificados en la librería OpenR2 usando los números del 1 al 0 (0 siendo 10) y letras de la B a la F (la A no es usada, en su lugar se usa 0). Si nosotros habilitáramos el debugging del módulo de OpenR2 veríamos los detalles de qué tonos son enviados y recibidos durante el transcurso de cada llamada.

Los tonos multifrecuencia (MF) son usados para transmitir los ANI (Automatic Number Identification, mas conocido como Identificador de Llamada), los DNIS (Dialed Number Identification Service, que es, el número marcado o número destino) y las Categorías de Marcado.

Tan pronto como la llamada es aceptada o rechazada, el analizador/detector de MF se deja de usar y no se intercambiarán más señales MF, recién ahí el canal de audio puede ser usada para transmitir la llamada de voz.

Configuración de E1 R2 en Elastix 1.5.2-2 o superior.

· Para tarjetas que usan el driver DAHDI de forma nativa:

o Primero nuestra tarjeta de trama digital debe usar el estándar E1 por lo cual debemos verificar que su correspondiente jumper o configuración este seteada en dicho estándar

o En caso de usar múltiples tarjetas E1 verificar que los controles de identificación de tarjetas estén correctamente seteados (1er tarjeta en 0, 2da en 1, etc.)

o Verificar que la tarjeta es correctamente reconocida en Elastix® usando el comando # lspci desde la consola.

o Utilizar la herramienta # dahdi_genconf para generar una config básica estándar (la vamos a usar para no tener que contar a mano los canales) si tenemos varias tarjetas o varias tramas E1.

o Con la información de nuestro proveedor de telefonía en la mano vamos a proceder a configurar la trama digital a nivel del driver DAHDI, este es un ejemplo típico de 1 trama simple E1 para Argentina:

§ Archivo: /etc/dahdi/system.conf

span=1,1,0,cas,hdb3 ;reloj master, señalización CAS, Coding hdb3

cas=1-15,17-31:1101 ; Canales CAS del 1 al 15 y 17 al 31 bits en block

dchan=16

echocanceller=mg2,1-15,17-31 ;Cancelación eco MG2 en los canales

loadzone=ar

defaultzone=ar ; zonas de tonos argentinos del driver DAHDI

§ Archivo de Asterisk para configurar los canales mfcr2, chan_dahdi.conf, debajo de las configs por defecto del archivo agregamos:

resetinterval=never

context=from-pstn

group=0

echocancel=yes

signalling=mfcr2

mfcr2_variant=ar ; variante de r2 de nuestro país

mfcr2_get_ani_first=no

mfcr2_max_ani=10 ;cantidad de dígitos del caller id a recibir

mfcr2_max_dnis=4; cantidad de dígitos de nuestros DID´s

mfcr2_category=national_subscriber

mfcr2_mfback_timeout=-1

mfcr2_metering_pulse_timeout=-1

channel =>1-15,17-31 ; canales a configurar igual que en system.conf

o Luego restarteamos nuestros drivers Dahdi y el servicio de Asterisk® y verificamos si nuestra trama está en funcionamiento (imágenes de muestra de un sistema real)

§ # service dahdi restart

§ # amportal restart

o Imagen de la herramienta dahdi_tool con trama E1 R2 corriendo correctamente:



o Imagen de la salida del comando mfcr2 show channels de asterisk demostrando que los canales están funcionando:



o Los canales ya pueden ser usados desde el FreePbx y Elastix® tal como los veniamos usando con otras tarjetas. En este caso serían el grupo Dahdi/g0.

· Para tarjetas Sangoma®:

o Parar los servicios de Asterisk®

# amportal stop

o Parar los drivers Dahdi

# service dahdi stop

o Parar el servicio wanrouter de Sangoma

# service wanrouter stop

o Ejecutar el comando # wancfg_dahdi y seguir las instrucciones del mismo, cuando llegue a selección de estándares seleccionar E1, ISDN pri con estándar EuroISDN, elegir que grabe los cambios sin restartear el dahdi ni asterisk.

o Al terminar este paso editar el archivo /etc/wanpipe/wanpipe1.cfg buscar la línea donde dice TE_SIG_MODE = CCS y reemplazarlo por CAS, grabar el archivo y luego retomar la config exactamente igual que como está descripto en el apartado de Dahdi nativo arriba descripto.

o Al finalizar de editar los archivos /etc/dahdi/system.conf y /etc/asterisk/ chan_dahdi.conf debemos levantar de nuevo los servicios en este orden:

§ # service wanrouter start

§ # service dahdi start

§ # amportal start

o Por último verificamos que la trama haya levantado igual que en el ejemplo anterior con el comando de asterisk cli> mfcr2 show channels

· En el caso de varias tramas digitales solo cambian los números de canales y este ejemplo es totalmente válido para 1 a n tramas.

· Es posible en 1 misma tarjeta o en 1 mismo sistema mezclar diferentes spans de trama y cada uno con su propio protocolo ya sean R2 o ISDN primario.

Nuevamente espero que este humilde aporte los ayude y agradezco a Moises Silva, a Alexandre Alencar y a Juan Carlos Huerta por sus aportes en la realización de este documento y por favor si desean soporte, mas info o consultas específicas les solicitamos hacerlas a través del soporte oficial pago de de nuestra empresa y de Elastix® para seguir apoyando el crecimiento del Software Libre.

Recomendaciones de Seguridad en Elastix

Muchos usuarios de Elastix no toman en cuenta que después de haber instalado y configurado su central, y dejar esta en funcionamiento aún queda mucho trabajo por hacer, sobre todo en el lado en cuanto a seguridad se refiere.

Existe mucha gente y empresas alrededor del mundo que día a día buscan romper servidores VOIP, esto con el simple objetivo de enrutar tráfico a través de estos servidores hacia destinos de costos muy altos, de esta forma estas personas pueden comercializar minutos que normalmente tienen un costo alto a una fracción del costo.

En tan solo 1 hora se puede llegar a enviar hasta casi 2000 minutos a través de un enlace E1 con 30 canales activos, lo que en números redondos puede llegar a costar mas de 200 USD tomando en cuenta que se enrute tráfico a un destino de bajo precio, pero a otros podría llegar a costar hasta 2500 USD.

Estas matemáticas simples nos alertan de la importancia de implementar políticas de seguridad, a continuación hablaremos de algunas de ellas que deben de ser básicas en nuestras instalaciones y otras que de ser posible no se deben de dejar a un lado.

#1- Utilice contraseñas fuertes.

Después de recientes ataques a Gmail y otros servidores de correo se descubrió que la contraseña mas utilizada por los usuarios increíblemente era “123456″ y por desgracia esta es la misma que muchos usuarios de Elastix utilizan, haciendo así 100% vulnerable su equipo.

Se recomienda utilizar combinación de caracteres especiales (#,,%,&,/,@, etc.), números y mayúsculas y minúsculas además de evitar utilizar secuencias de números o palabras que se puedan encontrar en el diccionario.

No solo la contraseña de root y usuario Web deben tener estas características, también las contraseñas de MySQL, FreePBX, FOP, y de las extensiones sobre todo.

#2- Cambie las contraseñas de Default.

Hay que tomar en cuenta que existen mas de 500,000 descargas de Elastix, por lo tanto existen al menos 500,000 usuarios que conocen todas las contraseñas que tiene este software por defecto, sin tomar en cuenta los que realizan la búsqueda “Elastix default passwords” en Google.

NUNCA utilice como contraseña de las extensiones el mismo número de extensión, esto facilita las cosas hasta para el menos experimentado de los hackers.

Recuerda cambiar al menos tus contraseñas del FOP, FreePBX , Web y MySQL.

#3- Restringa el acceso a sus Equipos.

Si existe la posibilidad bloque el acceso a sus equipos desde direcciones IPS que no pertenezcan a las de su país.

Utilice IPTables para restringir el acceso a ciertos puertos desde ciertas direcciones

No deje abierto el acceso SSH y Web para cualquiera, una vez que se rompe alguna de estas contraseñas el intruso puede hacer cualquier cosa con nuestro equipo.

#4- Cambie sus puertos de Acceso.

Para un atacante será mas fácil su trabajo si sabe que puertos debe de atacar, así que si cambiamos los puertos comunes haremos que por lo menos su trabajo sea un poco más complicado, dándonos tiempo detectar estos ataques en nuestros logs . Al menos debemos cambiar el puerto de nuestro servidor SSH y de las extensiones remotas.

Este cambio lo podemos hacer en nuestro servidor o con algunos routers que nos permiten realizar traducción de puertos, de modo que al intentar conectar a nuestro equipo por el puerto 786 por ejemplo , realiza la traducción al puerto 22, pero si intentamos conectarnos al puerto 22 directamente este se encuentra bloqueado

#5- Utilice software para el escaneo de logs.

Fail2Ban es un software que escanea los logs de nuestros equipos en búsqueda de repetidos intentos de autenticación fallida y bloqueando de forma automática dicha IP, de forma tal que la lp del atacante será bloqueada después de cierto número de intentos no permitiéndole así adivinar o descifrar nuestras contraseñas.

#6- Utilice VPN’s para la conexión a sus servidores.

El uso de túneles VPN tanto para el acceso de administración de nuestros equipos como para la conexión de extensiones remotas nos garantiza no solo que no cualquier persona podrá alcanzar nuestros equipos, sino que además la información viajara encriptada de forma tal que será difícil de detectar.

Nuestro equipo Elastix puede ser configurado como servidor VPN en pocos pasos y en tan solo 10 minutos, en futuras publicaciones hablaremos de como realizar esto.

#6- Ajuste la configuración de sus archivos de configuración SIP.

Muchas veces creemos que los archivos de configuración vienen listos y 100% preparados y no requieren de mayor configuración, pero esto no es así, existen ciertos parámetros de seguridad que debemos de especificar y que no nos tomará mas de 5 minutos en hacerlo.

Cuando un usuario se autentica incorrectamente recibe un mensaje de reject pero dentro de este mensaje se encuentra la información correcta de registro, así que si se logra descifrar tenemos las credenciales correctas para registrarnos y comenzar a realizar llamadas, es por ello que es importante cambiar alwaysauthreject=no a alwaysauthreject=yes.

Limite el número de llamadas simultaneas por usuario al mínimo posible. En el peor de los casos en que logren descifrar las credenciales de algún usuario el daño será mínimo.

#7- Utilice un firewall.

Muchos se quejan del alto costo de un appliance especial para el bloqueo de intrusos y ataques, pero pocos toman en cuenta que es un inversión que nos puede ahorrar varios cientos de dólares sino es que miles. Algunas veces hay que hacer un poco mas de la inversión planeada y un firewall es una de ellas, estos appliances dedicados nos pueden salvar y mantener lejos de la mira de los hackers, claro , hay que recordar que no basta con conectar los equipos a la red y energizarlos, hay que configurarlos.

#7- No acepte trafico anónimo.

Si nuestro servidor tiene acceso público jamás debemos de activar la opción de aceptar llamadas anónimas, esto permitiría que cualquiera enviar tráfico a nuestro servidor sin la necesidad de autenticación.

Por último debemos de recordar que el registro en logs existe por algo, no son un adorno, es importante revisar periódicamente estos archivos en búsqueda de Warnings y Errores que nos indiquen que hemos recibido ataques a nuestros equipos, de igual forma debemos mantenernos informados y pendientes de las listas de desarrollo y usuarios ya que en ellas se reportan Bugs de seguridad y además la solución a los mismos.

Links Recomendados:

http://blogs.digium.com/2009/03/28/sip-security/

http://nerdvittles.com/?p=580

http://csrc.nist.gov/publications/nistpubs/800-58/SP800-58-final.pdf

www.fail2ban.org

Bienvenidos a los Blogs de VoIP En La Red

En este espacio usted encontrará información sobre todo lo relacionado con VoIP, documentación técnica y todo lo relacionado con esta tecnología. La idea es centralizar un poco la info de tantos sitios y tenerlo a la mano. Ya sea de Asterisk o cualquier Distro que se encuentren en la Red. Así como también sobre eventos que se avecinen.

Todos están invitados a participar en este blog, si tienes algún truco o destreza especial que desea compartir con la comunidad, le invitamos a escribir en nuestro blog. Para esto enviar un correo a luislagardera[en]gmail.com. Todos los artículo deberán estar bajo la licencia GNU/FDL

Para empezar tenemos el primero artículo escrito sobre consideracion con la seguridad en Elastix. Este artículo es escrito por Augusto Sepulveda de México.

Esperamos en los próximos días tener más artículos sobre varios tópicos relacionados con VoIP.