redes

Significa: Application Level Gateway

Código num NAT que lê e reescreve endereços dentro do payload de uma aplicação, para protocolos como o FTP sobreviverem à tradução.

O NAT reescreve headers, mas protocolos como FTP, SIP e H.323 também escrevem endereços no payload. Um Application Level Gateway (RFC 2663) conserta isso um protocolo de cada vez; a mesma intromissão quebra tráfego protegido ou que já sabe lidar com NAT, e por isso a RFC 4787 quer os ALGs de UDP desligados.

O FTP é o modelo, e a RFC 3022 o chama de ALG mais popular nos equipamentos de NAT. O comando PORT e a resposta PASV levam endereço e porta em ASCII, então o ALG os reescreve e cria o mapeamento para a conexão de dados que anunciam. A reescrita pode mudar o tamanho: com a porta 51234 escrita 200,34, a string 10,0,0,10,200,34 tem 16 caracteres e 203,0,113,1,200,34 tem 18, então o ALG também precisa deslocar os números de sequência TCP no resto da sessão. No Linux, isso são os helpers do conntrack, que criam expectations, e a conexão de dados aparece como RELATED.

Todo ALG é um contorno específico de um protocolo, e falha onde o payload é protegido. Um payload codificado o desativa, a menos que ele tenha a chave; um DNS-ALG que reescreve respostas quebra as assinaturas DNSSEC; e NATs que reescreviam qualquer campo com o próprio endereço público quebravam o STUN, até o STUN passar a usar XOR nos endereços. A RFC 4787 diz que ALGs de NAT para UDP devem ser desligados, e a RFC 5382 recomenda desativar por padrão todo ALG de TCP, menos o de FTP.

Atrás de NAT de operadora, o assinante só conta com os ALGs que o provedor roda, e a RFC 6333 registra que nenhum AFTR consegue implementar todos os atuais e futuros.

Também conhecido como: nat alg, application layer gateway, application-level gateway, ftp alg, conntrack helper

← Todos os verbetes do glossário