大白话netfilter

背景

最近在看k8s源码,读到了kube proxy,网络应该是k8s里重要的一章节,看着看着发现还是之前学的又给忘了,所以先来一波技术储备。

netfilter

net+filter,filter是过滤的意思,那我们从字面分析就是过滤数据包从而达到防火墙的目的。

那netfilter在哪过滤呢?
大白话netfilter_第1张图片
一个请求从宏观上看,就是先通过网卡,再通过内核空间,再到用户空间的应用,netfilter就是在内核网络协议栈中,也就是在网络层和传输层。
怎么过滤呢?
netfilter网络协议栈上设立了一个个检测点(HOOK)。就是下面的五个监测点。

  1. NF_IP_PRE_ROUTING
    刚刚进入网络层的数据包通过此点
  2. NF_IP_LOCAL_IN
    经路由查找后,送往本机的通过此检查点
  3. NF_IP_FORWARD
    要转发的包通过此检测点
  4. NF_IP_POST_ROUTING
    通过网络设备出去的包通过此检测点
  5. NF_IP_LOCAL_OUT
    本机进程发出的包通过此检测点

简称为prerouting、input、forword、output、postrouting,过滤的是网络层传输层的数据包
大白话netfilter_第2张图片

大白话netfilter_第3张图片
上下两个图一个意思

传输层、网络层

大白话netfilter_第4张图片
osi7层模型真的必须要记牢,这玩意就是基本功了,大概我就简单的总结一下,传输层大多用tcp协议翻译成中文传输控制协议,翻译的不好,翻译成控制传输协议不就完了么?就是控制怎么传输的,那怎么控制啊?首先咱俩想传输要先连接吧,那谁和谁链接啊,就要有源端口目标端口,知道端点了就开始什么三次握手四次挥手。网络层呢,就是把报文发送到它应该去(的IP地址)的主机,我们都知道网络很复杂,就像你访问百度,你不可能直接访问到百度服务器,除非你跟他中间拉一条网线,所以中间要通过各种路由器,就像击鼓传花一样,假设我们的ip是a,百度的是z,中间的路由器是b-y,那就要a先知道b的ip,b在知道c的ip,c在知道d的ip这么传下去,最终到达z。那a怎么知道b的,b又怎么知道c的?路由表,假设a要找z,就去路由表查去了,没发现z,怎么办?那就b就是默认网关(一般就是个路由器),再让默认网关b去查他的路由表看看有没有z,没有就一直查下去。链路层呢,你知道ip了也没用啊,实际你还是要知道他的物理地址也就是mac地址,比如a知道了b的ip,那怎么知道b的ip呢?喊呗!ARP 协议会在以太网中以广播的形式,对以太网所有的设备喊出:“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”。这时候b就把他的mac地址给了a,链路层就是几号楼,网络就是几单元,传输层就是门牌号。

大白话netfilter_第5张图片

别怕别怕!我看见这图的时候我也特么心烦,但是你冷静看看我上面说的传输层,和网络层,你发没发现几个关键词,(NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN、NF_IP_FORWARD、NF_IP_POST_ROUTING、
NF_IP_LOCAL_OUT
)这不就是那五个检测点么?看来上面说的没骗我netfilter在网络层和传输层。

总结

说白了,netfilter就是在网络层和传输层中设立了几个监测点来操作数据,至于怎么操作那是你的事,我只负责帮你设置监测点。

你可能感兴趣的:(网络协议,网络,http,https)