Um concentrador que executa WireGuard pode manter os grupos de pares separados sem uma interface ou tabela de rotas separada por grupo. Dois mecanismos fazem o trabalho, e confundi-los é a razão habitual de uma política parecer correta e não fazer nada. Uma camada decide quem pode reivindicar um endereço de origem. A outra decide para onde esse pacote pode sair.

Duas tarefas, mantidas à parte

A camada de túnel responde a uma pergunta estreita: a chave deste par autorizou este endereço de origem interno. A camada de encaminhamento responde a uma mais ampla: este pacote pode sair em direção a esse destino. Nenhuma responde à pergunta da outra, e nenhuma é sozinha uma política de acesso completa.

Essa separação é a razão pela qual um par pode estar autenticado, corretamente endereçado e ainda assim não conseguir alcançar um hospedeiro que não deveria alcançar. Também explica o contrário: uma regra de firewall que permite tudo não prova nada sobre quem pode reivindicar qual endereço.

Projete as duas camadas em conjunto e depois teste ambas. Uma configuração correta numa camada e não testada na outra falha aberta ou fechada conforme o valor padrão.

Dê a cada par apenas o seu próprio endereço

Pares com vários hospedeiros tentam convencê-lo a conceder todo o intervalo do grupo no lado do servidor. Essa permissão é uma reivindicação de endereço de origem, por isso um cliente comprometido ou mal configurado pode apresentar qualquer endereço do intervalo e o túnel irá aceitá-lo. Atribua um /32 por par para o seu próprio endereço interno. Defina intervalos de grupo apenas nos clientes, onde eles descrevem quais destinos esse cliente pode alcançar em vez de quais origens pode usar.

O firewall então compara uma origem em que pode confiar. Uma regra escrita para o intervalo do grupo continua a ser um agrupamento útil, e só se torna significativa quando nenhum par isolado pode reivindicar um endereço que pertence a outro membro.

Escreva a política de encaminhamento que separa os grupos

O tráfego interessante aqui entra e sai pela mesma interface de túnel, portanto atravessa o caminho de encaminhamento e não o caminho de entrada do hospedeiro. As regras pertencem à cadeia de encaminhamento existente do gestor de firewall que for dono do hospedeiro, e são fragmentos, não um conjunto de regras completo.

iifname "wg0" oifname "wg0" ip saddr 10.66.10.0/24 ip daddr 10.66.10.0/24 accept
iifname "wg0" oifname "wg0" ip saddr 10.66.20.0/24 ip daddr 10.66.20.0/24 accept
iifname "wg0" oifname "wg0" drop

As duas primeiras regras permitem o tráfego dentro de cada grupo. A última bloqueia tudo o resto que atravessa essa interface, e é isso que produz o isolamento entre os grupos. Acrescente regras explícitas para a outra família de endereços se precisar delas, porque um descarte escrito para IPv4 não autoriza nem descreve o comportamento do IPv6.

A ordem decide se a política se aplica

A ordem das regras importa mais do que o próprio fragmento. Uma regra genérica que aceita ligações estabelecidas e está colocada antes destas entradas deixa um fluxo antigo entre grupos continuar, pelo que o isolamento só se aplica a ligações novas. Decida qual desses dois resultados quer antes de recarregar.

Um veredicto de aceitação também nem sempre é definitivo entre cadeias no mesmo gancho. Se outra cadeia base for executada mais tarde, a política efetiva é a combinação, por isso inspecione os contadores em vez do ficheiro que editou. Os contadores são a prova mais barata disponível. Uma regra sem contagem de pacotes não corresponde, e uma regra que corresponde enquanto uma cadeia posterior aceita diz-lhe que o descarte está no lugar errado.

Teste a matriz, não o número de ficheiros

Construa uma matriz pequena de resultados esperados e verifique cada célula. Do grupo A para o grupo A deve funcionar, do grupo B para o grupo B deve funcionar, e de A para B não deve, em ambos os sentidos e para ambas as famílias de endereços se as suportar.

nft list ruleset
wg show wg0 allowed-ips
ping -c 2 10.66.10.5
conntrack -L -s 10.66.20.7 2>/dev/null | head

As duas primeiras mostram o que está configurado. O ping a partir de um membro do grupo errado mostra o que acontece realmente. A listagem de conntrack mostra se um fluxo mais antigo ainda está a ser aceite, e é assim que uma alteração de isolamento falha silenciosamente ao entrar em vigor.

Os serviços de hospedeiro no concentrador e o acesso a uma LAN por trás dele são caminhos separados com política separada. Registe quais deles a matriz cobre, porque um teste que só verifica tráfego entre pares não diz nada sobre nenhum dos dois.

Artigos relacionados