martes, 27 de mayo de 2014

Análisis del tráfico VoIP con Wireshark

Introducción

Una vez que el sistema PBX de VoIP está implantando, es hora de observar el comportamiento/rendimiento de los elementos involucrados en la comunicación: centralita/proveedor de VoIP, teléfonos IP y softphones.

Llevaremos a cabo parte de esta tarea empleando la aplicación Wireshark. Su función principal es la captura de tráfico generado entre aplicaciones/dispositivos que utilizan alguno de los protocolos de comunicación estudiados, dentro de una red de datos.

La captura de paquetes VoIP permitirá la extracción de conversaciones contenidas en este tipo de conexiones.

Para lograr nuestro objetivo, utilizaremos un fichero de captura (extensión .pcap) que contenga un fragmento de la comunicación entre dos dispositivos VoIP basada en los siguientes protocolos:
  • El protocolo de señalización SIP: Cuya función será la de establecer, coordinar y concluir la comunicación entre los usuarios. Se basará, a su vez, en el protocolo de descripción de sesión (SDP) orientado a sesiones de comunicación multimedia (ancho de banda y códecs).
  • El protocolo de transporte RTP: Encargado de la transferencia del audio. 

Conocimientos previos

Propiedades del protocolo SIP

  • Maneja identificadores similares a las etiquetas del lenguaje de marcado HTML. Por ejemplo, la referencia a un abonado tiene la forma abonado@dominio.
  • Los componentes del protocolo:
    • Agente de Usuario (cliente/servidor) y Agente de redirecciones
    • Servidor Proxy/de registro/de localización
  • Tipos de mensajes:
    • INVITE: Establece una sesión entre agentes de usuario. Contiene información sobre los usuarios y el tipo de datos transferido (audio / vídeo).
    • ACK: Confirma el establecimiento de una sesión.
    • OPTION: Solicitud de información de capacidades.
    • BYE: Mensaje de finalización de la conexión.
    • CANCEL: Elimina una petición pendiente sin influir en la sesión actual.
    • REGISTER: Registra la dirección SIP de un usuario.
  • Códigos de respuesta:
    • 1xx: Mensaje de información.
    • 2xx: Respuesta positiva. Se recibió la solicitud y ha sido aceptada.
    • 3xx: Respuesta postergada. Son necesarios otras tareas antes de determinar si es posible establecer la llamada.
    • 4xx: Error en la petición.
    • 5xx: Fuera de servicio temporal.
    • 6xx: No aceptada la llamada.

Propiedades del protocolo RTP

Tras el establecimiento de la conexión, ahora le toca el turno a la transmisión del audio (voz). Para ello se utiliza el protocolo de transporte en tiempo real (RTP). Encargado de la transferencia y recepción de los datos en el orden correcto. También dispone de información acerca de los códecs de audio/vídeo.

Captura de paquetes VoIP 

Después de descargar e instalar la aplicación, iniciamos Wireshark desde el grupo de programas Wireshark. Accediendo al menú [capture]>[interfaces] veremos la lista adaptadores de red encontrados por el programa. Seleccionaremos la interfaz sobre la que deseamos  capturar el tráfico.


Y a continuación pulsamos en el botón [options] de la interfaz y habilitamos la resolución de nombres de red y asegurándonos que la captura de paquetes en modo promiscuo está habilitada. Al final iniciamos la captura haciendo clic sobre el botón [Start].


Una vez concluida la recogida de datos, detenemos la captura pulsando en el botón [Stop capture] en la barra de herramientas de Wireshark.


Y salvamos el fichero eligiendo [Save] o [Save as] en el menú [File] y asegurándonos que tenemos activa la opción “All packets” y el tipo “Wireshark/tcpdump/... -libpcap (*.cap,*..pcap)”. 


Análisis de paquetes VoIP

Con el fichero .pcap generado en el apartado anterior disponemos de toda la información necesaria para estudiar la sesión VoIP establecida entre llamante y llamado.

Solicitud de establecimiento de sesión: A través del protocolo SIP se realiza una petición de conexión (request) con la orden INVITE desde el teléfono llamante sobre el teléfono IP llamado:


Estudiando las diferentes partes de este mensaje obtendremos la siguiente información:

    • Cabecera (header): Identifica los agentes usuario origen y destino así como la descripción de la sesión:
      • Via: Establece las propiedades de la ruta de comunicación (protocolo: UDP, dirección IP y puerto destino entre otros).
      • From: Llamante.
      • To: Llamado.
      • Call-ID: Identificador de la sesión.
      • C-Seq: Nº de secuencia.
    • Cuerpo (Body): Ofrece información en detalle de las propiedades de transmisión del audio en base al protocolo de SDP.
  • Sesión aceptada:

  • Finalización de sesión:

De manera simplificada, la secuencia de la sesión sigue un patrón similar al de la figura siguiente:

Wireshark también ofrece la posibilidad de visualizar esta secuencia (flujo –flow-) dentro del apartado de análisis gráfico [Statistics] >[Flow chart] > (*) Displayed packets:


Reproducción de la conversación a partir del fichero .pcap 

Dentro del menú de telefonía [Telephony] de la pantalla principal pulsamos sobre la opción [VoIP calls] y observamos en la pantalla de la aplicación los paquetes obtenidos que forman parte de la comunicación IP a analizar.

La transmisión de la voz está asociada al protocolo RTP. Es posible conocer las características de la transmisión de audio filtrando el contenido del archivo .pcap con la palabra clave “rtp” tal y como muestra la figura anterior.

El campo donde se detalla las propiedades del códec utilizado es “tipo de carga útil” (Payload type): en el ejemplo mostrado tenemos: ITU-T G.711 PCMA (8), es decir usa el códec de audio G.711, estandarizado por ITU con una frecuencia de muestreo 8KHz y el algoritmo PCMA para compresión/descompresión.

Para conocer la duración de la conversación VoIP así como la referencia a los participantes y el protocolo utilizado simplemente debemos acceder a la opción [Telephony]>[VoIP Calls]:


Al seleccionar uno de las llamadas completadas, podremos escuchar su contenido pulsando sobre el botón [Player].


<>

miércoles, 21 de mayo de 2014

Servicio FTP en la gestión de copias de seguridad en PBXs

INTRODUCCIÓN

FTP son las siglas de “Protocolo de transferencia de ficheros”  (File Transfer Protocol) encargado de gestionar la subida/bajada de archivos hacia/desde un equipo remoto a un ordenador que ofrezca esta funcionalidad.


Según el modo de interacción con la aplicación cliente, el usuario encontrará dos alternativas disponibles:


  • Cliente FTP de consola: Todas las acciones son ejecutadas por medios de comandos escritos en una consola. El Sistema Operativo suele incluir una aplicación cliente para la comunicación con un servidor FTP.
  • Cliente FTP con interfaz gráfica: Aplicación más intuitiva en su manejo donde el desplazamiento dentro del árbol de directorios, local y remoto, así como la transferencia de archivos se lleva a cabo desde una ventana manejada por el ratón. Un ejemplo de este tipo de cliente es Filezilla.


El servicio FTP puede realizarse sobre una conexión segura (SSH). En este caso se habla de servicio SFTP y es característico en aquellas comunicaciones donde se busca dificultar la lectura de los datos enviados/recibidos (ficheros, contraseñas, nombres de usuario o identificadores de computadores) por otras personas conectadas a la red.
http://www.lee.org/reading/computers/sshd/sftp.png

Cliente FTP de consola

Aunque existe una gran variedad de aplicaciones destinadas a la comunicación con servidores FTP, el modo más inmediato de acceder a otra máquina para una tarea tan sencilla como subir o bajar un archivo sobre un equipo donde está corriendo el servidor de ficheros consiste en manejar las utilidades del propio SO.


Suponiendo un dispositivo remoto con el servicio FTP activado y el usuario “user” (contraseña: live) dado de alta en él. Si desde un ordenador donde se ejecuta el Sistema Operativo Linux, se escribe la orden:


alumno@ordenador:~$ sftp user@192.168.1.2


Solicitará la contraseña de user


user@192.168.1.2’s password:


Si se añade la contraseña correctamente (live), el indicativo del sistema cambiará informando que “alumno” se encuentra ahora dentro del servidor 192.168.1.2 con el perfil de “user”.


sftp>


Desde este momento podrá interactuar con el servidor a través de los comando reconocidos por el sistema. Es posible recurrir a la ayuda para tener más información:


sftp> help
help
Available commands:
bye                         Quit sftp
cd path                     Change remote directory to 'path'
chgrp grp path              Change group of file 'path' to 'grp'
chmod mode path             Change permissions of file 'path' to 'mode'
chown own path              Change owner of file 'path' to 'own'
df [-hi] [path]             Display statistics for current directory or
                           filesystem containing 'path'
exit                        Quit sftp
get [-Ppr] remote [local]   Download file
help                        Display this help text
lcd path                    Change local directory to 'path'
lls [ls-options [path]]     Display local directory listing
lmkdir path                 Create local directory
ln [-s] oldpath newpath     Link remote file (-s for symlink)
lpwd                        Print local working directory
ls [-1afhlnrSt] [path]      Display remote directory listing
lumask umask                Set local umask to 'umask'
mkdir path                  Create remote directory
progress                    Toggle display of progress meter
put [-Ppr] local [remote]   Upload file
pwd                         Display remote working directory
quit                        Quit sftp
rename oldpath newpath      Rename remote file
rm path                     Delete remote file
rmdir path                  Remove remote directory
symlink oldpath newpath     Symlink remote file
version                     Show SFTP version
!command                    Execute 'command' in local shell
!                           Escape to local shell
?                           Synonym for help


Los comandosbye, quit’ y ‘exit terminan la sesión establecida y abandonan el servidor.

Permisos de carpeta y archivo


Otra cuestión importante a considerar cuando hay que subir/bajar un archivo a una carpeta de otro ordenador es la relativa a los permisos que su Sistema Operativo tiene asignados al archivo, o carpeta, sobre el que se va a trabajar. A veces es necesario modificar manualmente estos atributos para conseguir una operación exitosa.
Cambiar los atributos de archivo/carpeta en linux puede hacer (como usuario 'root') de varias formas, por ejemplo:


# chmod 666 nombre_archivo Permite lectura/escritura a todos
# chmod 777 nombre_directorio Permite cualquier acción a todos


Buscar archivos en el árbol de directorios


# find / -name “mi_backup”
Busca fichero/directorio que contenga cadena desde el directorio raíz del árbol de directorios


Ayuda - Xorcom Rapid Live CD: Directorio donde son guardadas las copias de seguridad (backups) de los archivos de configuración:


/live/cow/var/lib/asterisk/gui_backups

Nota: El directorio gui_backups es creado la primera vez que la interfaz ‘asterisk-gui’ ejecuta el módulo ‘backup’.

Conexión entre PBXs usando troncales

Introducción

Uno de los pilares básicos de toda central privada de telefonía es la gestión de llamadas entre el exterior y las extensiones locales definidas en el sistema.


Los proveedores de servicio telefónico externos pueden ser públicos, como por ejemplo los suministradores de líneas analógicas tradicionales o comunicaciones digitales RDSI, o privados (pertenecientes a otra PBX/IPBX).


El equipamiento telefónico instalado/conectado en el equipo donde se encuentra en ejecución Asterisk determinará los tipos de enlaces de comunicación con otras centrales, conocidos normalmente como troncales (trunks). Tras dar de alta una o más de estas conexiones, ya será posible establecer las reglas de llamadas en las que intervendrán los enlaces definidos:


  • Reglas de llamadas entrantes (Incoming calling rules): Responderán a la pregunta ¿Qué acción/acciones se realizarán al llegar una llamada telefónica por la línea exterior considera?.
  • Reglas de llamadas salientes (Outgoing calling rules): Definirá quién y qué números (externos) podrán ser marcados por esa línea. La inclusión de estos accesos al exterior afectará, por tanto, al Plan de Marcación donde deberá incluirse las referencias a estas reglas.

Conexión WAN-LAN

Aunque la topología de la red telefónica donde trabaja Xorcom Rapid Live CD puede presentar diversas formas, aquí se planteará un escenario básico de conexión entre un proveedor SIP externo (PBXes.org) y la central PBX encargada de dar servicio a los terminales telefónicos incluidos en una red de área local.


El proceso completo de configuración de este sistema telefónico básico quedaría concluido tras completar las siguientes etapas:


  1. Dar de alta la central telefónica en la WAN con dos únicas extensiones. La primera estará destinada a ser la vía de comunicación con la IPBX local a través de una troncal y la segunda quedará asociada a un teléfono IP directamente.
    1. Paso 1: Crear una cuenta en el sitio web http://pbxes.org y configurar una central virtual con dos extensiones con, al menos, los siguientes campos completados:
      1. Extensión 1:
        • Número de extensión: 101. Este es un único número asignado a la extensión y servirá posteriormente para autenticarse en el sistema por el terminal telefónico o la troncal de una central.
        • Nombre de usuario (URL): ext-101
        • Contraseña: 101
      2. Extensión 2:
        • Número de extensión: 102
        • Nombre de usuario (URL): ext-102
        • Contraseña: 102
    2. Paso 2: Configurar la central telefónica local (Xorcom RAPID Live CD)
      1. Dar de alta las extensiones SIP: 6000 (contraseña 6000) y 6001 (contraseña 6001)
        • Plan de marcación: DialPlan1
        • Opción NAT activa
      2. Definir la troncal SIP
        • Nombre de proveedor: pbxes
        • Hostname: pbxes.org
        • Username: ext-101
        • Contraseña: 101
        • Insecure: very
      3. Añadir una regla de tráfico saliente (outgoing calling rule):
        • Nombre: OutgoingTraffic
        • Patrón (Pattern): _10X
        • Use Trunk: pbxes
      4. Incluir la regla de tráfico saliente anterior en el plan de marcación activo:
        • Editar DialPlan1
        • Marcar la opción [v] OutgoingTraffic
      5. Crear una regla de tráfico entrante (Incoming calling rule):
        • Patrón (Pattern): s (cualquier llamada)
        • Destino: Extensión de usuario  > 6000. Esta extensión se comportará como Operadora, atendiendo todas las llamadas que entren por la troncal.
      6. Activar los cambios introducidos (Apply changes)


En la verificación del correcto funcionamiento de esta configuración es necesaria la participación de dos terminales telefónicos, uno asociado a la central pública (WAN) y otro a la privada (LAN). Los parámetros requeridos en cada dispositivo (por ejemplo, teléfonos SIP) son:


Teléfono SIP asociado a Asterisk (LAN)
Teléfono SIP en PBXes (WAN)
  • Nombre de usuario: 6000
  • Contraseña: 6000
  • Servidor: Dirección IP de Xorcom
  • Nombre de usuario: ext-101
  • Contraseña: 101
  • Dominio: pbxes.org
  • SIP server port: 5060
  • SIP transport: TCP

Nota: La configuración presentada aquí funcionó correctamente con una conexión a Internet a través de un proveedor VoIP (Orange). Sin embargo, cuando se llevó a cabo la prueba, utilizando los mismos ficheros de configuración y dispositivos IP activos, en un entorno con otro proveedor de Internet (Telefónica) no pudo completarse correctamente la comunicación voz (la señalización inicialmente era correcta pero al descolgar el teléfono llamado, el llamante seguía recibiendo la señal acústica de llamada en destino).

Conexión entre PBXs dentro de una LAN

También puede darse la circunstancia de tener una infraestructura telefónica local múltiple, es decir, formada por más de una centralita. En este caso, la configuración típica es aquella en la que una extensión de una central (PBX A) se encuentran directamente unida a la troncal de otra (PBX B) estableciendo así una comunicación de voz:

Conexión en cascada

Este es precisamente el segundo caso de estudio donde se plantea un nexo de unión entre extensión y troncal de distintas centrales.

Suponiendo que las direcciones IP otorgadas a las centrales son:


  • IPBX A: 192.168.1.18
  • IPBX B: 192.168.1.17


Las acciones de configuración requeridas en la puesta en marcha de este sistema telefónico se desglosan en estos apartados:
  1. IPBX A
    1. Options > General preferences
      1. Disable Extension ranges []
      2. Cambio del rango de extensiones (101…..111)
    2. Users: Extensiones basadas exclusivamente en tecnología SIP
      1. Number: 101 (Central1)
      2. Password: 101
      3. Number: 102 (Director)
      4. Password: 102
      5. Dialplan: [v] Dialplan1
      6. insecure: no
    3. No hay definidas troncales, ni reglas de tráfico saliente/entrante
    4. Actualizar la configuración (Apply changes)
  2. IPBX B
    1. Dar de alta las extensiones SIP: 6000 (contraseña 6000) y 6001 (contraseña 6001)
    2. Trunks:
      1. Nombre: IPBXA
      2. Technology: SIP
      3. Hostname/IP: 192.168.1.18
      4. Username: 101
      5. Password: 101
      6. Insecure: very
    3. Outgoing calling rule:
      1. Nombre: SalidaXXX
      2. Patrón: _XXX
      3. Use Trunk: IPBXA
    4. Incluir la regla de llamadas salientes denominada SalidaXXX en el plan de marcación DialPlan1
    5. Incoming calling rule:
      1. Trunk: IPBXA
      2. Pattern: s
      3. Destination: User Extension - 6000 las llamadas que lleguen por esta troncal, será direccionadas a la extensión 6000.
    6. Actualizar la configuración (Apply changes)
  3. Por último se registran los terminales telefónicos como extensiones de sus respectivas centrales usando los datos anteriores:
Teléfono SIP asociado a IPBXA
Teléfono SIP asociado a IPBXB
  • Nombre de usuario: 102 (Director)
  • Contraseña: 102
  • Servidor: 192.168.1.18
  • Nombre de usuario: 6000 (Operadora)
  • Contraseña: 6000
  • Servidor: 192.168.1.17

Conexión simétrica entre centrales

Las extensiones de una central pueden llamar a las extensiones es de la otra usando como vía de comunicación la troncal IAX.
Para la prueba de esta configuración se han realizado, de manera similar al apartado anterior, las siguientes labores de ajuste:


  • Direcciones IP de las centrales:
    • IPBX A: 192.168.1.20
    • IPBX B: 192.168.1.21
  • Extensiones:
    • IPBX A: 6000, 6001 y 6299
    • IPBX B: 5000, 5001 y 5299
  • Troncales:
    • IPBX A:
      • Nombre del proveedor: xorcomb
      • Hostname: 192.168.1.21
      • Username: 5299
      • Password: 5299
      • Codecs: u-law, a-law, GSM, G726
      • insecure: very
    • IPBX B:
      • Nombre del proveedor: xorcoma
      • Hostname: 192.168.1.20
      • Username: 6299
      • Password: 6299
      • Codecs: u-law, a-law, GSM, G726
      • insecure: very
  • Establecimiento de la regla de llamadas salientes (por la troncal IAX) en ambas centrales
    • IPBX A:
      • Calling Rule Name: trafficTo5XXX
      • Pattern: _5XXX
      • Envía esta llamada a través de (Use Trunk): xorcomb
      • Strip: 0
    • IPBX B:
      • Calling Rule Name: trafficTo6XXX
      • Pattern: _6XXX
      • Envía esta llamada a través de (Use Trunk): xorcoma
      • Strip: 0
  • Inclusión de la regla en el plan de marcación correspondiente
    • IPBX A: Dial Plans > (DialPlan1) > Include Outgoing Calling Rules [v] TrafficTo5XXX
    • IPBX B: Dial Plans > (DialPlan1) > Include Outgoing Calling Rules [v] TrafficTo6XXX