Links temporários de listas de IP permitidos: o que a concessão realmente admite
Um link que abre uma porta do firewall admite um endereço, não uma pessoa. Defina o escopo, exija confirmação deliberada e teste repetição, expiração e IPv6.
Transformar um clique numa regra temporária de firewall é conveniente, e também constrói um sistema de autorização que decide quem pode alcançar um serviço. O que ele emite é um endereço em vez de uma pessoa, e essa diferença importa no momento em que duas pessoas partilham um NAT. Limite o escopo da concessão, confirme-a de forma deliberada e dê significado à expiração antes de o link ser construído. A decisão à sua frente é onde colocar a fronteira, não se deve existir uma.
Decida a que pergunta a concessão responde
Comece pelo requisito. Se uma pessoa nomeada tem de alcançar o serviço e a aplicação já autentica essa pessoa, um gateway autenticado mantém a identidade no ponto de aplicação e não precisa de qualquer admissão por endereço. Se o alvo for um agente de compilação, uma porta de salto administrativa ou um equipamento que não pode participar no início de sessão do utilizador, uma concessão de endereço com escopo limitado pode ser o único controlo prático disponível.
Escolher a admissão por endereço para uma aplicação virada ao utilizador desloca o verdadeiro problema de autorização para outro lugar, e o portal herda então a culpa por uma lacuna que nunca fechou.
Limite o pedido no servidor
O navegador não deve escolher o destino, a porta ou o prefixo. O portal resolve o serviço a partir dos seus próprios registos e verifica o direito com um teste do lado do servidor, que é o mesmo princípio que as orientações de autorização da OWASP aplicam a cada pedido. A derivação do endereço também pertence à fronteira protegida: quando um proxy inverso comunica o endereço do cliente, aceite apenas a cadeia de proxies configurada e o seu tratamento documentado dos cabeçalhos. Um cabeçalho de encaminhamento fornecido por um visitante é uma afirmação sobre a proveniência, não uma prova dela.
Depois verifique se o portal e o serviço observam a mesma fonte. O túnel dividido, um salto de proxy e IPv4 face a IPv6 podem dar a dois destinos dois endereços diferentes, pelo que uma concessão ativada por um caminho pode não cobrir o pedido seguinte.
Mostre a concessão antes de a instalar
Abrir um link deveria mostrar o serviço proposto, a fonte observada e a duração, e ainda não alterar nada. Esse único passo transforma o link recebido por correio de uma ação numa proposta, e impede que um robô de pré-visualização ou um analisador de correio concedam acesso só por o obter.
A confirmação deveria ser um pedido que altera o estado com as defesas habituais contra sítios cruzados e de origem. O token deveria ser de uso único e consumido de forma atómica no momento em que a regra é instalada, e o registo deveria capturar o proprietário, o serviço, o endereço, o identificador da concessão e a expiração sem nunca registar o token em bruto.
A entrega do token merece o mesmo cuidado que a própria regra. Um link expirado ou já consumido que ainda produz uma regra é uma segunda porta equipada com a mesma chave.
O endereço é partilhado mesmo enquanto a concessão vive
Um NAT de escritório, um NAT de operadora e uma saída de VPN partilhada colocam cada um várias pessoas atrás de um endereço. Admitir esse endereço admite todos os que estão atrás — no que respeita à fronteira seguinte do serviço —, sem provar nada sobre quem detém a conta que o serviço espera.
Remover a regra também não é uma desconexão universal. As ligações estabelecidas, os tokens de aplicação em cache e as sessões de longa duração podem sobreviver à regra minutos ou muito mais, pelo que o tempo de vida escolhido deve refletir o que o serviço faz depois da admissão e não apenas quanto tempo a regra existe.
Teste quatro casos e ambas as famílias de endereços
Uma concessão vale tanto quanto os quatro casos que supera: um pedido novo permitido, um requerente não aprovado, uma repetição do mesmo link e o mesmo pedido depois da expiração.
Depois teste cada família separadamente, porque o endereço de origem que o serviço observa pode diferir entre elas.
dig +short A service.example.com
dig +short AAAA service.example.com
curl -4 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
curl -6 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
O resultado útil é uma decisão de admissão temporária e auditável sob a autorização normal do utilizador, em vez de uma abertura permanente que leve o nome de quem clicou primeiro.