两个Netlink协议NETLINK_FIREWALL(和NETLINK_IP6_FW)和NETLINK_NETFILTER都用于实现Linux防火墙。
那么,有不同之处吗?如果是,哪个Netlink协议用于哪个目的?
答案 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源代码树的一部分)。用于配置这些规则的界面很复杂且没有文档记录。