Netfilter和iptables介绍
前言
在开始Kubernetes的网络之前我们先来学习Netfilter,Netfilter可能了解的人比较少,但是iptables用过 Linux的都应该知道。本文主要介绍Netfilter与iptables的原理。
什么是Netfilter
Netfilter顾名思义就是网络过滤器,其主要功能就是对进出内核协议栈的数据包进行过滤或者修改,iptables 就是建立在Netfilter之上。Netfilter就是Linux内核里挡在网卡和用户态进程之间的一道防火墙。

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

PRE_ROUTING: IP包进入IP层后,还没有对数据包进行路由判定前;
LOCAL_IN: 进入主机,对IP包进行路由判定后,如果IP 包是发送给本地的,在进入传输层之前对IP包进行过滤;
LOCAL_OUT: IP包通过传输层进入用户空间,交给用户进程处理。而处理完成后,用户进程会通过本机发出返回的 IP 包,在没有对输出的IP包进行路由判定前进行过滤;
FORWARD: IP包进行路由判定后,如果IP包不是发送给本地的,在转发IP包出去前进行过滤;
POST_ROUTING: 对于输出的IP包,在对IP包进行路由判定后进行过滤;
在图中可以看出决定IP包走向就是路由,按照路由的判定可以分为两条路线:
第一个路由通过查找输入数据包 IP头部的IP地址,判断是否为本机的IP地址是否一致,如果与本机的 IP地址一致,说明数据是发送给本机的,否则说明数据包是发送给其他主机,只是经过本机中转; 第二个路由判定根据输出数据包 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链;

数据包从网络中进入到内核协议栈的过程中,要执行的 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介绍的更多相关文章
- Linux防火墙iptables介绍
介绍网络防火墙是通过一个或多个允许或拒绝的规则来过滤网络流量的网络设备或软件.网络防火墙还可以执行更复杂的任务,例如网络地址转换,带宽调整,提供加密隧道以及更多与网络流量相关的任务.而我们的任务就是需 ...
- 防火墙iptables介绍
防火墙: netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统.该架构可以实现数据包过滤,网络地址转换以及数据包管理功能.linux中防火墙分为两部分:netf ...
- 【操作系统之十三】Netfilter与iptables
一.Netfilter Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤.数据包处理.地址伪装. ...
- iptables介绍和基本使用
iptables 防火墙是什么 防火墙好比一堵真的墙,能够隔绝些什么,保护些什么. 防火墙的本义是指古代构筑和使用木制结构房屋的时候,为防止火灾的发生和蔓延,人们将坚固的石块堆砌在房屋周围作为屏障,这 ...
- iptables介绍iptables和netfilter
随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击.黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视.网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络 ...
- Linux网络相关命令firewalld和netfilter、iptables 使用(6/22)
iptables和netfilter的关系: netfilter在内核空间的代码根据table中的rules,完成对packet的分析和处置.但是这些table中的具体的防火墙rules,还是必须由系 ...
- netfilter及iptables基本概念
网络访问控制 网络访问控制可以简单理解为防火墙,常用的网络访问控制有:哪些IP可以访问服务器, 可以使用哪些协议,哪些接口,是否需要对数据包进行修改等. netfilter netfilter是通过i ...
- iptables介绍
iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables. iptables的结构:iptables-->Tables-->Chai ...
- netfilter 和 iptables
http://blog.chinaunix.net/uid/23069658/cid--1-list-4.html 洞悉linux下的Netfilter&iptables 系列,有一到十六, ...
随机推荐
- PHP中的文件系统函数(三)
总算来到我们最关心的部分了,也就是 f 相关函数的操作.基本上大部分的文件操作都是以今天学习的这些内容为基础的,话不多说,我们就一个一个的来学习学习吧. 文件读取 文件的读取其实非常简单,fopen( ...
- PHP中的MySQLi扩展学习(五)MySQLI_STMT对象操作
就像 PDO 中的 PDO_Statment 对象一样,MySQLI_STMT 对象也是一个预处理语句所形成的对象,专门用来操作 MySQLi 所生成的预处理语句的.其实操作方式之类也都比较相似,不外 ...
- Batch Size对神经网络训练的影响
前言 这篇文章非常全面细致地介绍了Batch Size的相关问题.结合一些理论知识,通过大量实验,文章探讨了Batch Size的大小对模型性能的影响.如何影响以及如何缩小影响等有关内容. 本文来 ...
- 接口测试checklist
静态测试 接口文档与设计文档对应 接口定义 接口定义与数据库定义 业务功能测试 系统全流程验证 逆向全流程验证 事务性测试 边界值测试 业务规则边界值 场景分析合理长度 场景分析合理数据量 输入.输出 ...
- css Table 表格宽度失效解决方案
使用div包裹内容进行支撑 <table cellspacing="0"> <caption>89 HOLLAND ROAD SINGAPORE 27575 ...
- jupyter 快捷命令
-- https://www.jb51.net/article/199930.htm#:~:text=Jupyter notebook命令和编辑模式常用快捷键汇总 1 Enter %3A 转入编辑模式 ...
- Linux安装配置Java
先从 Oracle 官网下载 Java 运行 tar -zxvf xxxx.tar.gz 指令将 Java 解压到 /usr/local/java 下(个人习惯,无所谓) 修改环境变量 vim /et ...
- CefSharp基于.Net Framework 4.0 框架编译
CefSharp基于.Net Framework 4.0 框架编译 本次源码使用的是Github上CefSharp官方的79版本源码 准备 IDE Visual Studio 2017 Enterpr ...
- 函数式编程 —— 将 JS 方法函数化
前言 JS 调用方法的风格为 obj.method(...),例如 str.indexOf(...),arr.slice(...).但有时出于某些目的,我们不希望这种风格.例如 Node.js 的源码 ...
- 洛谷2149 Elaxia的路线(dp+最短路)
QwQ好久没更新博客了,颓废了好久啊,来补一点东西 题目大意 给定两个点对,求两对点间最短路的最长公共路径. 其中\(n,m\le 10^5\) 比较简单吧 就是跑四遍最短路,然后把最短路上的边拿出来 ...