NFQUEUE
是iptables
的一种规则目标, 它用于将网络数据包从内核传给用户态进程, 由用户态进程来裁决如何处理该数据包,并将裁决结果返回内核。传输通道为以数字标识的队列。队列由固定长度的链表实现,链表元素为数据包及元数据(kernel skb结构)。在内核中,Netfilter
框架尝试将符合规则的数据包放入队列中。若队列已满,则丢弃该数据包。因此,若用户态进程处理过慢,则会严重影响网络性能。内核与用户态进程之间基于NFNETLINK
通信,数据包需要在内核态与用户态之间进行拷贝,因而这种机制的性能比较差。
下面,以实例来说明NFQUEUE
机制。
下面的命令会将发送给本机80
端口的TCP数据包送往队列80
:
1 | iptables -A INPUT -p tcp --dport 80 -j NFQUEUE —-queue-num 80 |