2

Netlink 协议 NETLINK_FIREWALL(和 NETLINK_IP6_FW)和 NETLINK_NETFILTER 都用于操纵 Linux 防火墙。

那么,有区别吗?如果是,哪个 Netlink 协议服务于哪个目的?

4

1 回答 1

3

对代码的快速 grep 显示 NETLINK_FIREWALL 在内核中只出现了两次:

include/uapi/linux/netlink.h
11:#define NETLINK_FIREWALL 3   /* Unused number, formerly ip_queue     */

security/selinux/hooks.c
1184:       case NETLINK_FIREWALL:
1185:           return SECCLASS_NETLINK_FIREWALL_SOCKET;

所以,它被定义了,并且评论声称它没有被使用,而且它只被提到过一次,在 selinux 的类型转换代码中。永远不会调用 netlink_kernel_create(),因此永远不会连接 NETLINK_FIREWALL。它不会做任何事情。

NETLINK_NETFILTER 确实有一个与之关联的 netlink_kernel_create() 调用,所以这就是您要查看的接口。

已经有一段时间了,但我曾经为配置 netfilter 规则实现了(部分)代码,我记得是通过 setsockopt() 调用而不是通过 netlink 套接字来实现的。我不确定 NETLINK_NETFILTER 实际上做了什么。

快速浏览 git log 似乎表明 NETLINK_NETFILTER 用于连接连接跟踪之类的想法,而不是实际配置防火墙规则(iptables 用户空间命令所做的)。

如果您真的想创建防火墙规则(即做 iptables 所做的),您应该查看 libiptc(它是 iptables 源代码树的一部分)。配置这些规则的界面很复杂且没有文档记录。

于 2013-12-14T18:37:43.407 回答