如何将网络接口用作只读?

如何将网络接口用作只读?

我的家庭实验室中有一台交换机,我想用它进行一些实验,特别是关于 VLAN 和我想更好地理解的其他一些协议。现在,这个开关(一个TP-Link 5 端口托管交换机)允许端口镜像。

我想在我的计算机上分析这种镜像流量,并尽可能少地从监控计算机引入“新”流量。我怎样才能做到这一点?

我已经知道,您必须将 NIC 置于混杂模式才能接收最初不是发往我的 PC 的数据包。由于这通常是由 Wireshark 本身完成的,因此我不必担心。

但是,我想确保在端口上引入尽可能少的“噪音”,以便真正查看其他端口上生成的流量。我已经找到了这个答案这建议禁用所有正在运行的服务(例如 DHCP 等),这是有道理的。但是,虽然这会大大减少噪音,但它可能无法阻止 ARP 解析或其他基于内核的网络交互。

我还了解到有一些专门用于此目的的协议(例如思科的SPAN),但我的交换机没有这个能力。

所以我的问题是:如何将网络接口设置为只读?

答案1

在 Linux 上将接口变为“只读”的最简单方法是应用出口tc过滤掉滴下的东西 一切

为了应用过滤器,有类队列规则必须就位。这普里奥qdisc是最简单的classful qdisc,只是为了能够在接口上使用过滤器,而不是为了它自己的功能。

最后设置界面以太网1“只读”:

tc qdisc add dev eth1 root prio
tc filter add dev eth1 matchall action drop

这会阻止该接口上的传出流量。它甚至会阻止 RAW 套接字(否则不受防火墙影响),因此会阻止 IPv4 DHCP 客户端(尽管有防火墙,它仍可以获得地址)。仍然有办法绕过它,但这只能是经过深思熟虑的。这是我所知道的两个:

要返回原始状态的界面,只需删除 qdisc:

tc qdisc del dev eth1 root

笔记:

  1. 我假设端口设置为镜像模式的交换机可能已经将该端口设置为只读模式。

    这是需要测试的东西。如果为 true,则使用上面的过滤器或下面的项目符号 2. 将变得毫无意义。

  2. 处于 UP 状态并且未应用其他设置的接口仍然可以交换流量

    如果没有之前的过滤器,即使具有未配置但处于 UP 状态的接口也可能会留下流量。至少有以下两种情况:

    • IPv6自动配置

      使用sysctl -w net.ipv6.conf.eth1.disable_ipv6=1

    • 如果 ARP 未禁用(带有ip link set eth1 arp off

      这种情况与更一般的信息泄漏情况相同,其中 LAN 中的系统可以探测以检查某些系统是否也在使用具有已知地址的其他网络(包括虚拟网络):默认情况下,Linux 上的接口将应答 ARP 请求为了任何其他地址任何其他接口。那是 部分弱者的主机型号

      例如,如果 OP 的系统使用默认设置运行 livbirt QEMU/KVM,则 192.168.122.1/24 被分配给病毒0,那么仅连接到未配置的 UP 接口的其他 Linux 系统在运行时仍然会通过它获得 ARP 应答:

      arping -I eth0 192.168.122.1
      

      探测系统是否有到 192.168.122.1 的路由并不重要。这是关于 ARP(以及一个不关心路由的命令)的。 LXC 和 10.0.3.1 等也相同。

相关内容