配置 nftable 防火墙以进行单向数据包流量

配置 nftable 防火墙以进行单向数据包流量

你好,我是防火墙配置的新手,但我想要做的是允许主机 a(10.1.0.2)向主机 b(10.12.0.10)发送数据包,但 b 不能向 a 发送数据包。两台机器都连接到路由器。这是 a 运行的命令,它阻止从 b 到 a 的流量,但也阻止我不想要的从 a 到 b 的流量。

    nft add chain inet filter forward { type filter hook forward priority 0 \; }
    nft add rule inet filter forward ip saddr 10.12.0.10 ip daddr 10.1.0.2 drop
    nft add rule inet filter forward ip saddr 10.1.0.2 ip daddr 10.12.0.10 accept

答案1

阻止从 B 到 A 的数据包也意味着阻止回复从 B 到 A 的数据包。您的ping命令能够顺利地将 Echo Request 数据包从 A 发送到 B;它只是无法接收回复,因为这些回复已被故意阻止。

如果您想允许建立双向连接,仍然必须允许 B 发送数据包来回复收到的数据包(例如,它需要能够向 A 发送 ICMP“Echo Reply”数据包或 TCP“ACK”数据包)。

最常见的方法是让防火墙保存所有活动连接的状态,这由 iptables 和 nftables 中的“conntrack”系统完成。

在 nftables 中,使用ct state允许属于现有连接的数据包(即回复)的规则;确保将其放置在现有的“删除”规则。(如果您编辑 nftables.conf 并重新加载它,而不是尝试逐个插入规则,这会容易得多。)

表 inet 过滤器 {
    链向前{
        类型过滤器钩子前向优先级过滤器;政策接受;

        ct 状态 {已建立,相关} 接受
        ip saddr 10.12.0.10 ip daddr 10.1.0.2 丢弃
        ip saddr 10.1.0.2 ip daddr 10.12.0.10 接受
    }
}

这相当于 iptables--state ESTABLISHED规则。

相关内容