Linux系统——iptables超细致解释

目录

内核如何处理数据包流程图

一、表

二、链

三、表、链、规则的关系

四、数据报文进/出节点经过哪些规则

五、NAT——网络地址转换

1.SNAT

2.DNAT


内核如何处理数据包流程图

  • 规则是管理员对数据包制定的一种触发机制,即当数据包达到某种条件,就执行指定的动作。
  • 条件可以是数据包源地址、目的地址、协议等
  • 动作可以是拒绝、接受、丢弃等;详细介绍见下表
动作含义
ACCEPT将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链(nat:postrouting)
REJECT拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。
DROP丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
MASQUERADE改写封包来源 IP 为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则炼(mangle:postrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。
SNAT改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则炼(mangle:postrouting)。
DNAT改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则炼(filter:input 或 filter:forward)。
MARK将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。
RETURN结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。
iptables -t filter -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 -m multiport --dports 443,80 -j ACCEPT
#允许经过本机网卡eth0,访问协议是TCP,源地址是192.168.1.0/24 段的数据包访问本地端口是80和443的服务
#-t:操作那个表 如果不输入则默认为nat表
#-A:在表末追加规则;-I为表首插入规则、-D为删除规则
#INPUT:链名称;该规则在那条链上生效
#-j:数据包处理动作;比如接受、拒绝等

一、表

表主要用来存放具体的防火墙规则,而规则具有功能性,比如修改数据包源/目的ip、拒绝来自某个网段的数据包访问本机等;所以我们可以对规则进行分类,不同的功能存入不同的表

  • raw表:主要用于决定数据包是否被状态跟踪机制处理

  • mangle表:主要用于拆解报文修改数据包的 IP 头信息

  • nat表:主要用于修改数据包的源地址和目的地址、端口号等信息(实现网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。

  • filter表:主要用于对过滤流入和流出的数据包,根据具体的规则决定是否放行该数据包

  • security 表:最不常用的表,用在 SELinux 上;用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现

其中nat表和filter表最常用

二、链

  • PREROUTING:在数据包到达防火墙时,进行路由判断之前执行的规则

  • INPUT:路由判断之后确定数据包流入本机,应用其规则

  • FORWARD:路由判断之后确定数据包要转发给其他主机,应用其规则;linux主机需要开启ip_forward功能才支持转发,在/etc/sysctl.conf文件中配置参数net.ipv4.ip_forward=1

  • OUTPUT:本机应用向外发出数据包时,应用其规则

  • POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则
    在每条链中,规则按照从上到下的顺序进行匹配,当一个数据包与某个规则匹配成功后,就会按照该规则的动作进行处理,并且后续的规则将不再被考虑。

三、表、链、规则的关系

表是区分相同链的上下顺序,规则在每条链中的上下顺序确定规则执行顺序:

  • 如果规则来自不同表,通过表的优先级确定链的优先级:比如完整的PREROUTING链中有来自raw表、mangle表、nat标的PREROUTING链规则,通过表优先级 (raw>mangle>nat>filter>security) 区分优先级。所以一个报文发送到某台虚拟机后,被虚拟机网卡接收,会进入的虚拟机网络协议栈处理,先经过PREROUTING链处理,具体来说先走raw表的PREROUTING规则、再走mangle表、最后在走nat表PREROUTING规则。

  • 如果规则来自同一个表,则按规则插入表的顺序自上而下。

四、数据报文进/出节点经过哪些规则

  • 对于客户端来说,发送报文过程
    先进入OUTPUT链处理(raw、mangle、nat、filter、security表对应的PREROUTING规则依次匹配),如果没有被拦截则根据路由选择出网口,再进入POSTROUTING链处理(mangle、nat表对应的POSTROUTING规则依次匹配),最后从网卡出去

  • 对于服务端来说,发送报文过程
    先进入PREROUTING链处理(raw、mangle、nat表对应的PREROUTING规则依次匹配),根据路由判断数据报文发给本机,报文进入INPUT链处理(mangle、nat、filter、security表对应的INPUT规则依次匹配),如果没有被拦截则报文被应用程序处理

  • 对于转发场景,发送报文过程
    先进入PREROUTING链处理(raw、mangle、nat表对应的PREROUTING规则依次匹配),根据路由判断数据报文不是发给本机,报文进入FORWARD链处理(mangle、filter、security表对应的FORWARD规则依次匹配),如果没有被拦截则进入POSTROUTING链处理(mangle、nat表对应的POSTROUTING规则依次匹配),最后从网卡出去

 补充:转发场景需要Linux开启转发功能,否则数据报文进入FORWARD链直接丢弃;临时开启执行命令

sysctl net.ipv4.ip_forward=1

echo "1" >/proc/sys/net/ipv4/ip_forward

永久生效需要修改

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

sysctl -p

五、NAT——网络地址转换

NAT应用最广的场景就是解决局域网内设备访问互联网的问题。

1.SNAT

SNAT(源地址转换) 主要用于修改数据包的源IP和源端口,一般在nat表的PREROUTING链中增加规则:局域网内所有设备要上外网,如果每个设备都分配一个公网ip成本太大,可以在路由器出口分配一个公网ip,局域网内的设备访问外网时统一走路由器出口,路由器此时需要做两件事

  1. 数据包从出口出去之前,将数据包的源地址和源端口改成公网ip和随机端口
  2. 同时将转换关系记录保存,响应数据包返回时根据记录转发给局域网内的设备
iptables -t nat -A POSTROUTING -d 192.168.241.11 -p tcp --dport 80 -j SNAT --to-source 10.0.0.10:80
#将发给192.168.241.11:80的数据包,其源地址改为10.0.0.10
# -j:值为SNAT需要静态指定修改后的值,值为MASQUERADE表示动态修改源地址为出口网卡地址
# --to-source:将数据包的源地址转换成指定值

2.DNAT

DNAT(目的地址转换) 主要用于修改数据包目的地址和端口路由器,一般在nat表中的PREROUTING链中增加规则:接收到数据包后,将目的地址和目的端口根据转换规则修改为实际的内网地址,规则需要提前在路由器上手动添加。

iptables -t nat -A PREROUTING -d 10.0.0.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.241.11:80
#将发给10.0.0.10:80的数据包,其目的地址改为192.168.241.11
# --to-destination:修改数据包的目的地址

注意:linux内核使用CONNTRACK表(连接跟踪)记录NAT转换关系,一个连接仅在首次经过iptables链条时会计算nat表,一旦conntrack记录下这次的改写关系,后续无论是去程包还是回程包都是依据conntrack表进行改写关系的处理,不会再重复执行nat表中的DNAT/SNAT规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/483723.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux杂货铺】进程控制

目录 🌈前言🌈 📁 进程创建 📂 fork函数 📂 写实拷贝 📂 创建进程的目的 📂 创建失败原因 📁 进程终止 📂 概念 📂 场景 📂 退出方法 …

欧几里得算法-----无聊的军官pro max版本

上篇文章末尾我们说学了欧几里得算法一定给大家更新。 今天它来了! 欧几里得算法 欧几里得算法是一种求最小公倍数和最大公因数的算法。 我们看图: 我们把两个数看成长方形,在长方形内不断划分出小正方形,PS:第一个…

一图理解递归-算法通关村

一图理解递归-算法通关村 递归是我们算法进阶的基础,是必须要掌握的内容,只有掌握了递归才算真的会算法。与递归有关的问题有: 与树和二叉树相关的大部问题二分查找相关的问题快速排序、归并排序相关的问题所有回溯的问题所有动态规划的问题 …

scrapy爬虫框架

scrapy爬虫框架 一、scrapy的概念作用和工作流程1、scrapy的概念2、scrapy框架的作用3、scrapy的工作流程(重点)3.1 回顾之前的爬虫流程3.2 改写上述流程3.3 scrapy的流程3.4 scrapy的三个内置对象3.5 scrapy中每个模块的具体作用 二、scrapy的入门使用1…

【机器学习】无监督学习算法之:主成分分析

主成分分析 1、引言2、主成分分析2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥, 快,快。 小鱼:… 啥情况, 你可别乱喊。 小屌丝:额… 我的意思,是你该继…

【附订阅OnlyFans攻略】2024年AI:一个交织着创新与挑战的故事

2024年AI:一个交织着创新与挑战的故事 在2024年的一个清晨,阳光透过智能窗户的调节,柔和地洒在书房里。李华,一位年轻的科技创业者,坐在书桌前,凝视着电脑屏幕上不断跳动的数据和图像。他正在进行一项重要…

Flutter 项目架构技术指南

Flutter 项目架构技术指南 视频 https://www.bilibili.com/video/BV1rx4y127kN/ 前言 原文 https://ducafecat.com/blog/flutter-clean-architecture-guide 探讨Flutter项目代码组织架构的关键方面和建议。了解设计原则SOLID、Clean Architecture,以及架构模式MVC…

qt 实现 轮播图效果,且还有 手动 上一页和下一页 已解决

QT中有 轮播图的需求,按照正常html版本 。只需要配置数组就能搞定,但是c qt版本 应该用什么了。 第一想到的是采用定时器。 // 定时器初始化{m_pTime new QTimer(this);m_pTime->start(4 * 1000);//启动定时器并设置播放时间间隔m_pAutoFlag true;/…

网络层(IP层)

IP协议的本质:有将数据跨网络传输的能力 而用户需要的是将数据从主机A到主机B可靠地跨网络传输 IP的组成:目标网络目标主机 IP由目标网络和目标主机两部分组成,IP报文要进行传输,要先到达目标网络,然后经过路由器转到…

使用阿里云服务器搭建网站教程,超简单10分钟网站上线

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

【算法设计与分析】实现Trie前缀树

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串…

【评分标准】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷 无线网络勘测设计

第一部分:无线网络勘测设计评分标准 序号评分项评分细项评分点说明评分方式分值1点位设计图AP编号AP编号符合“AP型号位置编号”完全匹配5AP型号独立办公室、小型会议室选用WALL AP110完全匹配5员工寝室选用智分,其他用放装完全匹配5其它区域选用放装AP…

睿考网:二建可以跨省考试吗?

二级建造师资格考试允许考生进行跨省报名,但是考试通过后的注册环节,必须在考试所在的省份完成。建议在初始注册过程中选择与报名信息相符的单位,以确保符合当地的职业要求规定。 关于二建的考试地点,考生可以选择在工作单位所在…

鸿蒙Harmony应用开发—ArkTS-@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

上文所述的装饰器仅能观察到第一层的变化,但是在实际应用开发中,应用会根据开发需要,封装自己的数据模型。对于多层嵌套的情况,比如二维数组,或者数组项class,或者class的属性是class,他们的第二…

sr501人体红外传感器

sr501人体红外传感器 文章目录 sr501人体红外传感器1.介绍2.使用方法3.示例代码 持续更新中1.介绍 模块信息介绍来自百问网,仅供学习和参考​ 人体都有恒定的体温,一般在 37 度,所以会发出特定波长 10uM 左右的红外线,被动式红外…

推荐一款制造执行系统(MES)国内比较好的实施厂家

什么是MES 制造执行系统(MES)是一种用于监控、控制和优化制造过程的软件系统。它通过与企业资源计划(ERP)系统和自动化系统的集成,实现对生产过程的管理和监测,包括生产计划、生产过程和生产数据。 MES可…

基于python+vue分类信息服务平台移动端的设计与实现flask-django-php-nodejs

分类信息服务平台是在Android操作系统下的应用平台。为防止出现兼容性及稳定性问题,框架选择的是django,Android与后台服务端之间的数据存储主要通过MySQL。用户在使用应用时产生的数据通过 python等语言传递给数据库。通过此方式促进分类信息服务平台信…

高等数学基础篇(数二)之微分方程

微分方程: 一、常微分方程的基本概念 二、一阶微分方程 三、可降阶的高阶方程 四、高阶线性微分方程 目录 一、常微分方程的基本概念 二、一阶微分方程 三、可降阶的高阶方程 四、高阶线性微分方程 一、常微分方程的基本概念 二、一阶微分方程 帮助理解&…

C++学习之旅(二)运行四个小项目 (Ubuntu使用Vscode)

如果是c语言学的比较好的同学 可以直接跟着代码敲一遍&#xff0c;代码附有详细语法介绍&#xff0c;不可错过 一&#xff0c;猜数字游戏 #include <iostream> #include <cstdlib> #include <ctime>int main() {srand(static_cast<unsigned int>(tim…

SpringBoot整合Swagger-UI实现在线API文档

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合Swagger-UI实现在线API文档 📚个人知识库: Leo知识库,欢迎大…