Un servidor VoIP expuesto a Internet recibe continuamente escaneos automáticos, intentos de fuerza bruta, tráfico SIP malformado e intentos de fraude. La protección no depende de una sola configuración: es una práctica por capas que combina una superficie de red reducida, autenticación fuerte, software actualizado, monitorización y recuperación probada.
Esta guía restaura todo el alcance del artículo original de seguridad y lo actualiza para MagnusBilling 8, que utiliza Asterisk 20 y PJSIP. Realiza los cambios durante una ventana de mantenimiento, conserva una vía de recuperación funcional y verifica cada capa antes de continuar.
Lista de seguridad
- Reduce la exposición y utiliza puertos no predeterminados solo como medida secundaria para disminuir el ruido de los escaneos.
- Publica el panel mediante un dominio dedicado con HTTPS.
- Activa la autenticación de dos factores para administradores y otros usuarios privilegiados.
- Restringe el acceso al panel de MagnusBilling por IP autorizada mediante SSH.
- Activa reCAPTCHA en el inicio de sesión cuando sea adecuado para tu entorno.
- Coloca OpenSIPS o Kamailio delante de Asterisk en entornos de producción muy expuestos.
- Autentica por IP a los peers SIP estables cuando sea posible y utiliza credenciales fuertes y únicas para endpoints dinámicos.
- Utiliza claves SSH y desactiva la autenticación por contraseña solamente después de comprobar el acceso con la clave.
- Mantén activos y monitorizados el firewall del servidor y Fail2Ban.
- Aplica las actualizaciones de seguridad de MagnusBilling y Debian mediante un proceso controlado.
- Sustituye las credenciales predeterminadas, evita administradores predecibles y utiliza contraseñas fuertes y únicas.
- Conserva copias de seguridad probadas fuera del servidor de producción y revisa periódicamente los registros de seguridad.
1. Utiliza puertos no predeterminados con cuidado
Cambiar un puerto predeterminado puede reducir el ruido de escaneos genéricos, pero no protege un servicio vulnerable. La política del firewall, las listas de IP permitidas, la autenticación y la monitorización siguen siendo los controles reales.
| Servicio | Valor habitual | Operación más segura |
|---|---|---|
| SSH | 22/tcp | Restringe por IP de origen o VPN; un puerto alto alternativo puede reducir el ruido. |
| HTTP | 80/tcp | Mantenlo solo para validar certificados o redirígelo a HTTPS en el puerto 443. |
| SIP | 5060/udp o tcp | Restringe los peers y coordina cualquier cambio del transporte PJSIP con todos los endpoints y proveedores. |
- Si firewalld es el firewall activo, permite el puerto SSH nuevo antes de modificar sshd.
- Valida la configuración de SSH con sshd -t antes de recargar el servicio.
- Cuando la conexión nueva funcione, actualiza Fail2Ban y las reglas de monitorización para que utilicen el puerto SSH nuevo.
- MagnusBilling 8 utiliza PJSIP. No copies la opción bindport del antiguo chan_sip. Cambia el transporte PJSIP administrado únicamente después de comprobar cómo genera tu instalación la configuración de Asterisk; después actualiza conjuntamente el firewall, los troncales, los endpoints y la señalización externa.
- Después de un cambio SIP, confirma el transporte con asterisk -rx "pjsip show transports" y prueba llamadas entrantes y salientes.
# Ejemplo solamente cuando firewalld sea el firewall activo
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
# Valida antes de recargar SSH
sshd -t
systemctl reload ssh 2. Activa la autenticación de dos factores
Una contraseña por sí sola no debe proteger una cuenta de administrador. Activa un método de autenticación de dos factores mantenido y compatible con tu instalación de MagnusBilling y exígelo a los usuarios privilegiados.
- Haz que el 2FA sea obligatorio para los administradores.
- Actívalo para revendedores, personal de soporte y otros usuarios con acceso sensible.
- Guarda los códigos de recuperación fuera del servidor y prueba el proceso de recuperación.
- No permitas que varias personas compartan una misma cuenta administrativa; las cuentas individuales mantienen la trazabilidad.
3. Utiliza un dominio y HTTPS
No operes el panel administrativo mediante HTTP sin cifrar. Asigna un hostname dedicado, emite un certificado de confianza y redirige el tráfico del navegador a HTTPS. El puerto 80 puede permanecer disponible para la validación ACME o una redirección estricta; la sesión autenticada debe utilizar HTTPS.
apt update
apt install certbot python3-certbot-apache -y
certbot --apache 4. Activa reCAPTCHA
reCAPTCHA puede dificultar los abusos automatizados del inicio de sesión, pero complementa —y no sustituye— las credenciales fuertes, el 2FA, la limitación de intentos y las restricciones por IP. Crea las claves para el hostname exacto del panel e introdúcelas en la configuración de MagnusBilling.
- Utiliza el hostname de producción al registrar el sitio.
- Confirma que el inicio de sesión sigue funcionando después de activarlo.
- Documenta una vía de recuperación por si el servicio externo de verificación no está disponible.
Settings → buscar "recaptcha" 5. Coloca un proxy SIP delante de Asterisk
En un entorno VoIP público de producción, implementa OpenSIPS o Kamailio en el borde SIP en lugar de exponer directamente el backend Asterisk.
- Filtra la señalización malformada o no deseada antes de que llegue a Asterisk.
- Aplica límites de tasa y controles contra floods en el borde.
- Oculta la topología del backend y expone solamente las rutas de señalización necesarias.
- Centraliza el enrutamiento, las listas de acceso y la observabilidad para varios backends.
Internet
↓
OpenSIPS / Kamailio
↓
Asterisk 20 + MagnusBilling 8 6. Prefiere la autenticación SIP por IP para peers estables
Cuando un operador o peer de confianza dispone de direcciones de origen estables y documentadas, la identificación por IP elimina la posibilidad de adivinar contraseñas en esa relación. Limita la regla a los intervalos de direcciones verificados más pequeños.
- No utilices redes amplias del proveedor cuando existan intervalos precisos.
- Mantén un proceso documentado para los cambios de IP del operador.
- Los usuarios móviles y endpoints dinámicos normalmente siguen necesitando autenticación digest; proporciona a cada endpoint un secreto largo, aleatorio y único.
- Combina la autenticación con ACL, limitación de tasa, límites por endpoint y monitorización de fraude.
- Prueba las rutas de emergencia, entrantes y salientes después de cambiar la identificación del troncal.
7. Utiliza autenticación SSH mediante clave
Instala y prueba una clave antes de desactivar el acceso por contraseña. Ed25519 es una buena opción predeterminada para claves nuevas; conserva RSA únicamente cuando la compatibilidad lo exija.
ssh-keygen -t ed25519 -a 100
ssh-copy-id -p 2222 root@IP_DEL_SERVIDOR
# /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
sshd -t
systemctl reload ssh 8. Mantén actualizados el firewall, Fail2Ban y el software
Las instalaciones de MagnusBilling 8 incluyen Fail2Ban y configuración del firewall del host. Revisa su estado después de cambios de red o puertos e investiga los fallos repetidos de autenticación, en lugar de suponer que los bloqueos automáticos cubren todos los ataques.
- Haz una copia de seguridad de la base de datos, de /etc/asterisk y de las personalizaciones locales antes de actualizar.
- Revisa las notas de versión y migración antes de modificar un servidor de producción.
- Ejecuta las actualizaciones durante una ventana de mantenimiento y conserva una vía de reversión probada.
- Después de actualizar, verifica el panel, las tareas cron, los endpoints PJSIP, los troncales, las llamadas entrantes y salientes, la facturación y los registros.
- Aplica periódicamente las actualizaciones de seguridad de Debian y reinicia cuando lo requieran cambios del kernel o de bibliotecas críticas.
/var/www/html/mbilling/protected/commands/update.sh 9. Sustituye el acceso administrativo predeterminado
Cambia inmediatamente la contraseña inicial. Crea un administrador nominal para cada operador y confirma que funciona antes de desactivar o eliminar una cuenta predeterminada.
- Evita nombres de usuario predecibles y cuentas administrativas compartidas.
- Concede solamente los permisos que necesite cada operador.
- Elimina o desactiva las cuentas que ya no se utilicen.
- Restringe cada usuario del panel a las IP autorizadas mediante SSH cuando ese modelo operativo sea adecuado para el equipo.
Restringir el acceso al panel por IP autorizada mediante SSH
10. Genera contraseñas fuertes y únicas
Utiliza un gestor de contraseñas y un secreto único para cada cuenta del panel, endpoint SIP, usuario de base de datos e integración. Un secreto generado de al menos 16 caracteres es una base práctica; las credenciales privilegiadas y de máquinas deben ser más largas.
- Nunca reutilices la contraseña del administrador del panel para SIP, SSH o la base de datos.
- No envíes credenciales mediante tickets, mensajes de chat o capturas de pantalla.
- Cambia cualquier secreto que pueda haber quedado expuesto y revisa los registros en busca de uso indebido.
- Mantén los secretos fuera del código fuente, el historial del shell y los ejemplos públicos de configuración.
openssl rand -base64 24 Una base de producción por capas
Una instalación protegida de MagnusBilling combina HTTPS, 2FA, restricciones del panel por IP, claves SSH, un firewall restrictivo, Fail2Ban, autenticación PJSIP segura, un borde SIP cuando corresponda, software actualizado, secretos fuertes, monitorización y copias de seguridad recuperables. Ningún control individual sustituye a los demás.
La infraestructura VoIP expuesta a Internet será examinada por robots. El objetivo es reducir las rutas de ataque accesibles, dificultar el acceso no autorizado, detectar pronto los comportamientos anómalos y conservar una vía de recuperación probada si falla algún control.
Artículo original y nota de versión
Esta guía reescrita restaura todos los temas del artículo archivado y sustituye las recomendaciones antiguas de la época de chan_sip por indicaciones para MagnusBilling 8 y PJSIP. Antes de modificar un servidor de producción, confirma los comandos y las rutas de configuración generadas en la versión exacta instalada.
