快速了解iptables

news2024/11/22 22:34:29

初识

iptables是什么?

iptables是一个在Linux操作系统上使用的防火墙工具,它可以用于配置和管理网络数据包的过滤、转发和修改等操作。

  1. 过滤数据包:iptables可以根据不同的规则过滤网络数据包,例如根据源IP地址、目标IP地址、端口号等进行过滤。

  2. 转发数据包:iptables可以将网络数据包从一个接口转发到另一个接口,实现网络数据的转发功能。

  3. 修改数据包:iptables可以修改网络数据包的源IP地址、目标IP地址、端口号等信息,实现网络数据的伪装和欺骗。

Netfilter是什么?

Netfilter是Linux内核中的一个网络数据包过滤框架,它可以在数据包进入和离开网络接口时进行拦截和处理。iptables就是基于Netfilter框架实现的一个用户空间工具,它可以通过调用Netfilter提供的API来实现网络数据包的过滤、转发和修改等操作。

netfilter的架构就是在整个网络流程的若干位置放置一些钩子,并在每个钩子上挂载一些处理函数进行处理。

IP层的5个钩子点的位置,分别是PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD。原理图如下:


当网卡上收到一个包送达协议栈时,最先经过的netfilter钩子是PREROUTING,如果确实有用户埋了这个钩子函数,那么内核将在这里对数据包进行目的地址转换(DNAT)。不管在PREROUTING有没有做过DNAT,内核都会通过查本地路由表决定这个数据包是发送给本地进程还是发送给其他机器。如果是发送给其他机器(或其他network namespace),就相当于把本地当作路由器,就会经过netfilter的FORWARD钩子,用户可以在此处设置包过滤钩子函数,例如iptables的reject函数。所有马上要发到协议栈外的包都会经过POSTROUTING钩子,用户可以在这里埋下源地址转换(SNAT)或源地址伪装(Masquerade,简称Masq)的钩子函数。如果经过上面的路由决策,内核决定把包发给本地进程,就会经过INPUT钩子。本地进程收到数据包后,回程报文会先经过OUTPUT钩子,然后经过一次路由决策(例如,决定从机器的哪块网卡出去,下一跳地址是多少等),最后出协议栈的网络包同样会经过POSTROUTING钩子。

iptables实现

iptables的底层实现是通过Linux内核中的Netfilter框架来实现的。iptables是用户空间的一个程序,通过netlink和内核的netfilter框架打交道,负责往钩子上配置回调函数。

iptables三板斧:table、chain和rule

chain

iptables有5条内置链分别对应着netfilter的5个钩子:

  • INPUT链:一般用于处理输入本地进程的数据包。
  • OUTPUT链:一般用于处理本地进程的输出数据包。
  • FORWARD链:一般用于处理转发到其他机器/network namespace的数
    据包。
  • PREROUTING链:可以在此处进行DNAT。
  • POSTROUTING链:可以在此处进行SNAT。

table

除了5条内置链之外,还可以在表中定义自己的链:

  • filter 表:用于过滤数据包,是默认的表。它包含 INPUT、OUTPUT 和 FORWARD 三个链,分别用于处理进入本机的数据包、从本机发出的数据包和转发的数据包。

  • nat 表:用于网络地址转换(NAT)。它包含 PREROUTING、POSTROUTING 和 OUTPUT 三个链,分别用于处理进入本机前的数据包、从本机发出的数据包和本机生成的数据包。

  • mangle 表:用于修改数据包的特定字段。如 TTL、TOS 等。它包含 PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING 五个链,分别用于处理进入本机前的数据包、进入本机的数据包、转发的数据包、从本机发出的数据包和本机生成的数据包。

  • raw 表:用于配置连接追踪系统。它包含 PREROUTING 和 OUTPUT 两个链,分别用于处理进入本机前的数据包和从本机发出的数据包。

这5张表的优先级从高到低是:raw、mangle、nat、filter、security。

iptables表与链的对应关系图如下:

不同的表挂不同的链,这是为了分类管理iptables规则(rule)的,系统所有的iptables规则都被划分到不同的表集合中。

rule

iptables的规则就是挂载netfilter钩子上的函数,用来修改数据包的内容或者过滤数据包等操作,iptables的表就是所有规则的5个逻辑集合。

iptables规则如何编写?

一条iptables规则包含两部分信息:匹配条件和动作。

匹配条件即为匹配数据包被这条iptables规则“捕获”的条件,例如协议类型、源IP、目的IP、源端口、目的端口、连接状态等。每条iptables规则允许多个匹配条件任意组合,从而实现多条件的匹配,多条件之间是逻辑与(&&)关系。

常见动作如下:

  • ACCEPT:允许数据包通过。

  • DROP:丢弃数据包,不给出任何响应。

  • REJECT:拒绝数据包,给出响应告知发送方被拒绝。

  • SNAT:源地址转换,用于网络地址转换(NAT)。

  • DNAT:目标地址转换,用于网络地址转换(NAT)。

  • REDIRECT:重定向数据包到指定端口或 IP 地址。

iptables命令使用

参数

  • -A:添加规则到指定链的末尾。
    例如:iptables -A INPUT -s 192.168.1.0/24 -j DROP

  • -D:删除指定链中的规则。
    例如:iptables -D INPUT -s 192.168.1.0/24 -j DROP

  • -I:插入规则到指定链的开头或指定位置。
    例如:iptables -I INPUT 2 -s 192.168.1.0/24 -j DROP

  • -R:替换指定链中的规则。
    例如:iptables -R INPUT 2 -s 192.168.1.0/24 -j DROP

  • -L:列出指定链中的规则。
    例如:iptables -L INPUT

  • -F:清空指定链中的规则。
    例如:iptables -F INPUT

  • -N:创建新的自定义链。
    例如:iptables -N MYCHAIN

  • -X:删除指定的自定义链。
    例如:iptables -X MYCHAIN

  • -P:设置指定链的默认策略。
    例如:iptables -P INPUT DROP

  • -s:指定源 IP 地址或地址段。
    例如:iptables -A INPUT -s 192.168.1.0/24 -j DROP

  • -d:指定目标 IP 地址或地址段。
    例如:iptables -A OUTPUT -d 192.168.1.0/24 -j DROP

  • -p:指定协议类型。
    例如:iptables -A INPUT -p tcp -j DROP

  • -m:指定匹配模块。
    例如:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  • -j:指定动作。
    例如:iptables -A INPUT -s 192.168.1.0/24 -j DROP

  • -i:指定进入接口。
    例如:iptables -A INPUT -i eth0 -j DROP

  • -o:指定输出接口。
    例如:iptables -A OUTPUT -o eth0 -j DROP

常规武器

  1. 查看所有iptables规则
iptables -L -n
  1. 配置防火墙规则策略
  • 配置允许SSH连接
iptables -A INPUT -s 10.20.30.40/24 -p tcp --dport 22 -j ACCECT

-A INPUT​是以追加的方式增加该规则在INPUT链上,-s 10.20.30.40/24 -p tcp --dport 22​是匹配上源地址为10.20.30.40/24网段,tcp协议和目的端口22的数据包,-j ACCET​表示允许该数据包进行连接。这里没有指定表默认是filter表。

  • 阻止来自某个IP/网段的所有连接
iptables -A INPUT -s 10.10.10.10 -j DROP

-j DROP​会发送给源地址为10.10.10.10一个连接拒绝的回程报文。

  • 封锁端口
iptables -A OUTPUT -p tcp --dport 1234 -j DROP

禁止本地进程访问外部1234端口。因为是在挂载OUTPUT链上该条规则,所以是屏蔽本地进程对外的连接。如果想要禁止外部连接访问本地1234端口,则需要在INPUT链上新增规则。

iptables -A INPUT -p tcp --dport 1234 -j DROP
  • 端口转发
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

该条规则添加到PREROUTING链下的nat表中,匹配上eth0网卡上所有目的端口为80的tcp数据包,匹配上则将转发到8080端口上。因为将目的端口改变了,则需要写到nat表中。

  • 禁ping
iptables -A INPUT -p icmp -j DROP

在INPUT链filter表中新增禁止icmp协议数据包的规则。

  1. DNAT
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 10.20.30.40:8080

和端口转发原理差不多,区别在于,端口转发不修改IP地址,而这里修改了目的IP地址。在nat表PREROUTING中新增目的地址为1.2.3.4,目的端口80的tcp数据包的DNAT动作,将目的地址改为了10.20.30.40:8080。

DNAT仅发生在nat表的PREROUTING链中,并且该操作需要确保开启ipforward功能。

  1. SNAT
iptables -t nat -A POSTROUTING -s 192.168.1.2 -j SNAT --to-source 10.172.16.1

在nat表POSTROUTING链中新增将源地址192.168.1.2的数据包进行SNAT操作,改为源地址10.172.16.1.

SNAT操作仅可发生在nat表的POSTROUTING链中。

  1. 保存与恢复

iptables规则修改仅是临时的,重启则丢失,执行以下命令永久保存。

iptables-save

也可将规则保存在文件中

iptables-save > iptables.bak

后续可以通过以下命令进行恢复

iptables-restore < iptables.bak

巨人的肩膀

  • 《kubernetes网络权威指南》

欢迎关注,互相学习,共同进步~

我的个人博客
公众号:编程黑洞

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在华为OD机试中获得满分?Java实现【不含101的数】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

开源开放 生态共建 | openKylin社区单位会员突破200家!

当前&#xff0c;开放、协作、共享的开源模式已成为全球软件技术和产业创新的主导&#xff0c;也为信息技术国产自主化提供了强大助力。openKylin作为中国桌面操作系统开源社区&#xff0c;以聚焦桌面操作系统根技术为核心、以孵化相关领域关键项目为目标、以布道开源文化为抓手…

堪称「史上最详细」的整车信息安全强标将发布!释放了哪些信号?

确保汽车整车信息安全&#xff0c;或成为车企们继智能化竞争的下一个竞争焦点。 可以说&#xff0c;在智能化、网联化的驱动下&#xff0c;智能汽车成为了数据收集、数据传输、数据处理的关键节点&#xff0c;消费者在享受汽车智能化带来便利的同时&#xff0c;也逐渐重视智能…

【操作系统复习】第8章 文件管理

数据项、记录和文件 数据项 ➢ 基本数据项&#xff1a;描述一个对象的某种属性&#xff0c;又称字段 ➢ 组合数据项&#xff1a;由若干个基本数据项组成记录 ➢ 记录是一组相关数据项的集合&#xff0c;用于描述一个对象在某方面的属性。 ➢ 关键字&#xff1a;唯一能…

04_GC垃圾回收

面试题&#xff1a; JVM内存模型以及分区&#xff0c;需要详细到每个区放什么 堆里面的分区&#xff1a;Eden&#xff0c;survival from to&#xff0c;老年代&#xff0c;各自的特点。 GC的三种收集方法&#xff1a;标记清除、标记整理、复制算法的原理与特点&#xff0c;分…

python+vue高校网上跳蚤二手市场的设计与实现

商品信息是卖家供应用户必不可少的一个部分。在跳蚤市场发展的整个过程中&#xff0c;商品担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类管理系统程序也在不断改进。本课题所设计的普通高校网上跳蚤市场&#xff0c;使用Django框架&#xff0c;Python语言…

【2023年电工杯数学建模竞赛】选题分析+A题B题完整思路+代码分享

思路和代码会第一时间分享出来&#xff0c;可以先关注博主 1.竞赛介绍 2.本次大赛选题分析 首先大家要清楚获奖只和比例有关&#xff0c;和具体题目关系不大&#xff0c;不会出现选难题就比简单题获奖率高很多的情况出现&#xff0c;这是一个选拔性质的比赛是按照比例来的 2…

(5.19-5.25)【大数据新闻速递】

关 注gzh“大数据食铁兽”&#xff0c;了解更多大数据快讯 【第八届亚太银行数字化创新峰会圆满落幕】 第八届亚太银行数字化创新峰会在2023年5月18日举行&#xff0c;邀请了30名大咖和超过300位行业顶尖人士参加。金融数据港和中银协中西部培训机构提供特别支持。峰会围绕银行…

Kafka实时数据即席查询应用与实践

作者&#xff1a;vivo 互联网搜索团队- Deng Jie Kafka中的实时数据是以Topic的概念进行分类存储&#xff0c;而Topic的数据是有一定时效性的&#xff0c;比如保存24小时、36小时、48小时等。而在定位一些实时数据的Case时&#xff0c;如果没有对实时数据进行历史归档&#xff…

list的基本介绍

list的基本信息&#xff1a; list是一个带头双向链表的结构。constant&#xff0c;常数、常量&#xff0c;constant time 即O(1)时间复杂度。 先来简单认识一下list list支持尾插&#xff0c;尾删&#xff0c;头插&#xff0c;头删 都是一些已知的内容。 和vector的区别就是支…

Java货运物流园管理系统源码

技术架构&#xff1a;spring boot、mybatis、redis、vue、element-ui 开发语言&#xff1a;java、vue、uniapp 开发工具&#xff1a;idea、vscode、hbuilder 前端框架&#xff1a;vue 后端框架&#xff1a;spring boot 数 据 库&#xff1a;mysql 移 动 端&#xff1a; …

vue vant 登录增加图片验证码显示

<!-- 登录表单 --><van-form submit"onLogin" :show-error"false":show-error-message"false"ref"login-form"failed"onFailed"> <van-fieldv-model"user.account"icon-prefix"toutiao"…

如何借助spire.doc,在 Word 中插入 OLE 对象

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

AI的发展将会产生一个新的阶层

随着AI的发展将会产生一个新的阶层&#xff0c;那就是无用阶层&#xff0c;而且我们很多人都处在这个阶层。自今年以来&#xff0c;AI技术的发展所带来的应用&#xff0c;给我们的除了震撼还是震撼。Open AI的GPT4模型不但能够写出媲美专家发表的论文&#xff0c;还能通过各类专…

淘宝商品列表数据接口(支持价格、销量排序)

淘宝商品列表数据接口是淘宝提供的一种可以获取淘宝商品信息的接口。通过该接口&#xff0c;可以获取到具有一定规则的商品信息&#xff0c;例如按照价格排序、按照销量排序等。接口返回的数据格式为JSON格式&#xff0c;可以方便地处理数据。 我们可以通过调用淘宝提供的API&…

Flink SQL JOIN

双流JOIN(Regular Join) ​ Regular Join 就是大家熟知的双流 Join&#xff0c;语法上就是普通的 JOIN 语法。图中案例是通过广告曝光流关联广告点击流将广告数据打宽&#xff0c;打宽后可以进一步计算广告费用。从图中可以看出&#xff0c;曝光流和点击流都会存入 join 节点的…

优雅处理HTTP请求:过滤器、拦截器、ControllerAdvice和自定义AOP

我们在开发Spring Boot应用程序时&#xff0c;经常会遇到需要对HTTP请求进行一些处理的情况&#xff0c;例如鉴权、数据校验、请求日志记录等等。在处理HTTP请求时&#xff0c;我们可以使用四种不同的技术来实现这些功能&#xff1a;过滤器、拦截器、ControllerAdvice和自定义A…

谷歌seo多久才能见效?谷歌seo见效的参考时间线和效果预估

影响谷歌SEO的效果因素 谷歌SEO的效果因多种因素而异&#xff0c;包括竞争程度、关键词选择、网站优化程度、内容质量和网站的历史等。一般来说&#xff0c;SEO是一个长期的过程&#xff0c;而不是一夜之间见效的事情。e6zzseo&#xff08;e6zzseo的博客_CSDN博客-seo领域博主…

嵌入式音视频疑惑汇总

小小的脑袋里,大大的疑问,该文是博主在工作中遇见问题后,面向chatGPT学习的记录笔记 1.bypass hdr 是什么? “Bypass HDR” 是指绕过高动态范围(HDR)功能的一种设置。HDR 是指一种显示技术,它可以提供更高的色彩深度和亮度范围,从而产生更加真实、明亮和有层次感的图像…

Ludo:海外飞行棋游戏玩法,文末附源码

Ludo起源于印度的古老游戏Pachisi&#xff0c;玩法类似国内的飞行棋&#xff0c;是一种适合2至4人玩的战略类棋盘游戏。 其游戏规则也很简单&#xff1a;对局中&#xff0c;每人有2颗或4颗棋子&#xff0c;通过投骰子的方式决定前进的步数&#xff0c;在前进过程中赶上对手即可…