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 系列,有一到十六, ...
随机推荐
- $.ajax 常用的套路
$.ajax 常用的套路 (function(){ window.webApi = new Object(); webApi.get = function(url,data,callback){ $. ...
- python日志loguru
文档:https://loguru.readthedocs.io/en/stable/overview.html#installation pip install loguru 使用 基本使用 ##终 ...
- Android Kotlin协程入门
Android官方推荐使用协程来处理异步问题.以下是协程的特点: 轻量:单个线程上可运行多个协程.协程支持挂起,不会使正在运行协程的线程阻塞.挂起比阻塞节省内存,且支持多个并行操作. 内存泄漏更少:使 ...
- english note [6.3to6.9]
6.3 http://www.51voa.com/VOA_Special_English/pakistan-town-struggles-with-rise-in-hiv-infections-821 ...
- HTML 网页开发、CSS 基础语法——九.CSS概述
1.产生背景 从HTML的答案盛开时,样式就以各种形式存在,最初的HTML只i包含很少的显示属性.随着HTML的成长为了满足页面设计者的要求,HTML添加了许多显示功能,随着功能的增加HTML页面变得 ...
- P4173-残缺的字符串【FFT】
正题 题目链接:https://www.luogu.com.cn/problem/P4173 题目大意 给出两个字符串\(S,T\),其中包含小写字母和一些\(?\),\(?\)可以匹配任何字符. 求 ...
- 小米路由器4a千兆版刷openwrt
现在网上搜小米路由器4a千兆版刷机的都是刷的padavan的,很少能找到openwrt的刷机教程. 首先刷openwrt系统的时候要先刷入引导程序breed,网上有一篇帖子写的很详细(https:// ...
- 【C++ Primer Plus】编程练习答案——第6章
1 void ch6_1() { 2 using namespace std; 3 char ch; 4 while ((ch = cin.get()) != '@') { 5 if (isdigit ...
- 程序员微机课系列—我的nodejs多版本管理方法
nodejs的多版本配置对于我来说一直都是一个较为头疼的事情.本人的开发工作会涉及electron以及前端,对于工作中使用的npm包(点名node-sqlite3和node-sass)在某些情况下,会 ...
- Java基础之(五):数据类型
Java快捷键 首先我们先来介绍下IDEA的一些快捷键 psvm=public static void main(String[] args) {} sout=System.out.println(& ...