我们有一个带有路由器的网络和 Windows Server 2019 上的内部 DNS。DNS 可通过路由器上的 NAT 在外部看到(UDP 53 -> 服务器 IP,这是必需的,因为我们是域的隐藏主要/权威 DNS)。
一段时间以来,我们一直在接收恶意 DNS 请求,作为放大攻击的一部分。
我们正在按照以下规定使用响应率限制本文使用Set-DNSServerresponseratelimiting
命令...到目前为止一切顺利。
现在,同一篇文章,另一篇文章描述一种方法,如何将递归限制在内部客户端。
本质上,这两篇文章都说你关闭递归,然后添加一条规则,允许符合特定条件的客户端使用递归。
第一步是关闭递归:
Set-DnsServerRecursionScope -Name . -EnableRecursion $false /* or $true */
我正在使用 IP 为 的 Mac 测试此操作192.168.1.149
,并使用 dig 命令(如)dig -4 @server some.obscuredomain.com
,并检查 dig 命令是否打印警告,提示递归已禁用。这取决于常规设置。如果我使用上述命令打开或关闭此功能,则该dig
命令会相应地显示(或不显示)有关递归的警告。到目前为止一切顺利。
禁用它并添加例外的完整命令序列如下:
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"
但是,我使用这个命令序列,无论我做什么,我都无法让它在 Mac 上递归。
我以为我可能弄错了子网,但后来为了进行测试我只使用了"NE,Internal-24"
,认为两个子句中的任何一个都应该与请求匹配(它 EQ 或 NE 都应该与这些请求匹配,您在子网上或不在)。我也尝试了-Computername
或-Fqdn
。显然没有什么区别。
有任何想法吗?
答案1
我认为您的命令确实有效。
我首先在 Windows 客户端上尝试了这一点,然后clear-dnsservercache
在每次测试之后使用这些命令在服务器上使用。
看起来 Windows 客户端是否能按预期获得答案(例如能否解析ping
名称),取决于Add-DnsServerQueryResolutionPolicy
命令和参数。
macOS 客户端也做了同样的事情(得到了 IP 地址的实际答案dig
或可以解析命令ping
)。但是,中的递归警告dig
似乎不正确,我猜这只是一个外观问题。
答案2
我想看看是否可以在您的 DNS 服务器前面放置类似 Cloudflare DNS 防火墙的东西。Cloudflare DNS 防火墙通过 Cloudflare 的全球网络将所有 DNS 查询代理到您的名称服务器。此操作可保护上游名称服务器免受 DDoS 攻击,并通过缓存 DNS 响应来减少负载。
https://developers.cloudflare.com/dns/dns-firewall/
我在 docs.microsoft.com 上找到了一个允许内部客户端递归的示例
PS C:\> Add-DnsServerRecursionScope -Name "InternalClients" -EnableRecursion $True
PS C:\> Set-DnsServerRecursionScope -Name . -EnableRecursion $False
PS C:\> Add-DnsServerQueryResolutionPolicy -Name "SplitBrainPolicy" -Action ALLOW -ApplyOnRecursion -RecursionScope "InternalClients" -ServerInterfaceIP "EQ,10.0.0.34" -PassThru
第一个命令创建一个名为 InternalClients 的递归作用域。此作用域启用了递归。
第二条命令使用 Set-DnsServerRecursionScope cmdlet 修改默认递归范围。默认范围以点 (.) 标识,已禁用递归。
最后一条命令创建使用 InternalClients 范围的策略。对于该范围,在指定的服务器接口地址上,该策略允许递归。
当您想要使用 -ClientSubnet 时,首先需要使用以下方法添加子网Add-DnsServerClientSubnet -Name "InternetNaLSubnet" -IPv4Subnet 172.21.33.0/16 -PassThru
然后你可以使用
-ClientSubnet "EQ,InternetNaLSubnet"