Temos uma rede com roteador e DNS interno em um Windows Server 2019. O DNS é visível externamente através de um NAT no roteador (UDP 53 -> IP do servidor, isso é necessário porque somos um primário oculto/ autoridade DNS para o nosso domínio).
Há algum tempo, recebemos solicitações maliciosas de DNS como parte de um ataque de amplificação.
Estamos usando o Response Rate Limiting conforme este artigo usando o Set-DNSServerresponseratelimiting
comando ... até agora tudo bem.
Agora, o mesmo artigo e também outro artigo descrevem um método como a recursão pode ser limitada apenas aos clientes internos.
Essencialmente, ambos os artigos dizem que você desativa a recursão e adiciona uma regra que permite isso para clientes que atendem a determinados critérios.
O primeiro passo é desativar a recursão:
Set-DnsServerRecursionScope -Name . -EnableRecursion $false /* or $true */
Estou testando isso com um Mac com um IP 192.168.1.149
e usando um comando dig como dig -4 @server some.obscuredomain.com
e verificando se o comando dig imprime um aviso de que a recursão está desabilitada. Isso funciona dependendo da configuração geral. Se eu ativar ou desativar isso com o comando acima, o dig
comando mostrará (ou não) o aviso sobre a recursão de acordo. Até aí tudo bem também.
A sequência completa de comandos para desativá-lo e adicionar uma exceção é esta:
Add-DnsServerClientSubnet -Name "Internal-24" -IPv4Subnet "192.168.1.0/24" -PassThru
Set-DnsServerRecursionScope -Name . -EnableRecursion $False
Add-DnsServerRecursionScope -Name "InternalClients" -EnableRecursion $True
Add-DnsServerQueryResolutionPolicy -Name "AllowInternal" -Action ALLOW -ApplyOnRecursion -RecursionScope "InternalClients" -ClientSubnet "EQ,Internal-24"
Porém, eu utilizo essa sequência de comandos, não importa o que eu faça, não consigo que ela seja recursiva para Mac.
Eu pensei que poderia ter a sub-rede errada, mas então, para um teste, acabei de usar "NE,Internal-24"
, pensando que qualquer uma das duas cláusulas deveria corresponder à solicitação (ou EQ ou NE deveria corresponder a essas solicitações, você está em uma sub-rede ou está não). Eu também tentei -Computername
ou -Fqdn
. Aparentemente nada faz diferença.
Alguma ideia?
Gostaria de ver se consigo colocar algo como um firewall DNS Cloudflare na frente do seu servidor DNS. O Cloudflare DNS Firewall faz proxy de todas as consultas DNS para seus servidores de nomes por meio da rede global da Cloudflare. Esta ação protege os servidores de nomes upstream contra ataques DDoS e reduz a carga armazenando em cache as respostas DNS.
https://developers.cloudflare.com/dns/dns-firewall/
Encontrei um exemplo em docs.microsoft.com para permitir recursão para clientes internos
O primeiro comando cria um escopo de recursão chamado InternalClients. A recursão está habilitada para este escopo.
O segundo comando modifica o escopo de recursão padrão usando o cmdlet Set-DnsServerRecursionScope. O escopo padrão, identificado por um ponto (.), tem a recursão desabilitada.
O comando final cria uma política que usa o escopo InternalClients. Para esse escopo, no endereço da interface do servidor especificado, a política permite a recursão.
https://learn.microsoft.com/en-us/powershell/module/dnsserver/add-dnsserverqueryresolutionpolicy?view=windowsserver2022-ps
Quando quiser usar -ClientSubnet, primeiro você precisa adicionar a sub-rede usando
Add-DnsServerClientSubnet -Name "InternetNaLSubnet" -IPv4Subnet 172.21.33.0/16 -PassThru
E então você pode usar
Acho que seus comandos estão realmente funcionando.
Tentei isso aqui primeiro com um cliente Windows e usei
clear-dnsservercache
no servidor após cada teste com esses comandos.Parece que um cliente Windows obtém ou não a resposta esperada (por exemplo, pode ou não resolver um
ping
nome), dependendo doAdd-DnsServerQueryResolutionPolicy
comando e dos parâmetros.Um cliente macOS fez o mesmo (obteve as respostas reais para endereços IP em um
dig
ou poderia resolver umping
comando). No entanto, o aviso de recursão nodig
parece estar incorreto , o que acho que é apenas um problema cosmético.