前言

在开始Kubernetes的网络之前我们先来学习Netfilter,Netfilter可能了解的人比较少,但是iptables用过 Linux的都应该知道。本文主要介绍Netfilter与iptables的原理。

什么是Netfilter

Netfilter顾名思义就是网络过滤器,其主要功能就是对进出内核协议栈的数据包进行过滤或者修改,iptables 就是建立在Netfilter之上。Netfilter就是Linux内核里挡在网卡和用户态进程之间的一道防火墙。


image.png

这幅示意图中,IP包一进一出,有几个关键的检查点,它们正是Netfilter设置防火墙的地方。Netfilter通过向内核协议栈中不同的位置注册钩子函数来对数据包进行过滤或者修改操作,这些位置称为挂载点,主要有 5 个:PRE_ROUTING、LOCAL_IN、FORWARD、LOCAL_OUT 和 POST_ROUTING,如下图所示:


img

PRE_ROUTING: IP包进入IP层后,还没有对数据包进行路由判定前;

LOCAL_IN: 进入主机,对IP包进行路由判定后,如果IP 包是发送给本地的,在进入传输层之前对IP包进行过滤;

LOCAL_OUT: IP包通过传输层进入用户空间,交给用户进程处理。而处理完成后,用户进程会通过本机发出返回的 IP 包,在没有对输出的IP包进行路由判定前进行过滤;

FORWARD: IP包进行路由判定后,如果IP包不是发送给本地的,在转发IP包出去前进行过滤;

POST_ROUTING: 对于输出的IP包,在对IP包进行路由判定后进行过滤;

在图中可以看出决定IP包走向就是路由,按照路由的判定可以分为两条路线:

  1. 第一个路由通过查找输入数据包 IP头部的IP地址,判断是否为本机的IP地址是否一致,如果与本机的 IP地址一致,说明数据是发送给本机的,否则说明数据包是发送给其他主机,只是经过本机中转;
  2. 第二个路由判定根据输出数据包 IP头部的IP地址 从路由表中查找对应的路由信息,然后根据路由信息获取下一主机的 IP地址,然后进行数据传输;

通过向挂载点注册钩子函数,就能够对处于不同阶段的数据包进行过滤或者修改操作。由于钩子函数能够注册多个,因此挂载点通过链表链接,所以挂载点又被称为链,因此LOCAL_IN挂载点又称为INPUT链、LOCAL_OUT 挂载点又称为 OUTPUT链、FORWARD挂载点又称为 PORWARD链、PRE_ROUTING挂载点又称为 PREROUTING链、POST_ROUTING挂载点又称为 POSTOUTING链。

什么是iptables

iptables是建立在 Netfilter 之上的数据包过滤器,通过向 Netfilter 的挂载点上注册钩子函数来实现对数据包过滤的,从iptables这个名字上可以看出一定具有表的概念,iptables通过把这些规则表挂载在 Netfilter 的不同链上,对进出内核协议栈的数据包进行过滤或者修改操作。

iptables包括四种表:

Filter表

Filter表用于过滤数据包,是iptables的默认表,因此如果你配置规则时没有指定表,那么就默认使用Filter表,Filter表可以作用于INPUT链、OUTPUT链、PORWARD链;

NAT表

NAT表用于对数据包的网络地址转换(IP、端口),分别可以挂载到PREROUTING链、POSTOUTING链、OUTPUT链;

Mangle表

Mangle主要用来修改IP数据包头,比如修改TTL值,同时也用于给数据包添加一些标记,从而便于后续其它模块对数据包进行处理,可以作用在所有链上;

ROW表

Raw表用于判定数据包是否被状态跟踪处理,可以作用于PREROUTING链、OUTPUT链;


image.png

数据包从网络中进入到内核协议栈的过程中,要执行的 iptables 规则,如果在执行某条 iptables 规则失败后,会直接把数据包丢弃,不会继续执行下面的规则。

添加iptables规则

使用 iptables 命令添加规则,iptables可以分为四部分:

iptables -t表  -A链  匹配规则  动作

匹配条件

匹配条件分为基本匹配条件与扩展匹配条件,基本匹配条件包括源IP地址和目标IP地址等,扩展匹配条件包括源端口和目标端口等;

处理动作

处理动作是指当匹配条件成功后要进行的一系列操作过程,动作也可以分为 基本动作 和 扩展动作,常用的动作如下:

ACCEPT:允许数据包通过;

DROP:直接丢弃数据包,不给任何回应信息;

REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息;

SNAT:源IP地址转换;

DNAT:目标IP地址转换;

REDIRECT:在本机做端口映射;

-t <表>:指定要操纵的表;
-A <链>:向规则链中添加条目;
-D <链>:从规则链中删除条目;
-I <链>:向规则链中插入条目;
-R <链>:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j <动作>:指定要进行的动作行为;
-i <网络接口>:指定数据包进入本机的网络接口;
-o <网络接口>:指定数据包要离开本机所使用的网络接口。
--dport <端口>:匹配目标端口号。
--sport <端口>:匹配来源端口号。

结束

欢迎大家点点关注,点点赞!

Netfilter和iptables介绍的更多相关文章

  1. Linux防火墙iptables介绍

    介绍网络防火墙是通过一个或多个允许或拒绝的规则来过滤网络流量的网络设备或软件.网络防火墙还可以执行更复杂的任务,例如网络地址转换,带宽调整,提供加密隧道以及更多与网络流量相关的任务.而我们的任务就是需 ...

  2. 防火墙iptables介绍

    防火墙: netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统.该架构可以实现数据包过滤,网络地址转换以及数据包管理功能.linux中防火墙分为两部分:netf ...

  3. 【操作系统之十三】Netfilter与iptables

    一.Netfilter Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤.数据包处理.地址伪装. ...

  4. iptables介绍和基本使用

    iptables 防火墙是什么 防火墙好比一堵真的墙,能够隔绝些什么,保护些什么. 防火墙的本义是指古代构筑和使用木制结构房屋的时候,为防止火灾的发生和蔓延,人们将坚固的石块堆砌在房屋周围作为屏障,这 ...

  5. iptables介绍iptables和netfilter

    随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击.黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视.网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络 ...

  6. Linux网络相关命令firewalld和netfilter、iptables 使用(6/22)

    iptables和netfilter的关系: netfilter在内核空间的代码根据table中的rules,完成对packet的分析和处置.但是这些table中的具体的防火墙rules,还是必须由系 ...

  7. netfilter及iptables基本概念

    网络访问控制 网络访问控制可以简单理解为防火墙,常用的网络访问控制有:哪些IP可以访问服务器, 可以使用哪些协议,哪些接口,是否需要对数据包进行修改等. netfilter netfilter是通过i ...

  8. iptables介绍

    iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables. iptables的结构:iptables-->Tables-->Chai ...

  9. netfilter 和 iptables

    http://blog.chinaunix.net/uid/23069658/cid--1-list-4.html 洞悉linux下的Netfilter&iptables  系列,有一到十六, ...

随机推荐

  1. php move_uploaded_file保存文件失败

    move_uploaded_file保存失败后找错,先使用了try catch,但是没输出信息,才知道该函数在php中是警告属于error,不属于exeption,因此不能通过简单的if(!...)处 ...

  2. AD学习笔记(基础)

    AD学习 1 学习思路 1.1 学什么 1.2 怎么学 2 AD本身 3 AD project 3.1 任务层级 3.2 PCB流程 4 原理图工作环境设置 5 开始 5.1工程创建 5.2 元件库介 ...

  3. css颜色字符串转换, 字符串转化为驼峰形式

    * 将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff1. rgb 中每个 , 后面的空格数量不固定2. 十六进制表达式使用六位小写字母3. 如 ...

  4. jmeter如何确定ramp-up时间

    原文来自:https://www.cnblogs.com/hjhsysu/p/9189897.html 线程属性包含了:线程数.Ramp-Up时间(秒).循环次数. 我整理下线程属性的定义,如图: 难 ...

  5. 鸿蒙内核源码分析(信号生产篇) | 信号安装和发送过程是怎样的? | 百篇博客分析OpenHarmony源码 | v48.03

    百篇博客系列篇.本篇为: v48.xx 鸿蒙内核源码分析(信号生产篇) | 年过半百,依然活力十足 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管 ...

  6. Loj#143-[模板]质数判定【Miller-Rabin】

    正题 题目链接:https://loj.ac/p/143 题目大意 给出一个数\(p\),让你判定是否为质数. 解题思路 \(Miller-Rabin\)是一种基于费马小定理和二次探测定理的具有较高正 ...

  7. YbtOJ#752-最优分组【笛卡尔树,线段树】

    正题 题目链接:http://www.ybtoj.com.cn/problem/752 题目大意 \(n\)个人,每个人有\(c_i\)和\(d_i\)分别表示这个人所在的队伍的最少/最多人数. 然后 ...

  8. Spring Security 学习+实践

    Spring Security是Spring为解决应用安全所提供的一个全面的安全性解决方案.基于Spring AOP和Servlet过滤器,启动时在Spring上下文中注入了一组安全应用的Bean,并 ...

  9. 通用JS七

    instanceof 在原型链上寻找这个属性的定义 match 正则匹配字符串 Symbol() Symbol()函数不能用作构造函数,与new关键字一起使用.这样做是为了避免创建符号包装对象,像使用 ...

  10. 通过Python收集MySQL MHA 部署及运行状态信息的功能实现

    一. 背景介绍 当集团的MySQL数据库实例数达到2000+.MHA集群规模数百个时,对MHA的及时.高效管理是DBA必须面对的一个挑战.MHA 集群 节点信息 和 运行状态 是管理的基础.本篇幅主要 ...