Su Debian 11 e Debian 10 Asterisk si installa bene, ma conviene farlo con un criterio preciso: prima dipendenze e utente dedicato, poi compilazione pulita, quindi configurazione minima per far registrare un interno e verificare audio, codice di risposta e log. Se salti i controlli iniziali, ti ritrovi con un PBX che parte ma non instrada chiamate, oppure con un servizio che sembra sano e invece fallisce al primo INVITE.
Qui l’obiettivo è portare Asterisk in stato operativo su un host Debian 10 o 11, con una base adatta a laboratorio, piccolo centralino interno o primo deployment in produzione. Non forzo moduli inutili: installo il necessario, lascio traccia dei file toccati e chiudo con i controlli che ti dicono subito se il nodo è davvero pronto.
Prerequisiti e scelta della versione
Debian 11 include pacchetti più aggiornati rispetto a Debian 10, ma per Asterisk il punto non è solo la versione della distro: conta anche la versione del PBX, il supporto ai codec che ti servono e la strategia di manutenzione. Se vuoi stabilità e meno dipendenze da repository esterni, puoi usare i pacchetti della distribuzione; se invece ti servono funzionalità recenti o una release specifica, la compilazione da sorgente è la strada più prevedibile.
Assumo questi elementi minimi: accesso root o sudo, host aggiornato, una rete raggiungibile, e un piano chiaro per SIP/RTP. Se il server è dietro NAT, devi sapere già qual è l’IP pubblico o il reverse proxy/port forward da usare; senza questo, la parte audio è il primo punto che si rompe.
Aggiornamento sistema e dipendenze
Parti da un sistema allineato, poi installa i pacchetti di compilazione e le librerie base. Questo riduce il rischio di build parziali e di moduli mancanti che emergono solo a runtime.
Comandi consigliati:
sudo apt update
sudo apt -y upgrade
sudo apt -y install build-essential wget curl git subversion \
libncurses5-dev libnewt-dev libxml2-dev libsqlite3-dev uuid-dev \
libjansson-dev libssl-dev libedit-dev libcurl4-openssl-dev \
libspeexdsp-dev libopus-dev pkg-config autoconf automake libtool \
python3
Se installi da pacchetto e non da sorgente, non ti servono tutte queste librerie; se compili Asterisk con moduli codec e supporti aggiuntivi, invece, sono quelle che evitano il classico errore di configurazione che ti lascia mezzo stack disabilitato.
Utente dedicato, directory e permessi
Non far girare Asterisk come root più del necessario. Il servizio può partire con privilegi elevati per aprire porte privilegiate o accedere a dispositivi specifici, ma l’esercizio ordinario va lasciato a un utente dedicato. Su Debian l’approccio più pulito è creare utente e gruppi, poi assegnare ownership coerente alle directory di lavoro.
sudo adduser --system --group --home /var/lib/asterisk --no-create-home asterisk
sudo mkdir -p /etc/asterisk /var/lib/asterisk /var/log/asterisk /var/spool/asterisk
sudo chown -R asterisk:asterisk /etc/asterisk /var/lib/asterisk /var/log/asterisk /var/spool/asterisk
Se usi pacchetti Debian, alcune directory possono essere già create dal maintainer script. In quel caso verifica prima di cambiare ownership in massa, soprattutto su `/etc/asterisk`, perché un chown indiscriminato può sporcare file gestiti dal pacchetto.
Installazione da sorgente: percorso pulito e ripetibile
La compilazione è la scelta più comune quando vuoi controllo sui moduli. Il flusso corretto è: scarichi il sorgente, configuri, compili, installi i moduli e poi il materiale di esempio minimo. Non mescolare file di esempio e configurazioni personalizzate senza aver deciso cosa vuoi tenere, perché Asterisk è rapido a partire ma altrettanto rapido a confondere file generati e file editati a mano.
cd /usr/src
sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
sudo tar xzf asterisk-18-current.tar.gz
cd asterisk-18.*
sudo contrib/scripts/install_prereq install
sudo ./configure
sudo make menuselect
Nel menu di selezione abilita solo ciò che ti serve davvero. Per un’installazione base, di solito bastano core, chan_pjsip, codec essenziali e supporto ai log. Se non hai una richiesta esplicita per chan_sip, evita di costruire dipendenze e moduli vecchi: meno superficie, meno manutenzione.
sudo make -j"$(nproc)"
sudo make install
sudo make samples
sudo make config
sudo ldconfig
Il comando `make samples` è comodo per partire, ma non va lasciato come stato finale senza revisione. Le configurazioni di esempio sono utili per capire il formato, non per andare in esercizio così come sono.
Avvio del servizio e verifica iniziale
Dopo l’installazione, il primo controllo non è la chiamata: è il demone. Verifica che systemd veda il servizio e che il binario risponda senza errori di librerie mancanti.
sudo systemctl enable asterisk
sudo systemctl start asterisk
sudo systemctl status asterisk --no-pager
Stato atteso: `active (running)`. Se vedi `failed`, vai subito nei log. Su Debian con systemd il punto di partenza è quasi sempre `journalctl -u asterisk`, mentre i log applicativi stanno di norma in `/var/log/asterisk/` se li hai abilitati nel file di configurazione.
sudo journalctl -u asterisk -n 100 --no-pager
sudo tail -n 100 /var/log/asterisk/messages
Se il servizio sale ma non accetta CLI, prova a entrare nella console locale. È il modo più veloce per capire se il processo è vivo e se il socket di controllo è disponibile.
sudo asterisk -rvvv
Configurazione minima per SIP con PJSIP
Su installazioni nuove conviene usare PJSIP. È più ordinato, più flessibile e meglio allineato alle versioni recenti di Asterisk. La configurazione minima si divide in tre file: trasporto, endpoint e identificazione. Se sei dietro NAT, aggiungi subito i parametri corretti; rimandarli significa scoprire il problema quando l’audio va in una sola direzione.
Un esempio essenziale in `/etc/asterisk/pjsip.conf`:
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
[1001]
type=endpoint
transport=transport-udp
context=internal
disallow=all
allow=ulaw,alaw
auth=auth1001
aors=1001
[auth1001]
type=auth
auth_type=userpass
username=1001
password=CAMBIA_QUESTA_PASSWORD
[1001]
type=aor
max_contacts=1
La password qui è un segnaposto: va sostituita subito con un valore forte e gestito fuori dal testo, idealmente con permessi stretti sul file. Non lasciare credenziali in chiaro in repository o backup condivisi.
Nel file `/etc/asterisk/extensions.conf` puoi impostare un contesto minimo per testare le chiamate interne:
[internal]
exten => 1001,1,Dial(PJSIP/1001,20)
same => n,Hangup()
Questo ti basta per validare registrazione e instradamento interno. Se vuoi uscire verso un trunk, quella è una fase successiva: prima chiudi il cerchio interno, poi apri il routing esterno.
Ricarica configurazione e test di registrazione
Dopo ogni modifica, ricarica i moduli in modo controllato. Evita il riavvio completo se non serve: per il troubleshooting è meglio distinguere tra errore di configurazione e problema di startup.
sudo asterisk -rx "module reload"
sudo asterisk -rx "pjsip reload"
sudo asterisk -rx "pjsip show endpoints"
Atteso: l’endpoint `1001` deve comparire nell’elenco. Se non compare, controlla sintassi e duplicati nel file `pjsip.conf`. Se compare ma resta `Unavailable`, il problema sta nel client SIP, nella rete o nella reachability del trasporto.
Dal lato client SIP, imposta account e server con l’IP del PBX, utente `1001` e password coerente. Poi verifica la registrazione con il comando del softphone o con la CLI Asterisk:
sudo asterisk -rx "pjsip show contacts"
sudo asterisk -rx "pjsip show contact 1001"
Se il contatto non compare, il client non sta registrando. Se compare ma le chiamate falliscono, il passo successivo è guardare dialplan e log SIP. In questa fase non ha senso toccare codec o NAT a caso: prima capisci se il problema è registrazione, routing o media.
Firewall, porte SIP e RTP
Un PBX che risponde in locale ma non dall’esterno spesso è solo un problema di porte. Per PJSIP su UDP la porta SIP standard è 5060, mentre l’audio usa la finestra RTP configurata nel file `rtp.conf`, spesso 10000-20000. Se blocchi una di queste due aree, la chiamata può anche partire ma senza audio o senza risposta corretta.
sudo ss -lntup | grep asterisk
sudo ufw allow 5060/udp
sudo ufw allow 10000:20000/udp
Se usi nftables o un firewall centralizzato, applica le regole nel punto di controllo reale, non solo sul nodo. Il test utile è semplice: dal client esterno il SIP deve registrarsi e il flusso RTP deve passare in entrambe le direzioni.
Audio, NAT e parametri che evitano metà dei guai
Il sintomo classico non è il fallimento totale, ma la chiamata che si aggancia e poi resta muta. Qui quasi sempre c’entrano NAT, IP pubblici non dichiarati o canali media che escono dal percorso sbagliato. Su reti con NAT imposta i parametri di localizzazione in modo esplicito nel trasporto o nell’endpoint, non affidarti al comportamento implicito.
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
local_net=192.168.0.0/16
external_media_address=203.0.113.10
external_signaling_address=203.0.113.10
Se il server è dietro NAT e il client è fuori rete, questi campi fanno la differenza tra un setup che “sembra quasi funzionare” e uno realmente usabile. Dopo la modifica, ricarica PJSIP e fai una chiamata di prova con un interno verso un altro interno o verso una music on hold, così isoli il problema media dal problema di routing.
Hardening minimo prima di esporlo in rete
Appena il servizio funziona, riduci l’esposizione. Un PBX esposto senza limiti è uno dei bersagli più banali da scandire: credenziali deboli, tentativi di registrazione, enumerazione degli interni, abuso di trunk. Non serve fare un audit pesante subito, ma almeno chiudi i varchi più evidenti.
- Consenti l’accesso SIP solo dagli IP necessari, se hai trunk o sedi remote con indirizzi noti.
- Usa password robuste e univoche per ogni account SIP.
- Disabilita moduli e codec non usati.
- Verifica che i permessi su `/etc/asterisk/` non permettano lettura indiscriminata da utenti locali non necessari.
Se puoi, affianca un controllo periodico dei log per tentativi di autenticazione falliti. Anche una semplice ricerca su `auth failure` o `Failed to authenticate` ti dà un segnale utile sull’esposizione reale del servizio.
Gestione del servizio e manutenzione
Per non trasformare il PBX in una scatola fragile, tieni ordine tra configurazione, versioni e backup. Ogni modifica a `pjsip.conf`, `extensions.conf` o ai file del dialplan dovrebbe essere tracciata, anche solo con una copia datata prima del cambio. Se il sistema cresce, passa a un repository Git privato per i file di configurazione non sensibili, con i segreti esclusi o gestiti separatamente.
sudo cp /etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf.$(date +%F)
sudo cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.$(date +%F)
Per l’aggiornamento, verifica sempre la release note di Asterisk e il changelog Debian se usi pacchetti di distribuzione. In ambito VoIP, anche una piccola variazione di comportamento su SIP o RTP può avere impatto su telefoni, gateway e trunk.
Checklist finale prima del go-live
Prima di considerare chiusa l’installazione, fai questi controlli in sequenza:
- `systemctl status asterisk` mostra `active (running)`.
- `asterisk -rx "pjsip show endpoints"` elenca gli interni previsti.
- Un client SIP si registra con successo e compare in `pjsip show contacts`.
- Una chiamata interna squilla e si sente audio in entrambe le direzioni.
- I log in `/var/log/asterisk/` non mostrano errori ripetuti su autenticazione, RTP o dialplan.
Se uno di questi punti fallisce, non andare avanti con trunk, IVR o code chiamate. Risolvi prima la base: installazione corretta, registrazione, audio e stabilità del servizio. È il modo più rapido per evitare ore di debug su un problema che in realtà nasce da un file di configurazione incompleto o da una porta bloccata.
In sintesi: Debian 10 e 11 sono entrambi adatti a ospitare Asterisk, ma la differenza la fa il metodo. Compilazione ordinata, configurazione minima, test verificabili e hardening essenziale ti portano a un PBX che non solo parte, ma resta gestibile nel tempo.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.