nftables bloqueava incondicionalmente SIP (5060/udp) e RTP (10000-20000)
vindos da interface LAN — impedia qualquer softphone real de registrar,
já que o OpenSIPS que ficaria na frente (docs/OPENSIPS.md) não foi
implantado. Liberado para toda a faixa RFC1918 (10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16), mantendo AMI/ARI bloqueados incondicionalmente. Aplicado
ao vivo no servidor.
Ramais: agora dá para ver e trocar a senha SIP diretamente no formulário
de edição (GET /extensions/:id/password, decifra sob demanda — diferente
da senha de login, a senha SIP é cifrada, não hasheada, porque o próprio
Asterisk precisa dela em texto puro para autenticar; expor sob permissão
extensions.update e auditado é razoável). Evita ter que redefinir toda
vez que o operador esquece a senha configurada num softphone.
- infrastructure/docker/asterisk.Dockerfile: Asterisk 22.10.1 LTS compilado
do fonte oficial (Debian trixie nao distribui mais o pacote asterisk),
com PJSIP, AMI, ARI, res_odbc/res_config_odbc, cdr_adaptive_odbc,
cel_odbc, app_queue
- infrastructure/asterisk/config: templates renderizados no entrypoint
(secrets via envsubst, nunca versionados) + sorcery.conf/extconfig.conf
para PJSIP realtime, dialplan de teste (extensao 600)
- infrastructure/postgres/init/002-asterisk-realtime.sql: tabelas
ps_endpoints/ps_auths/ps_aors/ps_contacts/ps_endpoint_id_ips/
ps_registrations/cdr/cel no schema 'asterisk'
- infrastructure/nftables: protege AMI/ARI/SIP contra acesso pela LAN
(interface ens18), trazido da Fase 9 do TODO para ja, sem afetar SSH
nem a rede interna do Docker
- docker-compose.yml: servico asterisk em network_mode: host (RTP);
Postgres publicado em 127.0.0.1:5432 (nao 0.0.0.0) para o Asterisk
alcanca-lo, ja que host network nao enxerga a rede Docker interna
Testado: AMI login, ARI com auth (401 sem auth), pjsip realtime
consultando Postgres sem erro, dialplan originate -> CDR e CEL gravados
corretamente, healthcheck do compose passando.