您的 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