nftables:隔离 VLAN,但有一些例外

nftables:隔离 VLAN,但有一些例外

假设有一个安装了 Debian 11 和 nftables 的自定义路由器(Raspberry Pi 盒),具有单个物理以太网接口和配置的以下 VLAN:

  • eth0.501 192.168.41.0/24 CCTV 摄像机
  • eth0.502 192.168.42.0/24 家庭自动化
  • eth0.503 192.168.43.0/24 访客网络(连接单独的 WiFi AP)
  • eth0.504 192.168.44.0/24 个人可信网络,可在 Samba 共享上免费获取敏感数据
  • eth0.505 192.168.45.0/24 光纤 ONT 网络(可由 ISP 远程访问)

期望的政策是:

  • CCTV 无法访问任何其他网络,但可以通过家庭自动化和个人信任网络访问,而不能通过其他网络访问。
  • 家庭自动化只能访问闭路电视和互联网,只能通过个人信任网络访问。
  • 访客只能访问互联网,只能通过个人信任网络访问。
  • 个人信任网络根本无法从外部访问,但可以访问所有其他网络。
  • 光纤 ONT 网络只能被部分其他网络访问(如上所述),但其本身无法访问任何一个。

我说的“无访问权限”是指完全无法看到,甚至无法 ping。这是此处 VLAN 的要点,但 Pi 路由器会让任何人看到所有人,除非受到 nftables(或 iptables,我不想处理)的限制。

相反,当授予网络访问权限时,为简单起见,我们假设允许所有 IP、端口和协议。

有人能举一些例子说明如何从头开始配置 nftables 以实现上述目标吗?需要设置哪些表、链和过滤器?

答案1

你确实不需要任何特殊的表或链:

  1. 从您的操作系统通常在分布式 /etc/nftables.conf 示例中填写的默认“inet filter”表中的默认链开始forward- 换句话说,相当于 iptables 的内置“FORWARD 链”。

  2. ct state {established, related} accept如果尚未添加常用的 conntrack 规则,请添加。这将处理反向返回的回复。

  3. ip saddr ... ip daddr ... accept完全按照您的描述添加一系列规则。(不过,也许首先将“X 可以被 Y 访问”改写为“Y 可以访问 X”以使事情更加一致。)

    • “可以访问互联网,但不能访问局域网”可以写成ip daddr != 192.168.0.0/16

    • ip6 saddrIPv6 需要第二条带有/ 的规则ip6 daddr

    • define guest = 192.168.43.0/24在 nftables.conf 的顶部定义 $macros 使用来更清楚地说明地址或接口的含义。

    • 您可以在可以使用值的任何地方使用内联集{x, y, z},以便单个规则可以允许来自多个源和/或到多个目的地。

    如果这是唯一的网关,基于接口的规则iifname "..." oifname "..." accept可能比基于 IP 的规则更简单。

  4. 最后在末尾添加drop或规则。(我更喜欢“使用 icmpx admin-prohibited 拒绝”。)reject

希望您的 Pi 是最新型号,并且以太网端口不再通过 USB 连接。

相关内容