在调查与远程办公室的慢速 VPN 连接(Cisco ASA IPSec)时,我注意到我们的防火墙上有很多访问规则匹配:
Denied ICMP type=3, code=4 from *ip_address* on interface outside
我注意到到远程站点的跟踪路由包含相同的 IP 地址,位于我们的 ISP 和远程站点使用的 ISP 之间的某个位置。
我还看到一条消息说
No matching connection for ICMP error mesage: icmp src outside *ip_address* dst identity:*firewall_outside_ip_address* (type 3, code 4) on outside interface. Original IP payload: protocol 50 src *firewall_outside_ip_address* dst *remote_site_ip_address*
思科表示,这可能是攻击的症状,但我不这么认为。
协议 50 是 ESP,它是 IPSec 的一部分。远程站点通过 IPSec VPN 连接到总部,远端使用 Cisco ASA 5505,总部使用 ASA 5510。
ICMP 类型=3,代码=4 表示需要分片但设置了不分片。
对于 IPSec ESP 数据包来说,设置“不分段”是正常的。
我认为正在发生的事情是,数据包离开我们的 ASA 5510 时,默认 MTU 为 1500。当它到达路由器时IP地址该路由器无法将流量传递到使用较小 MTU 的下一跳,因此需要进行分段。路由器在设置 DF 时发回 ICMP 数据包,但我们的防火墙阻止了此操作,这不是因为访问规则,而是因为出于某种原因我们的 ASA 5510 没有预料到此 ICMP 消息。
我试图弄清楚问题是否出在我们的 HQ ASA 5510 的配置上(尽管我们还有另外 36 个站点运行正常),远程 ASA 5505(与我们的其他远程 ASA 5505 统一配置)或两者之间的某个地方。
下一步我应该做什么?
更新 根据请求,以下是来自 HQ ASA 5510 的 ICMP 线路:
icmp unreachable rate-limit 1 burst-size 1
icmp permit any echo-reply outside
icmp permit any time-exceeded outside
icmp permit any unreachable outside
答案1
尝试设置crypto ipsec df-bit clear-df outside
。这不会解决此处的直接问题,但可能会解决问题。
就眼前的问题而言 - 似乎 ASA 没有意识到 ICMP 数据包需要用作其隧道的路径 MTU 发现。检查PMTUD
显示的计数器中是否有任何内容show crypto ipsec sa
?
答案2
ICMP类型 3代码 4 消息为“需要分段但未设置分段”。这意味着您的设备发送的数据包大于向您发送 ICMP 消息的设备的 MTU。通常,数据包可能会被分段,但 DF 位已设置。由于您拒绝了入站 ICMP 消息,因此 ASA 不会收到其数据包未送达的通知。丢弃这些 ICMP 消息通常会对性能产生不利影响,因为它本质上会导致数据包丢失。
思科ASA 配置指南建议始终允许 ICMP 类型 3 消息,并特别提到如果阻止这些消息,IPsec 可能会出现问题。您可以使用以下命令配置报告此错误的 ASA 以允许它们:
icmp permit any unreachable outside
这只会影响发往 ASA 本身的 ICMP 不可达信息。如果您还需要允许它们通过ASA 到内部主机,您需要使用外部接口上的访问列表来执行此操作。
答案3
一位思科工程师向我提供了一些建议,他告诉我有以下选择:
- 按照 Shane Madden 的建议设置 clear-df
- 将我们服务器上的 MTU 设置为 1300,这样它们发送的数据包就不太可能需要分段
- 使用以下方式在 ASA 上设置 TCP 的最大分段大小
sysopt connection tcp-mss 1300
我已经应用了 tcp-mss 更改,并删除了我们 HQ ASA 上的 clear-df 命令,现在出现问题的站点就可以正常运行了。
这可能是比清除 df 位更好的解决方案,因为清除 df 位会导致不希望的碎片化。这相当于将 ASA 上的 MTU 设置为 1340(1300 + 20 字节用于 IP 报头,20 字节用于 TCP 报头),但只影响 TCP 流量。它还允许 PMTUD 工作,而清除 Don't Fragment 位时则不会出现这种情况。