【Linux】 iptables 入门简介

news2024/11/20 7:14:27

文章目录

  • 前言
  • 作用
  • 持久化和恢复
  • 执行的顺序


前言

简单地说,iptables是Linux的防火墙程序。它将使用表监控进出服务器的流量。这些表包含称为链的规则集,这些规则将过滤传入和传出数据包。


作用

当数据包与规则匹配的时候,会为其指定一个目标,该目标可以是另一条链或者是以下的特殊值之一:

  • ACCEPT 允许数据包通过
  • DROP 直接丢弃
  • RETURN 组织数据包遍历链并告诉它返回到上一个链(没用过)

iptables 规则仅适用于 IPv4。如果要为 ipv6 协议设置防火墙,则需要改用 ip6tables。

默认我们使用的是filter表,常说三表五链,但是我所了解的更多有关于filter表和nat表。
首先大概了解一下报文经过防火墙时大概经历了哪些。
在这里插入图片描述

这里我们跳过安装部分。
介绍几个常见的指令:
查看当前的iptables 的配置:
iptables -nL
我们可以观察到一开始的所有的链上面的规则默认都是ACCEPT的。这明显是不安全的,说明任何的数据包到达之后我们都可以直接通过。图中圈起来的是默认策略,可以进行修改。
在这里插入图片描述
修改对应链的默认配置:
iptables -P FORWARD DROP
在这里插入图片描述
往对应链增加新规则:
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
比如说我想让所有访问tcp协议,访问我的主机的8080号端口的都放行,我可以在INPUT链做操作。
语法:
iptables -A <chain> -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.> -j <target>
在这里插入图片描述
-i (接口) — 要过滤其流量的网络接口,例如 eth0、lo、ppp0 等。
-p(协议) — 进行过滤过程的网络协议。它可以是tcp,udp,udplite,icmp,sctp,icmpv6等。或者,您可以键入 all 以选择每个协议。
-s(源) — 流量来自的地址。您可以添加主机名或 IP 地址。
–dport (目标端口) — 协议的目标端口号,例如 22 (SSH)、443 (https) 等。
-j (target) — 目标名称(ACCEPT, DROP, RETURN)。每次创建新规则时都需要插入此规则。

那么要是想在链头新增规则,可以采用-I 指定链 + number 进行插入,默认插入到第一行。
iptables -I INPUT -p tcp --dport 22 -j DROP
执行上面指令,就能让ssh失去连接。
在这里插入图片描述
那我如果后悔了,我的xshell或者vs code链接不上虚拟机了,此时可以使用
iptables -D INPUT 1
删除第一条规则,然后就可以恢复正常了。 要是嫌麻烦iptables -F可以删除所有链上已有的规则,可以指定链,默认对filter表的链全部进行删除。

基于源过滤数据包
Iptables 允许您根据 IP 地址或 IP 地址范围过滤数据包。您需要在 -s 选项后指定它。例如,要接受来自 192.168.1.3 的数据包,命令将是:
sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT

如果要丢弃来自某个 IP 地址范围的数据包,则必须使用 -m 选项和 iprange 模块。然后,使用 –src-range 指定 IP 地址范围。请记住,连字符应分隔不带空格的 IP 地址范围,如下所示:
sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

丢弃所有其他流量
在定义 –dport 规则后,将 DROP 目标用于所有其他流量至关重要。这将防止未经授权的连接通过其他开放端口访问服务器。要实现此目的,只需键入:

sudo iptables -A INPUT -j DROP

持久化和恢复


由于每一次重启虚拟机防火墙策略都会发生改变,而一行行在终端上面修改又比较麻烦,所以通常持久化到文件当中。
iptables-save > /root/ipt.save iptables的保存
iptables-restore < /root/ipt.save 的还原

其他:
链管理
 -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;
 -E, --rename-chain old-chain new-chain:重命名链;

规则管理:
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;

–syn 说明是tcp的syn字段为1,其他字段为0的情况。

state
限制收发包的状态

[!] --state state

INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.

NEW: 新连接请求;

ESTABLISHED:已建立的连接;

INVALID:无法识别的连接;

RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;

UNTRACKED:未追踪的连接;

也可以对icmp协议进行一个处理
iptables -A INPUT -p icmp --icmp-type 8 -j ljh

执行的顺序


iptables执行规则时,是从从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则,执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况,后续执行一般有三种情况。

1.一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。也就是当我们进入任意一条链,执行完后也会返回。

2.一种是中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行

3.一种是中止所有规则队列的执行。比如说DROP,当前访问被丢弃了。

iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。

参考:
iptables命令使用详解
执行顺序

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

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

相关文章

基于幂等表思想的幂等实践

一、为什么需要幂等 分布式场景下&#xff0c;多个业务系统间实现强一致的协议是极其困难的。一个最简单和可实现的假设就是保证最终一致性&#xff0c;这要求服务端在处理一个重复的请求时需要给出相同的回应&#xff0c;同时不会对持久化数据产生副作用&#xff08;即多次操…

【Linux】Linux下调试器gdb的使用

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;Linux 文章目录一、前言二、铺垫三、指令集和使用1、指令集2、演示四、结语如果无聊的话&#xff0c;就来逛逛 我的博客栈 吧! &#x1f339; 一、前…

通信原理与MATLAB(十三):AMI的编解码

目录1.AMI的的编解码原理1.1 AMI编码原理1.2 AMI解码原理2.AMI编解码的代码3.AMI编解码结果图4.AMI的误码率曲线4.1 原理4.2 AMI的误码率曲线代码4.3 误码率曲线图1.AMI的的编解码原理 1.1 AMI编码原理 如下图所示&#xff0c;AMI的编码原理:将原始码元的1转换成1,0转换成-1。…

快过年了,用Python康康哪一家足浴店可以带朋友去玩.....

人生苦短&#xff0c;我用Python 首先肯定是去正经足浴店&#xff0c; 毕竟一年出差也不少&#xff0c; 大家都很辛苦&#xff0c; 好不容易放假了&#xff0c; 约上好兄弟一起去放松放松~ 所需环境 python 3.8 解释器pycharm 编辑器 所需模块 requests 数据来源分析 …

Silane-PEG-NH2 氨基聚乙二醇硅烷 NH2-PEG-Silane结构式

英文名称&#xff1a;Silane-PEG-NH2 Silane-PEG-Amine 中文名称&#xff1a;硅烷-聚乙二醇-氨基 分子量&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c;20k。。。 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途…

2022年度总结,迎接2023

目录 我和CSDN的2022 初次见面&#xff1a; 你我的成长&#xff1a; 博客&#xff1a; 比赛&#xff1a; 我和CSDN的2023 我和CSDN的2022 初次见面&#xff1a; CSDN你好啊&#xff01;我跟你的初次见面在于2022年4月2日&#xff01;&#xff01;&#xff01; 这这半年内…

【算法5.1】背包问题 - 01背包 (至多最大价值、至少最小价值)

目录 至少模板和至多模板的两大区别 1、至多模板 2、至少模板 2. 01背包 - 至多模板 - 体积至多j&#xff0c;总价值最大 1、朴素做法 - 二维dp 2、优化 - 一维dp 4700. 何以包邮&#xff1f; - 至少模板 - 价值至少j&#xff0c;总价值最小 至少模板和至多模板的两大区…

list容器与vector容器的区别

vector与list都是STL中非常重要的序列式容器&#xff0c;它们都存放在namespace std命名空间中&#xff0c;由于俩个容器的底层结构不同&#xff0c;导致其特性不同 一、底层实现结构不同 vector本质是一段动态连续的顺序表&#xff0c;而list底层是一个双向循环链表 二、访…

Ubuntu多硬盘luks全盘加密自动解锁(硬件变更后失效)的方法

简介大家都知道&#xff0c;Linux现在用Luks全盘加密一直有一个痛点&#xff0c;就是每次开机都需要输入解密硬盘的密码&#xff0c;之后又要输入用户密码&#xff0c;非常的麻烦&#xff01;本文正是为了解决这个问题诞生的&#xff01;本文多硬盘加密带来的效果是&#xff0c…

Redis持久化——RDB机制详解

在运行情况下&#xff0c;Redis 以数据结构的形式将数据维持在内存中&#xff0c;为了让这些数据在 Redis 重启之后仍然可用&#xff0c;需要将数据写入持久存储 持久化是指将数据写入持久存储&#xff0c;例如固态磁盘(SSD) Redis 提供了一系列持久化选项。这些包括&#xff1…

Java-黑马Java学习作业-day07综合练习

学习视频链接&#xff1a;黑马Java学习视频 文章目录练习一&#xff1a;飞机票练习二&#xff1a;打印素数练习三&#xff1a;验证码练习四&#xff1a;复制数组练习五&#xff1a;评委打分练习六&#xff1a;数字加密练习七&#xff1a;数字解密练习八&#xff1a;抽奖解法一:…

【C++11】—— 可变参数模板

目录 一、可变参数模板概念以及定义方式 二、参数包的展开 1. 递归函数方式展开参数包 2. 逗号表达式展开参数包 三、STL容器中的empalce相关接口函数 一、可变参数模板概念以及定义方式 在c11之前&#xff0c;类模板和函数模板只能含有固定数量的模板参数&#xff0c;c11…

JavaScript高级 ES5 面向对象原型继承

原型以及ES5中实现继承1. 对象和函数的原型1. 普通对象的原型 [[prototype]]2. 函数的原型 prototype2. new、constructor1. new 操作符2. constructor属性3. 将方法放到原型上4. 创建对象的内存表现5. 重写原型对象3. 原型链的查找顺序4. 原型链实现的继承5. 借用构造函数继承…

深入URP之Shader篇10: 深度值专题(1)

之前研究Unlit shader的时候就遇到一些Z值相关的问题&#xff0c;一笔带过了&#xff0c;比如ComputeFogFactor中的UNITY_Z_0_FAR_FROM_CLIPSPACE。今天就把URP Shader中出现的Z相关的问题做一个专题一起研究下。 深度缓冲的方向和UNITY_REVERSED_Z 先说这个关于z的宏&#x…

nacos:服务注册与发现

导入SpringCloudAlibaba相关的依赖&#xff0c;并在父工程将依赖进行管理 <dependencyManagement> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-s…

Java EE|多线程代码实例之定时器与线程池

文章目录&#x1f534;定时器什么是定时器以及开发中的作用标准库中的定时器定时器的实现&#x1f534;线程池什么是线程池标准库中的线程池创建一个线程池ThreadPoolExecutor构造方法解析线程池的实现&#x1f534;定时器 什么是定时器以及开发中的作用 程序中的定时器功能与…

【互联网大厂机试真题 - 华为】九宫格

题目描述 九宫格是一款广为流传的游戏,起源于河图洛书。游戏规则是:1到9九个数字放在3x3的格子中,要求每行、每列以及两个对角线上的三数之和都等于15. 在金麻名著《射雕英雄传》中黃蓉曾给九宫格的一种解法,口诀:戴九恩一,左三右七,二四有肩,八六为足,五居中央。解法…

【云原生进阶之容器】第四章Operator原理4.3节--Operator模式

1 Operator概述 1.1 诞生背景 Kubernetes实际是期望状态管理器。先在Kubernetes中指定应用程序期望状态(实例数,磁盘空间,镜像等),然后它会尝试把应用维持在这种状态。Kubernetes的控制平面运行在Master节点上,它包含数个controller以调和应用达到期望状态: 检查当前的…

【阶段三】Python机器学习30篇:机器学习项目实战:智能推荐系统的基本原理与计算相似度的常用方法

本篇的思维导图: 智能推荐系统模型 智能推荐系统属于非监督式学习,是机器学习一个非常重要的应用领域,它能带来的经济价值往往是直接且非常可观的。 智能推荐系统的基本原理 智能推荐系统的应用场景 互联网每天都在产生海量信息,用户行为数据呈现爆发式增长…

PyTorch - 常见神经网络

文章目录LeNetAlexNetDropoutAlexNet 网络结构torchvision中的AlexNet的实现ZFNetVGG-NetsVGG 各网络VGG-16 网络结构GoogLeNet代码实现ResNetDenseNetRNNLSTMGRULeNet 1998年&#xff0c;由 LeCun 提出用于手写数字识别任务只有5层结构&#xff1b;目前看来不输入深度学习网络…