How to run a packet capture in an Asterisk system (tcpdump)
commands requires to collect a packet capture from a system that is running open source Asterisk
Apr 30, 2015•Knowledge
Answer
How to run a packet capture in Asterisk system
In order to collect a packet capture, you need to make sure that tcpump is installed on your system, most Linux implementation already have this tools installed by default, if you need to install it, please contact your system administrator.
Steps
Please log into your system using SSH and use admin credentials (usually root)
Execute #tcpdump -i eth0 -s0 -w /tmp/pcap.pcap
Note: Make sure that traffic from asterisk is going in and out from the correct interface, you can check the interfaces on your system by running the command ifconfig -a and then checking route to confirm how your operating system is routing the packets going out from your server.
WebRTC (Web Real-Time Communication) es un proyecto gratuito de código abierto que proporciona navegadores web y aplicaciones móviles con comunicaciones en tiempo real (RTC) a través de interfaces de programación de aplicaciones (API) simples. Permite que la comunicación de audio y video funcione dentro de las páginas web al permitir la comunicación directa entre pares, eliminando la necesidad de instalar complementos o descargar aplicaciones nativas. Con el apoyo de Apple, Google, Microsoft, Mozilla y Opera, las especificaciones de WebRTC han sido publicadas por el Consorcio World Wide Web (W3C) y el Grupo de Trabajo de Ingeniería de Internet (IETF)..
Este tutorial lo guiará a través de la configuración de Asterisk para dar servicio a los clientes WebRTC.
Modificar o crear un servidor TLS HTTPS de Asterisk.
Cree un transporte PJSIP WebSocket.
Cree objetos PJSIP Endpoint, AOR y Authentication que representen un cliente WebRTC.
2.- Instalación
2.1.- Preparando nuestro servidor
Primero, actualizamos nuestra instalación de CentOS 7.9 e instalamos algunas dependencias.
Ahora, habilitamos seguridad adicional para el acceso ssh. Cambiamos el puerto realizando los siguientes pasos. (Opcional)
[root@localhost ~]# nano /etc/ssh/sshd_config # $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/usr/bin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # Port 2235 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
Descomente la línea #Port 22 y cambie el puerto a uno de su preferencia.
Ahora agregue la nueva regla con el nuevo puerto y reinicie el servicio sshd e inicie sesión con el nuevo puerto.
Reinicie el servicio de Asterisk después de realizar los cambios.
[root@localhost asterisk-18.6.0]# chkconfig asterisk on [root@localhost asterisk-18.6.0]# systemctl restart asterisk [root@localhost asterisk-18.6.0]# asterisk -rvvvvvvvvvvvvvvvvvvv Asterisk 18.6.0, Copyright (C) 1999 – 2021, Digium, Inc. and others. Created by Mark Spencer markster@digium.com Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘core show warranty’ for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type ‘core show license’ for details. ========================================================================= Connected to Asterisk 18.6.0 currently running on localhost (pid = 91658) localhost*CLI>
¡FELICIDADES! Ha instalado correctamente Asterisk 18.
2.3.- Instalación de Apache
Instale Apache para habilitar el acceso web a nuestro servidor.
Primero, tenemos que asegurarnos que nuestro dominio o subdominio apunte a la dirección IP de nuestro servidor, para ello nos dirigimos a la configuración de nuestro DNS y agregamos un registro tipo A.
Ahora procederemos a crear nuestro certificado, instalando primero las dependencias.
[root@localhost ~]# certbot ––apache -d mydomain.com Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to cancel):
Proporcionar un correo electrónico para ser notificado de la caducidad del certificado.
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server. Do you agree? – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – (Y)es/(N)o:
Responda Y para continuar
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let’s Encrypt project and the non-profit organization that develops Certbot? We’d like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – (Y)es/(N)o:
Responda Y para continuar
Al final vemos el siguiente mensaje confirmando que todo es correcto.
Account registered. Requesting a certificate for mydomain.com Performing the following challenges: http-01 challenge for mydomain.com Waiting for verification… Cleaning up challenges Created an SSL vhost at /etc/httpd/conf.d/mydomain.com-le-ssl.conf Deploying Certificate to VirtualHost /etc/httpd/conf.d/ mydomain.com-le-ssl.conf Redirecting vhost in /etc/httpd/conf.d/mydomain.com.conf to ssl vhost in /etc/httpd/conf.d/ mydomain.com-le-ssl.conf – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – Congratulations! You have successfully enabled https://mydomain.com – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – Subscribe to the EFF mailing list (email: support@mydomain.com). Starting new HTTPS connection (1): supporters.eff.org We were unable to subscribe you the EFF mailing list because your e-mail address appears to be invalid. You can try again later by visiting https://act.eff.org. IMPORTANT NOTES: – Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mydomain.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/mydomain.com/privkey.pem Your certificate will expire on 2021-09-14. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the “certonly” option. To non-interactively renew *all* of your certificates, run “certbot renew” – If you like Certbot, please consider supporting our work by: Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le [root@localhost ~]#
Anotamos la ruta de ambos certificados, ya que los usaremos más adelante.
Ahora que certbot está instalado y funcionando, debemos hacer que verifique los certificados que caducan automáticamente. Como root, primero abrimos el crontab para nuestro servidor.
[root@localhost ~]# crontab -e
Presione Insertar
En este caso, agregué un cron a nuestro servidor de ejemplo que se ve así.
Este cron, a las 3:45 AM Todos los sábados, ejecutará la función de renovación de certbot para renovar los certificados ya instalados que vencen, y luego volverá a cargar la configuración de Apache. Guarde el crontab después de agregar esta línea, y entrará en vigencia de inmediato.
2.5.- Configuración de Asterisk
Debería tener una instalación de Asterisk basada en chan_pjsip que funcione. Instale Asterisk desde los paquetes de su distribución o, preferiblemente, instale Asterisk desde la fuente. De cualquier manera, hay algunos módulos además de los estándar que deben estar presentes para que WebSockets y WebRTC funcionen.
res_crypto
res_http_websocket
res_pjsip_transport_websocket
codec_opus (opcional pero muy recomendable para audio de alta calidad)
Recomendamos instalar Asterisk desde la fuente porque es fácil asegurarse de que estos módulos estén construidos e instalados.
2.5.1.- Certificados
Técnicamente, un cliente puede usar WebRTC a través de un WebSocket inseguro para conectarse a Asterisk. Sin embargo, en la práctica, la mayoría de los navegadores requerirán el uso de un WebSocket basado en TLS. Puede usar certificados autofirmados para configurar el servidor TLS de Asterisk, pero lograr que los navegadores los acepten es complicado. Entonces, si puede, le recomendamos que obtenga certificados confiables de una organización como LetsEncrypt.
Como el objetivo de esta presentación no es enseñar cómo instalar un certificado con LetsEncrypt, te recomendamos el siguiente enlace para hacerlo tú mismo.
Reemplace local_net, external_media_address y external_signaling_address con sus respectivas direcciones IP.
2.5.4.- PJSIP Endpoint, AOR y Auth
Ahora necesitamos crear los objetos PJSIP básicos que representan al cliente. En este ejemplo, llamaremos al cliente webrtc_client, pero puede usar el nombre que desee, como un número de extensión. Solo se muestran las opciones mínimas necesarias para una configuración de trabajo.
NOTA: Es normal que varios objetos en pjsip.conf tengan el mismo nombre siempre que los tipos sean diferentes. Agregue el siguiente contenido al final del archivo.
Reinicie Asterisk para aplicar los cambios y, si tiene un firewall, no olvide permitir el paso del puerto TCP 8089 para que su cliente pueda conectarse.
Verifique que el certificado se aplique correctamente.
localhost*CLI> module reload http localhost*CLI> http show status HTTP Server Status: Prefix: Server: Asterisk Server Enabled and Bound to 0.0.0.0:8088 HTTPS Server Enabled and Bound to 0.0.0.0:8089 Enabled URI’s: /httpstatus => Asterisk HTTP General Status /phoneprov/… => Asterisk HTTP Phone Provisioning Tool /metrics/… => Prometheus Metrics URI /ari/… => Asterisk RESTful API /ws => Asterisk HTTP WebSocket Enabled Redirects: None.
2.5.6.- Wrap Up
En este punto, su cliente WebRTC debería poder registrarse y realizar llamadas. Sin embargo, si ha utilizado certificados autofirmados, es posible que su navegador no permita la conexión y, dado que el intento no proviene de un URI normal proporcionado por el usuario, es posible que ni siquiera se le notifique que hay un problema. Es posible que pueda hacer que el navegador acepte el certificado visitando “https://pbx.example.com:8089/ws” directamente. Por lo general, esto dará como resultado una advertencia del navegador y puede darle la oportunidad de aceptar el certificado autofirmado y/o crear una excepción. Si generó su certificado a partir de una autoridad certificadora local preexistente, también puede importar el certificado de esa autoridad certificadora en su tienda de confianza, pero ese procedimiento está fuera del alcance de este documento.
Para esta presentación decidimos utilizar Browser Phone que a nuestro criterio es uno de los mejores y más completos proyectos de código abierto de WebRTC Cliente.
3.1.- Browser Phone
Esta aplicación web está diseñada para funcionar con Asterisk PBX (v13, v16 y v18). Una vez cargada, la aplicación se conectará a Asterisk PBX en su zócalo web y registrará una extensión. Las llamadas se realizan entre contactos y se guarda un detalle completo de la llamada. Las llamadas de audio se pueden grabar. Las videollamadas se pueden grabar y guardar con 5 diseños de grabación diferentes y 3 configuraciones de calidad diferentes. Esta aplicación no utiliza ningún sistema o servicio en la nube y está diseñada para ser independiente. Se descargarán bibliotecas adicionales en tiempo de ejecución (pero también se pueden guardar en el servidor web para una solución completa fuera de línea).
3.2.- Requisito del servidor
Asterisk PBX versión 13 | 16 | 17 | 18 (con Websockets y mensajería de texto, chan_sip o chan_pjsip).
Nos movemos a la carpeta html y copiamos el proyecto en la misma.
[root@localhost ~] cd /var/www/html/mydomain.com/public_html/ [root@localhost ~] git clone https://github.com/InnovateAsterisk/Browser-Phone.git