防火墙有关iptables的知识点

news2024/11/17 11:25:41

基本概念
什么是防火墙

在计算中,防火墙是基于预定安全规则来监视和控制传入和传出网络流量的网络安全系统。该计算机流入流出的所有网络通信均要经过此防火墙。防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信

防火墙分为硬件防火墙和软件防火墙,他们的优缺点

**硬件防火墙:**拥有经过特别设计的硬件及芯片,性能高、成本高(当然硬件防火墙也是有软件的,只不过有部分功能由硬件实现,所以硬件防火墙其实是硬件+软件的方式);
**软件防火墙:**应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能比硬件防火墙低、成本低。
netfilter和iptables的关系

iptables中的五链四表
链的概念

iptables开启后,数据报文从进入服务器到出来会经过5道关卡,分别为prerouting(路游前),input(输入),output(输出),forward(转发),postrouting(路由后)
在这里插入图片描述每一道关卡中有着一条条规则,数据报文必须按顺序一个一个匹配这些规则,这些规则串起来就像一条链,所以我们把这些关卡叫做“链”

INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则;
OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则;
FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则;
PREROUTING链:(互联网进入局域网)在对数据包作路由选择之前,应用此链中的规则,如DNAT;
POSTROUTING链:(局域网出互联网)在对数据包作路由选择之后,应用此链中的规则,如SNAT。

其中中INPUT、OUTPUT链更多的应用在“主机防火墙”中,即主要针对服务器本机进出数据的安全控制;而FORWARD、PREROUTING、POSTROUTING链更多的应用在“网络防火墙”中,特别是防火墙服务器作为网关使用时的情况。

表的概念(主要熟记前两张表)

虽然每一条链上有多条规则,但有些规则的作用(功能)很相似,多条具有相同功能的规则合在一起就组成了一个“表”,iptables提供了四种“表”:

**filter表:主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG),所谓的防火墙其实基本上是指这张表上的过滤规则,对应内核模块iptables_filter;
**nat表:network address translation,网络地址转换功能,主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次,如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。对应内核模块iptables_nat;

**mangle表:拆解报文,做出修改,并重新封装,主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。对应内核模块iptables_mangle;
**raw表:是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理,在匹配数据包时,raw表的规则要优先于其他表,对应内核模块iptables_raw。
我们最终定义的防火墙规则,都会添加到这四张表中的其中一张表中。

表链关系

5条链(即5个关卡)中,并不是每条链都能应用所有类型的表,事实上除了Ouptput链能同时有四种表,其他链都只有两种或三种表
在这里插入图片描述规则的概念

iptables规则主要包含“条件,动作”,即匹配出什么条件(规则)后,执行相对应的 动作
匹配条件(即五元组)
S_IP:source ip,源ip
S_PORT:source port,源端口
D_IP: destination ip,目标ip
D_PORT: destination port,目标端口
TCP/UDP:第四层(传输层)协议

处理的动作

  • **ACCEPT:**允许数据包通过;
  • **DROP:**直接丢弃数据包,不回应任何信息,客户端只有当该链接超时后才会有反应;
  • **REJECT:**拒绝数据包,会给客户端发送一个数据包被丢弃的响应的信息;
  • **SNAT:**S指Source,源NAT(源地址转换)。在进入路由层面的route之后,出本地的网络栈之前,改写源地址,目标地址不变,并在本机建立NAT表项,当数据返回时,根据NAT表将目的地址数据改写为数据发送出去时候的源地址,并发送给主机。解决私网用户用同一个公网IP上网的问题;
  • **MASQUERADE:**是SNAT的一种特殊形式,适用于动态的、临时会变的IP上;
  • **DNAT:**D指Destination,目的NAT,解决私网服务端,接收公网请求的问题。和SNAT相反,IP包经过route之前,重新修改目标地址,源地址不变,在本机建立NAT表项,当数据返回时,根据NAT表将源地址修改为数据发送过来时的目标地址,并发给远程主机。可以隐藏后端服务器的真实地址;
  • **REDIRECT:**在本机做端口映射;
  • **LOG:**在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。
    除去最后一个LOG,前3条规则匹配数据包后,该数据包不会再往下继续匹配了,所以编写的规则顺序极其关键。

DROP和REJECT执行的动作类似,区别在于,前者拒绝后不会给客户端响应数据包被丢弃,只有在连接超时后,客户端才会知道;后者会给客户端响应数据包被丢弃(个人观点,后者人性化点,那么要记住这个区别,可以从其本身的意思,drop是丢弃,顾名思义是直接扔掉,不打任何招呼,只有当事人后来才可能发现;reject是拒绝,那么这就需要双方当场就说明意思。所以说,这两者就类似于谈恋爱的俩人,男方或者女方给对方送花吧,想想就明白了。)

iptables的命令操作

service命令是用于启动Linux的进程的(参见[这里](https://www.xiebruce.top/782.html)),但在这里是例外,service iptables start并没有启动一个进程,你无法用ps aux | grep iptables的方式看到一个叫iptables的进程,你只能用service iptables status`去查看它的状态。

所以iptables其实不能叫“服务”,因为它并没有一个“守护进程”,其实iptables只是相当于一个客户端工具,真正的防火墙是Linux内核中的netfilter,由于netfilter是内核功能,用户无法直接操作,iptables这个工具是提供给用户设置过滤规则的,但最终这个过滤规则是由netfilter来执行的。

查询规则
常用选项

-L: list的缩写,list我们通常翻译成列表,意思是列出每条链上的规则,因为多条规则就是一个列表,所以用-L来表示。-L后面还可以跟上5条链(POSTROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING)的其中一条链名,注意链名必须全大写,如查看“INPUT链”上的规则:iptables -L INPUT(不指定的话就是默认查看所有链上的所有规则列表)

  • Chain INPUT: INPUT链上的规则,同理,后面的“Chain FORWARD”、“Chain OUTPUT”分别是FORWARD链和OUTPUT链上的规则;
  • (policy ACCEPT): 表示默认策略是接受,即假如我没设置,那就是允许,只有我设置哪个不允许,才会不允许,示例中是安装iptables后的默认规则,由于默认是ACCEPT,你规则也设置为ACCEPT按道理来说是没什么意义的,因为你不设置也是ACCEPT呀,但事实上,是为了方便修改为REJECT/DROP等规则,说白了就是放在那,要设置的时候我们就可以直接修改;
  • target: 英文意思是“目标”,但该列的值通常是动作,比如ACCEPT(接受)、REJECT(拒绝)等等,但它确实可以是“目标”。

-t:前面-L不是列出所有链的规则列表吗?为什么没有PREROUTING和POSTROUTING链呢?因为有默认参数-t,t是table的缩写,意思是指定显示哪张“表”中的规则(前面说过iptables有四种表),iptables -L其实就相当于iptables -t filter -L,即相当于你查看的是“filter”表中的规则。而根据前面的讲解,filter表只可用于INPUT、FORWARD、OUTPUT三条链中,这就是为什么iptables -L不显示PREROUTING链和POSTROUTING链的原因。

-n: numeric的缩写,numeric意思是数字的,数值的,意思是指定源和目标地址、端口什么的都以数字/数值的方式显示,否则默认会以域名/主机名/程序名等显示,该选项一般与-L合用,因为单独的-n是没有用的(没有-L列表都不显示,所以用-n就没有意义了)。

-v: 在Linux命令里,一般都是指“verbose”,这个词的意思是是“冗余的,啰嗦的”,即输出更加详细的信息

--line-numbers: 如果你想列表有序号,可以加上该选项:iptables -nvL --line-numbers

添加规则

我们可以向某条链中的某个表的最前面添加纪录(即“插入”,用到选项-I,即“insert”),同时也可以向某条链中的某个表的最后添加记录(即“追加”,用到选项-A,即“append”),在vi/vim的命令模式下,按I是在光标所行的行首插入,按A是在光标所在行的行尾插入,跟这个在表头跟表尾插入非常像。

之所以有向前添加和向后添加,是因为如果前面规则的是丢弃或拒绝,那么后面的规则是不会起作用的;而如果前面的是接受后面的是丢弃或拒绝,则接受之后后面的丢弃或拒绝也是不会生效的。(这里要记住就是规则的执行是有先后顺序的)

例如,向INPUT链的filter表中添加一条规则:

iptables -t filter -I INPUT -s 192.168.2.22 -j DROP

  • -t: 是指定插入到哪个表中,不写的话默认为“filter”表;
  • -I: 指定插入到哪条链中,并且会在该链指定表(在这里是filter表)中的最前面插入(I:Input),如果用-A则是在最后插入(A:Append)。
  • -s: 匹配源ip,s: source,源。
  • -j: jump,跳转的意思,后面可指定跳转的target(目标),比如自定义的链,当然更多的是跳转到“action(动作)”中,比如ACCEPT、DROP、REJECT等等。
  • 整个意思,就是向iptables中的“INPUT”链(-I INPUT)的“filter”表(-t filter)的最前面(-I)添加一条记录,这次记录会匹配源地址为“192.168.2.22”的请求(-s 192.168.2.22),并把该请求丢弃掉(-j DROP)。

删除iptables中的记录

1、根据编号删除:**
前面说过,查询iptables规则列表时,添加--line-numbers简写成--line即可显示记录编号,我们现在就可以根据这个编号来删除了:
iptables -t filter -D INPUT 2
-t filter指定操作的表为filter表,-D`表示delete,后面跟的两个参数,第一个是链名,第二个是要删除的规则的编号。

2、根据条件删除:**
iptables -t filter -D INPUT -s 10.37.129.2 -j DROP
删除INPUT链中的filter表中源地址为“10.37.129.2”并且动作为“DROP”的规则。

3、清空:**
-F: flush的缩写,flush是“冲洗、冲掉”的意思,在这里是清空的意思,iptables -t filter -F INPUT代表清空“INPUT”链中“filter”表中的所有规则,如果不指定链不指定表,即直接用iptables -F,则清空所有链中所有表的规则。

修改规则

用“替换”来描述会更好一点,因为所谓的修改其实就是把整个规则替换成新的规则(因为用到一个选项-R,replace“替换”):
iptables -t filter -R INPUT 1 -s 10.37.129.3 -j ACCEPT

其中的-R就是replace,即替换的意思,整句命令意思是从INPUT链中的filter表中替换编号为1的规则,编号1后面的-s 10.37.129.3 -j ACCEPT就是要替换成的新规则。

修改策略(policy)😗*
iptables -P FORWARD DROP

-P: policy,即策略。整个意思是把FORWARD链的默认规则设置为DROP,iptables [-t table] -P chain target这个说明,表示可以根据不同的表,设置不同的限制
iptables -t raw -P OUTPUT ACCEPT
iptables -t filter -P OUTPUT DROP

-d:destination,用于匹配报文的目标地址,可以同时指定多个ip(逗号隔开,逗号两侧都不允许有空格),也可指定ip段:
-p:用于匹配报文的协议类型,可以匹配的协议类型tcp、udp、udplite、icmp、esp、ah、sctp等(centos7中还支持icmpv6、mh)
-i:用于匹配报文是从哪个网卡接口流入本机的,由于匹配条件只是用于匹配报文流入的网卡,所以在OUTPUT链与POSTROUTING链中不能使用此选项
-o`:用于匹配报文将要从哪个网卡接口流出本机,于匹配条件只是用于匹配报文流出的网卡,所以在INPUT链与PREROUTING链中不能使用此选项

iptables的扩展模块
tcp扩展模块

-p tcp -m tcp --sport用于匹配tcp协议报文的源端口,可以使用冒号指定一个连续的端口范围(-p protocol,-m:match,指匹配的模块,很多人可能以为是module的缩写,其实是match的缩写,–sport: source port); -p tcp -m tcp --dport用于匹配tcp协议报文的目标端口,可以使用冒号指定一个连续的端口范围(–dport 80:88)

iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 22:25 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport :22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 80: -j REJECT
iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp ! --sport 22 -j ACCEPT

此外,tcp扩展模块还有-tcp-flags选项,它可以根据TCP头部的“标识位”来匹配。

multiport扩展模块

-p tcp -m multiport --sports用于匹配报文的源端口,可以指定离散的多个端口号,端口之间用”逗号”隔开;
-p udp -m multiport --dports用于匹配报文的目标端口,可以指定离散的多个端口号,端口之间用”逗号”隔开:
#示例如下
iptables -t filter -I OUTPUT -d 192.168.1.146 -p udp -m multiport --sports 137,138 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport ! --dports 22,80 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 80:88 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80:88 -j REJECT

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

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

相关文章

MySQL——索引视图练习题

学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系 Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名 Cno为主键 学生选课表:SC (Sno, Cno, Score)…

大白话高并发(三)

背景 高并发得第三篇,讲一讲压测吧,因为我的目的是模拟100万人同时来秒杀。 是不是真的要找100万个人 没必要 ,你就算100万人掐着表在同一毫秒内把请求请求某一台机器,服务器也不可能在同一时间处理那么多请求,因为…

同步辐射XAFS表征方法的应用场景分析

X射线吸收精细结构XAFS表征方法是一种用于研究物质结构和化学环境的分析技术。XAFS 使用 X 射线照射到物质表面,并观察由此产生的 X 光吸收谱。 ​XAFS 技术通常应用于研究高分子物质、生物分子、纳米结构和其他类型的物质。例如,XAFS 可以用来研究高分子…

使用git上传项目到GitHub教程

文章目录一、安装Git二、上传本地文件到git上。1.创建本地版本库2.通过命令git init把这个文件夹变成Git可管理的仓库3、使用git commit -m "XXX"命令提交4、在Github上创建一个Git仓库5、执行git remote add origin xxxxxxxx.git6、使用$ git push -u origin master…

35、基于51单片机自动灭火避障智能小车 消防灭火小车系统设计

摘要 智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车就是其中的一个体现,本次设计的多功能智能灭火避障小车&#…

MySQL番外篇-硬件优化概述

备注:测试数据库版本为MySQL 8.0 硬件优化概述 MySQL的硬件有: CPU内存硬盘网络资源 对于硬件的选择与调优,在系统上线前就需要考虑起来。 当然我们都知道: 好的CPU,可以让SQL语句解析得更快,进而加快SQL语句的执行速度。大的内存&#…

GEE学习笔记 八十七:python版GEE动态加载地图方法

在Google Earth Engine的python版API更新后,之前使用folium动态加载地图的代码就不能在正常运行,因为整个Google Earth Engine的地图加载服务的URL发生了更新,所以我们也需要更新相关绘制方法。下面我会讲解一种新的绘制方法,大家…

【深度学习】激活函数

上一章——认识神经网络 新课P54介绍了强人工智能概念,P55到P58解读了矩阵乘法在代码中的应用,P59,P60介绍了在Tensflow中实现神经网络的代码及细节,详细的内容可以自行观看2022吴恩达机器学习Deeplearning.ai课程,专…

NVIDIA Tesla V100部署与使用

在先前的实验过程中,使用了腾讯云提供的nvidia T4GPU,尽管其性能较博主的笔记本有了极大提升,但总感觉仍有些美中不足,因此本次博主租赁了nvidia V100 GPU,看看它的性能表现如何。 和先前一样,只需要将服务…

2023美赛A题思路数据代码分享

文章目录赛题思路2023年美国大学生数学建模竞赛选题&论文一、关于选题二、关于论文格式三、关于论文提交四、论文提交流程注意不要手滑美赛A题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片,加入获取一手资源 202…

医学图象分割常用损失函数(附Pytorch和Keras代码)

对损失函数没有太大的了解,就是知道它很重要,搜集了一些常用的医学图象分割损失函数,学习一下! 医学图象分割常见损失函数前言1 Dice Loss2 BCE-Dice Loss3 Jaccard/Intersection over Union (IoU) Loss4 Focal Loss5 Tvesky Loss…

学生投票系统-课后程序(JAVA基础案例教程-黑马程序员编著-第三章-课后作业)

【案例3-4】学生投票系统 记得 关注,收藏,评论哦,作者将持续更新。。。。 【案例介绍】 案例描述 某班级投票竞选班干部,班级学生人数为100人,每个学生只能投一票。 本任务要求,编程实现一个投票程序&…

2023美赛赛题和数据公布啦~【附中文翻译版】

2023美赛赛题和数据公布啦~ 加2023年的美国大学生数学建模竞赛 数学建模竞赛是一项在全球范围内非常受欢迎的竞赛,旨在鼓励学生运用数学知识和建模技能解决实际问题。这项竞赛不仅对学生的数学能力提出了很高的要求,还对他们的创造性、团队协作和沟通能…

经典算法题---链表奇偶重排(好题)双指针系列

我听别人说这世界上有一种鸟是没有脚的,它只能够一直的飞呀飞呀,飞累了就在风里面睡觉,这种鸟一辈子只能下地一次,那一次就是它死亡的时候。——《阿甘正传》这一文章讲解链表的奇偶排序问题,这是一道不难但是挺好的链…

凹凸贴图(Bump Mapping)

凹凸贴图是什么? 我们首先来看low-poly(多边形数较少)mesh和high-poly(多边形数量较多)mesh之间的不同。首先,最明显的不同就是high-poly能够表现出更多细节,但high-poly有比较大的性能开销。有…

springboot下@transcation使用基本介绍

springboot下transcation基本使用的几种可能 普通常使用的几种可能(事务的传播行为默认值Propagation.REQUIRED): transcation只在使用方法A上,A内无调用其他方法,事务正常方法A和方法B在同一个类下,transc…

net6中使用FluentValidation做实体验证(批量注册)

实体验证-FluentValidation 首先明白两个概念 自动验证:就是在请求进入到控制器前FluentValidation就自行完成实体的验证并做错误返回, 优点:简单 少一些手动调用的代码缺点:灵活性差,不好控制,不支持异步…

智慧校园电子班牌系统

智慧电子班牌区别于传统电子班牌,智慧校园电子班牌系统更加注重老师和学生的沟通交流和及时数据交互。学校为每个教室配置一台智能电子班牌,一般安装于教室门口,用来实时显示学校通知、班级通知,可设置集中分布式管理,…

RSA加解密简单实现

目录 浅谈加解密实现方式 MD5加密 DES加密 AES加密 RSA加密 SSL加密认证 关于RSA加解密实现 简单数据加解密的实现 分块加解密实现 附录 浅谈加解密实现方式 关于数据加解密方式,我们一般分为不可逆加密、对称可逆加密、非对称加密、综合加密应用等&…

魔改并封装 YoloV5 Version7 的 detect.py 成 API接口以供 python 程序使用

文章目录IntroductionSection 1 起因Section 2 魔改的思路Section 3 代码Part 1 参数部分Part 2 识别 APIPart 3 完整的 DetectAPI.pyPart 4 修改 dataloaders.pySection 4 调用ReferenceIntroduction YoloV5 作为 YoloV4 之后的改进型,在算法上做出了优化&#xf…