为 DNS 配置 ACL

网络工程 思科 cisco-nexus
2021-07-18 21:28:12

只是想在这里仔细检查我的工作,但是域端口应该是用实际的 DNS 服务器指定的,对吗?我只想允许 VLAN 5.5.5.0/24 与此服务器进行 DNS 通信。例如,如果我的 DNS 服务器是 1.1.1.1,ACL 将如下所示:

ip access-list DNS-IN
permit udp 5.5.5.0/24 1.1.1.1/32 eq domain

ip access-list DNS-OUT
permit udp 1.1.1.1/32 eq domain 5.5.5.0/24

int vlan 10
ip access-group DNS-IN in
ip access-group DNS-OUT out

VLAN 10 是 5.5.5.0/24 网络。我对在哪里放置 eq 域命令感到困惑。我假设您将域命令放在实际的 DNS 服务器 1.1.1.1 上。顺便说一下,Cisco NX-OS 接受 /24 符号,并且地址不是文字。有人可以确认语法命令是正确的吗?谢谢。

3个回答

您是在正确的方式,但很方便地在第一个位置添加序列号,即:

ip access-list DNS-IN
 10 permit udp 5.5.5.0/24 1.1.1.1/32 eq domain

如果您有疑问,您可以在最后添加“log”命令,以便查看规则的命中情况,即:

10 permit udp 5.5.5.0/24 1.1.1.1/32 eq domain log

出站 ACL 需要考虑的一件事是,您可能希望将它应用到尽可能靠近源的地方,作为入站 ACL。这可以防止您不必要地路由注定要丢弃的流量。在可能的情况下过滤入站流量可以节省路由资源。

此外,对于您的出站 ACL,您将 放在eq domainACL 条目的末尾。

另一件事是 ACL 有一个隐式deny ip any any作为最后一个 ACL 条目,因此您可能需要 apermit ip any any作为最后一个 ACL 条目。

您的 ACL 对 udp/53 是正确的,这是大多数 DNS 解析发生的端口。

虽然 DNS 查询通常在 UDP/53 上运行,但它们也可以在 TCP/53 上运行。如果 DNS A 记录有超过(大约)17 个 IP 地址,它将超过一个 DNS UDP 数据包的大小,并且正常的 DNS 解析将使用 tcp/53。这是一种罕见的情况,大多数网络管理员都避免在他们的条目中放入如此多的 A 记录。正确地说,要启用 DNS 解析,您需要允许您的客户端在 udp 和 tcp 端口 53 上访问您的 DNS 服务器。

我没有操作 DNSSEC 的经验,但互联网搜索似乎表明它也使用 tcp/53。如果为真,这是允许 tcp 53 的另一个原因。

DNS 区域传输使用 tcp/53。确保您的 DNS 服务器配置为仅允许区域传输到您允许的特定服务器。该保护属于您的 DNS 服务器配置,而不是 ACL 配置。通过尝试从“未经授权”的主机进行区域传输来测试它!

关于 tcp/53 和区域传输安全性的必要性的充分讨论。避免混淆的方法是了解 tcp/udp 套接字有 5 个组件:

IP protocol (tcp/6 or udp/17)
source ip
source port
destination ip
destination port

此外,tcp 套接字可以有“标志”。ACL 最有用的标志是“已建立”标志,它包含在 tcp 响应中。

这是您正在处理的 4 个套接字:

socket 1: UDP from client to server:
protocol UDP
source ip: 5.5.5.x
source port: "random high" port (1024-65535)
destination ip: 1.1.1.1
destination port: 53

socket 2: UDP reply from server to client:
protocol UDP
source ip: 1.1.1.1
source port: 53
destination ip: 5.5.5.x
destination port: "random high" port (1024-65535)

socket 3: tcp case from client to server
protocol TCP
source ip: 5.5.5.x
source port: "random high" port (1024-65535)
destination ip: 1.1.1.1
destination port: 53

socket 4: tcp reply from server to client
protocol TCP
source ip: 1.1.1.1
source port: 53
destination ip: 5.5.5.x
destination port: "random high" port (1024-65535)
flags: established

这是客户端到服务器 UDP 案例(套接字 #1)的(正确)ACL 行

permit udp 5.5.5.0/24 1.1.1.1/32 eq domain

格式如下:

ACTION PROTOCOL SOURCE-IP {SOURCE-PORT} DESTINATION-IP {DESTINATION-PORT}

如果未列出源端口,则源端口是任何。这就是您想要的,因为实际的源端口范围为 1024-65535。出于性能原因,最好避免 ACL 中的端口“范围”命令。

这是您对套接字 #2 的回复 ACL 行:

permit udp 1.1.1.1/32 eq domain 5.5.5.0/24

这对于套接字 2 也是正确的,它具有源端口 53 和目标端口 1024-65535(因此您使用隐式的任何目标端口)。

在 TCP 案例中添加:

ip access-list DNS-IN
permit udp 5.5.5.0/24 1.1.1.1/32 eq domain     ! socket #1
permit tcp 5.5.5.0/24 1.1.1.1/32 eq domain     ! socket #3

ip access-list DNS-OUT
permit udp 1.1.1.1/32 eq domain 5.5.5.0/24      ! socket #2
permit tcp 1.1.1.1/32 eq domain 5.5.5.0/24 established   ! socket #4

int vlan 10
ip access-group DNS-IN in
ip access-group DNS-OUT out

当然,如果您实际应用了该 acl,则该 vlan 上的其他所有内容都将中断,因为最后隐含的“deny ip any any”。

我个人在我的大多数 ACL 中使用“permit tcp any created”,这消除了您的 socket #4 行。出于性能原因,我将其放在 ACL 的首位。

在 TCP 案例中添加:

ip access-list DNS-IN
permit udp 5.5.5.0/24 1.1.1.1/32 eq domain  ! socket 1
permit tcp 5.5.5.0/24 1.1.1.1/32 eq domain  ! socket 3

ip access-list DNS-OUT
permit tcp any any established     ! permits socket 4 plus more
permit udp 1.1.1.1/32 eq domain 5.5.5.0/24    ! socket 2