#!/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 } }