• k8s使用的iptables,具体原理是什么?一学就会


    1. netfilter

    指的是内核中的netfilter框架,这个框架在协议栈中增加了5个hook,并维护内核模块在这些hook的地方注册的callback函数。

    1.1. iptables和netfilter的关系

    iptables是用户空间的一个程序,通过一定机制和内核的netfilter打交道,负责往hook上配置callback函数。

    2. netfilter的5个hook

    在这里插入图片描述

    2.1. 数据包常见的三种hook路径

    ● 本机收到的,目的IP是本机的package:NF_IP_PRE_ROUTING -> NF_IP_LOCAL_IN
    ● 本机收到的,目的IP不是本机的package:NF_IP_PRE_ROUTING -> NF_IP_FORWARD -> NF_IP_POST_ROUTING
    ● 本机发出去的package:NF_IP_LOCAL_OUT -> NF_IP_POST_ROUTING

    3. hook回调函数:rule

    向hook注册的回调函数就是rule,rule = match + target

    示例:

    #允许ftp服务的21端口
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT

    3.1. match

    ● -p tcp:–protocol tcp协议
    ● --dport 21:–destination-port,目的port是21

    3.2. target

    ● -j ACCEPT :接收此package

    常见的target有:

    常见的target有:
    ● DROP丢弃
    ● RETURN跳出当前chain
    ● ACCEPT通过
    ● QUEUE放入用户空间队列
    custom-chain:跳转到用户自定义的chain

    4. table:对rule进行分类

    rule具备不同的能力,根据rule的能力分为5类,如:

    ● FIlter表:rule用于过滤
    ● NAT表:rule用于地址转换
    ● Mangle表:rule用来修改IP数据包头,如修改TTL
    ● Raw表:rule给package打标记
    ● Security表:rule和SELinux有关

    5. hook如何调rule:hook调chain,chain将rule组织成链

    rule有很多很多,hook只有5个点位,hook如何调这么多的rule呢?

    答:将rule组织成5条链,每条链对应一个hook

    table-chain-rule关系:
    在这里插入图片描述

    在这里插入图片描述

    6. 自定义chain

    创建自定义chain时需要指定,在哪个table里创建,默认是在filter表。

    在nat表里创建自定义chain

    iptables -t nat -N CUSTOM_NAT

    hook无法直接调用自定义chain,hook调用5大chain,5大chain里的rule通过jump到自定义的chain。

    7. 总结

    netfilter包的处理流程汇总如下:
    ● 包按netfilter框架分别经过5个hook点
    ● 每个hook点调用自己对应的官方chain
    ● 官方chain串联的rule按类别分散在5张表里
    ● 官方chain按照预先定义的表的顺序来执行rule
    ● 表里的rule可以jump到表里自定义的chain

  • 相关阅读:
    主席树(可持久化线段树)
    VMware虚拟机安装Linux教程(图文超详细)
    React.FC(函数式组件)与React.Component(类组件)使用和区别
    twitter推文采集案例
    抖音小店需要办理营业执照吗?怎么办理?这个流程你一定要收好!
    Spring Boot
    docker 安装elasticsearch密码配置
    Envoy代理GRPC服务支持通过restful进行访问
    渗透测试过程中的JS调试(一)
    【示波器专题】示波器探头的原理深入——有源探头之差分有源探头
  • 原文地址:https://blog.csdn.net/hugo_lei/article/details/126179739