NETLINK_FIREWALL和NETLINK_NETFILTER有什么区别?

时间:2013-12-14 15:21:52

标签: linux api firewall netlink

两个Netlink协议NETLINK_FIREWALL(和NETLINK_IP6_FW)和NETLINK_NETFILTER都用于实现Linux防火墙。

那么,有不同之处吗?如果是,哪个Netlink协议用于哪个目的?

1 个答案:

答案 0 :(得分:1)

通过代码快速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()调用,因此这是您要查看的界面。

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

快速浏览一下git log似乎表明NETLINK_NETFILTER用于与想法连接跟踪接口,而不是实际配置防火墙规则(iptables userspace命令所做的那样)。

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