Grupos de pares do WireGuard no concentrador: propriedade da origem mais política
Mantenha os grupos de pares separados com endereços de origem estreitos por par e uma política de encaminhamento, sem uma interface de túnel separada para cada grupo.
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.