feat: add asterisk pjsip integration
- 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.
This commit is contained in:
47
infrastructure/nftables/b2bcall.nft
Normal file
47
infrastructure/nftables/b2bcall.nft
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/usr/sbin/nft -f
|
||||
# Regras de firewall do B2BCall.
|
||||
#
|
||||
# IMPORTANTE: este arquivo NUNCA usa "flush ruleset" — o Docker gerencia suas
|
||||
# próprias tabelas iptables-nft (visíveis como "table ip nat" / "table ip
|
||||
# filter" com o aviso "managed by iptables-nft, do not touch"). Uma tabela
|
||||
# separada (`inet b2bcall_fw`) convive com elas sem conflito: cada tabela
|
||||
# anexada ao hook "input" é avaliada em ordem de prioridade; um veredito de
|
||||
# "drop" nesta tabela encerra o processamento do pacote antes mesmo de ele
|
||||
# chegar às regras do Docker, sem jamais apagar as regras do Docker.
|
||||
#
|
||||
# SSH (porta 22) é sempre permitido — nunca deve ficar bloqueado.
|
||||
#
|
||||
# Instalado/atualizado via systemd unit b2bcall-nftables.service (ver
|
||||
# infrastructure/nftables/b2bcall-nftables.service), que roda:
|
||||
# nft delete table inet b2bcall_fw (ignora erro se não existir)
|
||||
# nft -f este arquivo
|
||||
# após o docker.service subir.
|
||||
|
||||
table inet b2bcall_fw {
|
||||
chain input_admin_protect {
|
||||
type filter hook input priority filter - 1; policy accept;
|
||||
|
||||
# Loopback sempre liberado
|
||||
iifname "lo" accept
|
||||
|
||||
# Conexões já estabelecidas / relacionadas sempre liberadas
|
||||
ct state established,related accept
|
||||
|
||||
# Redes internas dos bridges Docker (comunicação entre containers e
|
||||
# entre containers <-> serviços do Asterisk em host network)
|
||||
ip saddr 172.16.0.0/12 accept
|
||||
|
||||
# SSH nunca é bloqueado
|
||||
tcp dport 22 accept
|
||||
|
||||
# --- Serviços administrativos/telefônicos sensíveis do Asterisk ---
|
||||
# Nunca devem ser alcançáveis pela LAN (interface ens18). Habilitar
|
||||
# exceções pontuais aqui somente quando o IP do OpenSIPS/tronco for
|
||||
# conhecido e explicitamente autorizado (ver docs/OPENSIPS.md, a
|
||||
# ser criado na Fase 2 de telefonia).
|
||||
iifname "ens18" tcp dport { 5038, 8088, 8089 } counter drop
|
||||
iifname "ens18" tcp dport { 5060, 5061 } counter drop
|
||||
iifname "ens18" udp dport 5060 counter drop
|
||||
iifname "ens18" udp dport 10000-20000 counter drop
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user