--- title: "Cómo instalar y configurar Asterisk PBX en Ubuntu 24.04" description: "Instala Asterisk en Ubuntu 24.04 y crea una centralita con extensiones PJSIP, buzón de voz, un trunk SIP con tu proveedor y protección con UFW y fail2ban." category: "VoIP y Comunicación" language: es source: https://cubepath.com/es/docs/voip-y-comunicación/instalacion-y-configuracion-de-asterisk-pbx updated: 2026-09-25 --- # Cómo instalar y configurar Asterisk PBX en Ubuntu 24.04 Asterisk es un software de código abierto para construir centralitas telefónicas IP (PBX): registra teléfonos SIP como extensiones, enruta las llamadas según un plan de marcación (*dialplan*) y conecta con proveedores de telefonía para llamar a números externos. En este tutorial instalarás Asterisk en Ubuntu 24.04, crearás dos extensiones con PJSIP y buzón de voz, configurarás un trunk SIP para llamadas entrantes y salientes, y protegerás el servidor con UFW y fail2ban. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS y una IP pública fija, por ejemplo un VPS de CubePath, con un usuario no root con privilegios `sudo`. - 1 GB de RAM y 1 vCPU son suficientes para una oficina pequeña. - Un softphone para las pruebas, como Linphone, Zoiper o MicroSIP, instalado en tu ordenador o móvil. - Opcional: una cuenta con un proveedor SIP (el usuario, la contraseña, el servidor SIP y tu número DID) para llamadas externas. A lo largo de la guía, sustituye `your_server_ip` por la IP pública del servidor y `sip.provider.example` por el servidor SIP de tu proveedor. ## Paso 1: Instalar Asterisk Ubuntu 24.04 incluye Asterisk 20, una versión con soporte a largo plazo (LTS), en el repositorio `universe`. Instalarlo desde el paquete te da el servicio systemd, el usuario de sistema `asterisk` y las actualizaciones de seguridad de Ubuntu sin compilar nada: ```bash sudo apt update sudo apt install asterisk ``` Comprueba la versión y el estado del servicio: ```bash asterisk -V sudo systemctl status asterisk ``` ```output Asterisk 20.6.0~dfsg+~cs6.13.40431414-2build5 ● asterisk.service - Asterisk PBX Loaded: loaded (/usr/lib/systemd/system/asterisk.service; enabled; preset: enabled) Active: active (running) since Thu 2026-09-25 09:41:03 UTC; 12s ago ``` Conéctate a la consola de Asterisk para confirmar que responde. La opción `-r` se conecta al proceso en marcha y `-x` ejecuta un comando y sale: ```bash sudo asterisk -rx "core show version" ``` > Nota: si necesitas una versión más reciente que la del paquete (por ejemplo Asterisk 22 LTS), puedes compilarla desde las fuentes de downloads.asterisk.org. El resto de la configuración de esta guía es la misma. ## Paso 2: Conocer los archivos de configuración La configuración vive en `/etc/asterisk/`. El paquete instala allí archivos de ejemplo muy extensos; en esta guía reemplazarás los tres que necesitas por versiones mínimas y comentadas: | Archivo | Función | |---------|---------| | `pjsip.conf` | Transportes SIP, extensiones (endpoints) y trunks | | `extensions.conf` | Dialplan: qué pasa con cada número marcado | | `voicemail.conf` | Buzones de voz y su PIN | | `rtp.conf` | Rango de puertos UDP para el audio (10000 a 20000 por defecto) | | `logger.conf` | Qué se registra y en qué archivos de `/var/log/asterisk/` | Guarda una copia de los originales antes de sustituirlos: ```bash cd /etc/asterisk sudo cp pjsip.conf pjsip.conf.orig sudo cp extensions.conf extensions.conf.orig sudo cp voicemail.conf voicemail.conf.orig ``` ## Paso 3: Crear las extensiones con PJSIP PJSIP (`chan_pjsip`) es el canal SIP actual de Asterisk; el antiguo `chan_sip` ya no existe en las versiones modernas. Cada extensión se define con tres objetos que comparten nombre: un `endpoint` (el teléfono y sus opciones), un `auth` (usuario y contraseña) y un `aor` (dónde está registrado). Las plantillas, marcadas con `(!)`, evitan repetir las mismas opciones en cada extensión. Abre el archivo y sustituye su contenido por el siguiente: ```bash sudo nano /etc/asterisk/pjsip.conf ``` ```ini ; Transporte SIP por UDP en el puerto 5060 [transport-udp] type=transport protocol=udp bind=0.0.0.0:5060 ; ---------- Plantillas ---------- [endpoint-interno](!) type=endpoint context=internas disallow=all allow=ulaw,alaw,g722 direct_media=no ; Opciones para teléfonos detrás de NAT (el caso habitual) rtp_symmetric=yes force_rport=yes rewrite_contact=yes [auth-userpass](!) type=auth auth_type=userpass [aor-telefono](!) type=aor max_contacts=1 remove_existing=yes qualify_frequency=60 ; ---------- Extensión 101 ---------- [101](endpoint-interno) auth=101 aors=101 callerid="Recepcion" <101> mailboxes=101@default [101](auth-userpass) username=101 password=your_strong_password_101 [101](aor-telefono) ; ---------- Extensión 102 ---------- [102](endpoint-interno) auth=102 aors=102 callerid="Ventas" <102> mailboxes=102@default [102](auth-userpass) username=102 password=your_strong_password_102 [102](aor-telefono) ``` Sustituye `your_strong_password_101` y `your_strong_password_102` por contraseñas largas y aleatorias. Los servidores SIP expuestos a Internet reciben intentos de fuerza bruta a los pocos minutos de arrancar; puedes generar una contraseña con `openssl rand -base64 18`. Como el archivo contiene contraseñas, restringe los permisos para que solo `root` y el usuario `asterisk` puedan leerlo: ```bash sudo chown root:asterisk /etc/asterisk/pjsip.conf sudo chmod 640 /etc/asterisk/pjsip.conf ``` Recarga la configuración de PJSIP y comprueba que aparecen las dos extensiones: ```bash sudo asterisk -rx "pjsip reload" sudo asterisk -rx "pjsip show endpoints" ``` ```output Endpoint: 101/101 Unavailable 0 of inf InAuth: 101/101 Aor: 101 1 Endpoint: 102/102 Unavailable 0 of inf InAuth: 102/102 Aor: 102 1 ``` El estado `Unavailable` es correcto: todavía no hay ningún teléfono registrado. ## Paso 4: Configurar el buzón de voz Cada buzón se define con el formato `extensión => PIN,Nombre,email`. Abre el archivo y sustituye su contenido: ```bash sudo nano /etc/asterisk/voicemail.conf ``` ```ini [general] format=wav49|gsm|wav maxmsg=100 maxsecs=180 ; Envío del mensaje por email (requiere un MTA local como Postfix) serveremail=pbx@your_domain attach=yes [default] 101 => 4821,Recepcion,recepcion@your_domain 102 => 7390,Ventas,ventas@your_domain ``` Cambia los PIN de ejemplo por otros propios. Si el servidor no tiene un agente de correo configurado, los mensajes se guardan igualmente en `/var/spool/asterisk/voicemail/default/` y se escuchan desde el teléfono; simplemente no llegará el aviso por email. ## Paso 5: Escribir el dialplan El dialplan de `extensions.conf` se organiza en **contextos**. Las extensiones del paso 3 usan el contexto `internas`, así que todo lo que marquen se busca ahí. Cada línea `exten => número,prioridad,aplicación` ejecuta una aplicación, y `same => n` continúa en la siguiente prioridad de la misma extensión. Abre el archivo y sustituye su contenido: ```bash sudo nano /etc/asterisk/extensions.conf ``` ```ini [general] static=yes writeprotect=yes [internas] ; Llamadas entre extensiones 100-199: suena 20 segundos y, si no contesta, buzón de voz exten => _1XX,1,NoOp(Llamada interna a ${EXTEN}) same => n,Dial(PJSIP/${EXTEN},20) same => n,VoiceMail(${EXTEN}@default,u) same => n,Hangup() ; *97: escuchar el buzón propio exten => *97,1,VoiceMailMain(${CALLERID(num)}@default) same => n,Hangup() ; 600: prueba de eco para comprobar el audio en los dos sentidos exten => 600,1,Answer() same => n,Playback(demo-echotest) same => n,Echo() same => n,Hangup() ; Llamadas externas: se marca 0 + número y se envía por el trunk sin el 0 exten => _0X.,1,NoOp(Llamada saliente a ${EXTEN:1}) same => n,Dial(PJSIP/${EXTEN:1}@proveedor,60) same => n,Hangup() ; Emergencias sin prefijo exten => 112,1,Dial(PJSIP/112@proveedor) same => n,Hangup() [entrantes] ; Todas las llamadas que llegan del proveedor suenan en recepción exten => _X.,1,Goto(recepcion,1) exten => _+X.,1,Goto(recepcion,1) exten => recepcion,1,NoOp(Llamada entrante de ${CALLERID(all)}) same => n,Dial(PJSIP/101,25) same => n,VoiceMail(101@default,u) same => n,Hangup() ``` En los patrones, `_` indica que la extensión es un patrón, `X` es cualquier dígito y `.` es uno o más caracteres. `${EXTEN:1}` es el número marcado sin su primer carácter. Recarga el dialplan y el buzón de voz y comprueba que Asterisk ha cargado el contexto: ```bash sudo asterisk -rx "dialplan reload" sudo asterisk -rx "voicemail reload" sudo asterisk -rx "dialplan show internas" ``` ```output [ Context 'internas' created by 'pbx_config' ] '112' => 1. Dial(PJSIP/112@proveedor) 2. Hangup() '600' => 1. Answer() ... ``` ## Paso 6: Abrir el cortafuegos Asterisk necesita el puerto `5060/udp` para la señalización SIP y el rango `10000-20000/udp` para el audio (RTP). Si tus teléfonos se conectan siempre desde las mismas IP (la oficina y el proveedor), limita SIP a esas direcciones: ```bash sudo ufw allow OpenSSH sudo ufw allow from your_office_ip to any port 5060 proto udp sudo ufw allow from your_provider_ip to any port 5060 proto udp sudo ufw allow 10000:20000/udp sudo ufw enable sudo ufw status ``` Si tienes usuarios remotos con IP cambiante, tendrás que abrir `5060/udp` a todo el mundo con `sudo ufw allow 5060/udp`. En ese caso el paso 8 (fail2ban) es imprescindible. ## Paso 7: Registrar un softphone y hacer la primera llamada Configura una cuenta SIP en tu softphone con estos datos: | Campo | Valor | |-------|-------| | Usuario / extensión | `101` | | Contraseña | la de `[101]` en `pjsip.conf` | | Dominio / servidor | `your_server_ip` | | Transporte | UDP | Cuando el softphone indique que está registrado, compruébalo desde el servidor: ```bash sudo asterisk -rx "pjsip show contacts" ``` ```output Contact: 101/sip:101@203.0.113.25:52814;ob a1b2c3d4e5 Avail 38.412 ``` Marca `600` desde el softphone. Deberías oír el mensaje de la prueba de eco y, después, tu propia voz. Si oyes el mensaje pero no tu eco, o no oyes nada, el audio RTP está bloqueado: revisa el paso 6. Registra la extensión `102` en otro dispositivo y llama de una a otra marcando `101` o `102`. Si no contestas en 20 segundos, la llamada pasa al buzón de voz; escucha los mensajes marcando `*97`. Para seguir en directo lo que ocurre durante una llamada, abre la consola con más detalle: ```bash sudo asterisk -rvvv ``` Sal de la consola con `exit` (Asterisk sigue funcionando). ## Paso 8: Conectar un trunk SIP con tu proveedor El trunk permite recibir llamadas en tu número y llamar a teléfonos externos. La configuración exacta depende del proveedor, pero la mayoría usan registro con usuario y contraseña. Añade estas secciones al final de `pjsip.conf`, sustituyendo los valores `your_sip_user`, `your_sip_password` y `sip.provider.example` por los que te haya dado: ```bash sudo nano /etc/asterisk/pjsip.conf ``` ```ini ; ---------- Trunk con el proveedor ---------- ; Registro: Asterisk se anuncia al proveedor para recibir llamadas [proveedor-reg] type=registration transport=transport-udp outbound_auth=proveedor-auth server_uri=sip:sip.provider.example client_uri=sip:your_sip_user@sip.provider.example retry_interval=60 [proveedor-auth](auth-userpass) username=your_sip_user password=your_sip_password [proveedor] type=aor contact=sip:sip.provider.example [proveedor] type=endpoint transport=transport-udp context=entrantes disallow=all allow=ulaw,alaw outbound_auth=proveedor-auth aors=proveedor from_user=your_sip_user from_domain=sip.provider.example direct_media=no ; Identifica las llamadas entrantes del proveedor por su IP [proveedor] type=identify endpoint=proveedor match=sip.provider.example ``` La sección `identify` es la que hace que las llamadas entrantes del proveedor entren en el contexto `entrantes` en lugar de ser rechazadas como anónimas. Si tu proveedor envía llamadas desde varias IP, añade una línea `match=` por cada una. Recarga PJSIP y comprueba el registro: ```bash sudo asterisk -rx "pjsip reload" sudo asterisk -rx "pjsip show registrations" ``` ```output ========================================================================================== proveedor-reg/sip:sip.provider.example proveedor-auth Registered ``` Prueba una llamada saliente marcando `0` seguido del número en el formato que acepte tu proveedor (por ejemplo `0612345678` envía `612345678`), y una entrante llamando a tu número DID desde un móvil. ## Paso 9: Proteger Asterisk con fail2ban Los bots escanean continuamente el puerto 5060 probando contraseñas para hacer llamadas a números de tarificación especial a tu costa. fail2ban lee el registro de Asterisk y bloquea las IP que fallan la autenticación repetidamente. Instálalo: ```bash sudo apt install fail2ban ``` fail2ban ya trae un filtro llamado `asterisk` que reconoce los intentos fallidos de PJSIP. Comprueba cómo se llama el archivo de mensajes en tu sistema, ya que la jaula debe apuntar a él: ```bash ls /var/log/asterisk/ ``` ```output cdr-csv cdr-custom messages.log queue_log ``` Crea la jaula con la ruta que hayas visto (`messages.log` o `messages`): ```bash sudo nano /etc/fail2ban/jail.d/asterisk.local ``` ```ini [asterisk] enabled = true logpath = /var/log/asterisk/messages.log maxretry = 5 findtime = 10m bantime = 1d ``` Reinicia fail2ban y comprueba que la jaula está activa: ```bash sudo systemctl restart fail2ban sudo fail2ban-client status asterisk ``` ```output Status for the jail: asterisk |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /var/log/asterisk/messages.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list: ``` Para comprobar que funciona, configura en un softphone una contraseña incorrecta: tras cinco intentos, su IP aparecerá en `Banned IP list`. Desbloquéala con `sudo fail2ban-client set asterisk unbanip IP_BLOQUEADA`. ## Solución de problemas **El softphone no se registra (`401 Unauthorized` o `403 Forbidden`).** Abre la consola, activa el registro de mensajes SIP y repite el intento desde el softphone: ```bash sudo asterisk -rvvv ``` Dentro de la consola, ejecuta: ```text pjsip set logger on ``` Verás cada petición `REGISTER` y la respuesta de Asterisk. Revisa que el usuario coincide con la sección `auth` y que la contraseña es correcta. Desactívalo con `pjsip set logger off` y sal con `exit`. **Audio en un solo sentido o sin audio.** Casi siempre es NAT o cortafuegos. Comprueba que el rango `10000:20000/udp` está abierto y que el endpoint tiene `rtp_symmetric=yes`, `force_rport=yes` y `rewrite_contact=yes`. Si el propio servidor Asterisk está detrás de NAT (con IP privada), añade al transporte `external_media_address` y `external_signaling_address` con la IP pública y `local_net` con tu red privada. **Las llamadas entrantes del proveedor se rechazan.** En la consola verás `No matching endpoint found`. La IP desde la que llega la llamada no coincide con el `match` de la sección `identify`; pídele al proveedor su lista de IP de señalización y añádelas. **Los cambios no se aplican.** Recuerda recargar el módulo correspondiente: `pjsip reload` para `pjsip.conf`, `dialplan reload` para `extensions.conf` y `voicemail reload` para `voicemail.conf`. Si hay un error de sintaxis, aparece en `/var/log/asterisk/messages.log`. ## Conclusión Tienes una centralita Asterisk en Ubuntu 24.04 con dos extensiones PJSIP, buzón de voz, prueba de eco, un trunk SIP para llamadas externas y protección contra ataques de fuerza bruta. A partir de aquí puedes añadir un menú de voz (IVR) con las aplicaciones `Background()` y `WaitExten()`, crear colas de llamadas con `queues.conf`, o cifrar la señalización y el audio con un transporte TLS y SRTP para los teléfonos que se conectan por Internet.