让firewalld允许centos 7的traceroute

让firewalld允许centos 7的traceroute

我们有一台运行 CentOS 7 的服务器。有一种奇怪的情况,我可以从防火墙 ping 到服务器,但无法执行跟踪路由。服务器直接连接到防火墙,因此,当我从防火墙执行跟踪路由时,它应该看到 1 跳,即服务器 IP,但目前跟踪路由失败。请了解在 Windows 中,有一个 Windows 防火墙控制入站和出站连接。请问 Linux 中是否有相同的防火墙?我在 Google 上搜索过,大部分都是关于 ping、ssh、http、https 服务,但没有一个提到跟踪路由。请指教。谢谢。

问候

答案1

您的设置有点不清楚,所以我将尝试广泛地涵盖这个主题。

取决于路由器软件,您的跟踪路由可以是 ICMP 或 UDP。我刚刚测试过,firewalld 不需要任何特殊操作即可启用 ICMP 跟踪路由。(您可以从任何 Windows 主机尝试此操作)。通常,当 ping 工作时,它就会工作。

因此我假设您的尝试属于 UDP 跟踪路由类型。

要使 UDP 跟踪路由工作,您首先应该发现相应区域中的默认策略是什么。跟踪路由发送 UDP 数据包并获得一些回报 - 对于目标主机,它可以是:

  1. ICMP 数据包“端口不可达”是默认的内核行为(例如当您根本没有防火墙或防火墙采用 ACCEPT 策略时)。
  2. ICMP 数据包“主机不可达”,这是具有 REJECT 策略的默认防火墙行为。
  3. 没有内容,这是 FirewallDrop 策略的默认设置。

不同的软件反应不同。例如,Linux traceroute 在 traceroute 输出中同时显示 port-unr 和 host-unr:

3  test.la.ru (172.20.24.169)  0.848 ms !X  0.838 ms !X  0.837 ms !X

注意这里的 !X - 这意味着主机已发送 host-unr,而我的跟踪路由不知道目的地是否位于该跳转之后。它只知道跟踪在此停止。

3  test.la.ru (172.20.24.169)  0.700 ms  0.695 ms  0.688 ms

这里我们有 port-unr,我的 traceroute 现在知道它已经到达目标主机,这是正常的 traceroute 输出。

我之所以做出这样的解释,是为了了解某些路由器(如 Cisco 交换机)不接受 host-unr 回复,也不会显示正在应答 host-unr 的目标主机(firewalld 默认设置),您可能误以为存在一些输出数据包过滤。要确保真正发生了什么,您必须在服务器上运行 tcpdump。

无论如何,为了使 UDP 跟踪路由在 Cisco 和 Linux 上都能正常工作,您需要在公共区域(如果您的配置更复杂,则需要在其他区域)打开 UDP 端口

firewall-cmd --zone=public --add-port=33434–33534/udp

不幸的是,CentOS 7 在防火墙cmd中似乎没有端口范围选项,所以您必须逐个添加它们。

你也可以在 bash 中尝试这个:

firewall-cmd --zone=public --add-port={33434..33534}/udp

相关内容