当前位置: 首页 > news >正文

iptables 防火墙

linux防火墙基础

iptables的表,链结构

数据包控制的匹配流程

编写防火墙规则

基本语法,控制类型

添加,查看,删除规则

规则的匹配条件

iptables组件

netfilter :属于内核态的功能体系,是一个内核模块,由多个数据包过滤表组成,其中包含数据包的过滤处理规则集,并根据规则过滤处理IP数据包
iptables :属于用户态的管理工具,如同firewalld、ufw,是一个防火墙应用管理程序,用来实现防火墙规则集的增删改查

iptables概述

Linux 系统的防火墙 :IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables组成。
主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。

四表五链

规则表的作用:容纳各种规则链

规则链的作用:容纳各种防火墙规则

总结:表里有链,链里有规则

四表
表名功能用途
raw表确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。
mangle表修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
nat表负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
filter表负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。
五链
链名功能用途
INPUT处理入站数据包,匹配目标IP为本机的数据包。
OUTPUT处理出站数据包,一般不在此链上做配置。
FORWARD处理转发数据包,匹配流经本机的数据包。
PREROUTING在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。
POSTROUTING在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

数据包到达防火墙时,规则表之间的优先顺序:
raw > mangle > nat > filter

规则链之间的匹配顺序

主机型防火墙:
入站数据(来自外界的数据包,且目标地址是防火墙本机):PREROUTING --> INPUT --> 本机的应用程序
出站数据(从防火墙本机向外部地址发送的数据包):本机的应用程序 --> OUTPUT --> POSTROUTING

网络型防火墙:
转发数据(需要经过防火墙转发的数据包):PREROUTING --> FORWARD --> POSTROUTING

规则链内的匹配顺序:
自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

iptables的使用

iptables防火墙的配置方法

1、使用iptables 命令行。
2、使用system-config-firewall


iptables 命令行配置方法

命令格式:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
控制类型和链名使用大写字母,其余均为小写

常用的控制类型:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回应信息。
REJECT:拒绝数据包通过,会给数据发送端一个响应信息。
SNAT:修改数据包的源地址。
DNAT:修改数据包的目的地址。
REDIRECT:重定向改变目的端口,将接受的包转发至本机的不同端口
MASQUERADE:伪装成一个非固定公网IP地址。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包。

常用的管理选项:
-A :在指定链的末尾追加(--append)一条新的规则
-I :在指定链的开头插入(--insert)一条新的规则,未指定序号时默认作为第一条规则
-R :修改、替换(--replace)指定链中的某一条规则,可指定规则序号或具体内容
-P :设置指定链的默认策略(--policy)
-D :删除(--delete)指定链中的某一条规则,可指定规则序号或具体内容
-F :清空(--flush)指定链中的所有规则,若未指定链名,则清空表中的所有链
-L :列出(--list)指定链中所有的规则,若未指定链名,则列出表中的所有链
-n :使用数字形式(--numeric)显示输出结果,如显示 IP 地址而不是主机名
-v :显示详细信息,包括每条规则的匹配包数量和匹配字节数
--line-numbers:查看规则时,显示规则的序号

查看当前规则栏

iptables -L

加上小n和小v可以更加详细显示出来。不指定表名的情况下默认指定的是filter表

接下来我们指定nat表进行查看,找到里面对应的三个链。

加上大F实现对一个链路的清空

实现对icmp的添加。针对icmp协议,icmp的协议入站表示允许通过。

在第一行插入一条icmp协议丢弃数据包

删除第二条协议

在第二行插入一条tcp协议允许连接。

加上--dport 22指定端口号实现允许ssh连接。

在这里我们使用-R修改最后的控制类型,xshell在同时断开连接了,证明配置修改成功。

更改默认控制类型

黑白名单

#允许F5的内网网段(IP:10.100.100.0/24)访问正式服务器80端口←

iptables -A INPUT -s 10.100.100.0/24 -p tcpdport 80 -j ACCEPT←

#设置远程22端口仅允许堡垒机访问←

iptables -A INPUT -s 10.100.110.1 -p tcp --dport 22 -j ACCEPT

#允许本系统的其他相关服务器访问←
iptables -A INPUT -s 172.16.2.1 -j  ACCEPT

iptables -A INPUT -s 172.16.2.3 -j  ACCEPT

iptables -A INPUT -s 172.16.2.4 -j  ACCEPT

#其余禁止←
iptables -A INPUT -j DROP←
iptables -A FORWARD -j DROP←
iptables -A OUTPUT -j ACCEPT

#保存配置←
iptables-save >/home/intables.rules

其原理为先设置允许的端口和ip,成立白名单,再将所有其他加入到DROP里,成立黑名单,来完成对黑白名单的配置。

添加icmp取反的效果,不包括icmp,没有匹配上

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I FORWARD -d 192.168.80.0/24 -p tcp --dport 24500:24600 -j DROP


规则的匹配

1.通用匹配

可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。

协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址    #可以是IP、网段、域名、空(任何地址)
接口匹配:-i 入站网卡、-o 出站网卡

iptables -A FORWARD ! -p icmp -j ACCEPT 
iptables -A INPUT -s 192.168.80.11 -j DROP
iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP

2.隐含匹配

要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。

端口匹配:--sport 源端口、--dport 目的端口
#可以是个别端口、端口范围
--sport 1000            匹配源端口是1000的数据包
--sport 1000:3000        匹配源端口是1000-3000的数据包
--sport :3000            匹配源端口是3000及以下的数据包
--sport 1000:            匹配源端口是1000及以上的数据包
注意:--sport 和 --dport 必须配合 -p <协议类型> 使用

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I FORWARD -d 192.168.80.0/24 -p tcp --dport 24500:24600 -j DROP

TCP标志位匹配:--tcp-flags TCP标志位

iptables -I INPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
iptables -I OUTPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT

iptables -I INPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH ACK -j REJECT


#tcp三次握手时的第一次握手放行 SYN 为 1 数据报文,拒绝其他包;第二次握手放行 SYN,ACK 为 1 数据报文,拒绝其他包

ICMP类型匹配:--icmp-type ICMP类型        
#可以是字符串、数字代码
“Echo-Request”(代码为 8)表示 请求
“Echo-Reply”(代码为 0)表示 回显
“Destination-Unreachable”(代码为 3)表示 目标不可达
关于其它可用的 ICMP 协议类型,可以执行“iptables -p icmp -h”命令,查看帮助信息

iptables -A INPUT -p icmp --icmp-type 8 -j DROP        #禁止其它主机ping 本机
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT    #允许本机ping 其它主机

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT    #当本机ping 不通其它主机时提示目标不可达


#此时其它主机需要配置关于icmp协议的控制类型为 REJECT
iptables -A INPUT -p icmp -j REJECT                    


3.显式匹配

要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。
多端口匹配:-m multiport --sport 源端口列表
            -m multiport --dport 目的端口列表
            

iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT            
iptables -A INPUT -p udp -m multiport --dport 53,67,68 -j ACCEPT    

实现一条命令进行多次部署操作

IP范围匹配:-m iprange --src-range IP范围
iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.20-192.168.80.30-j DROP            
#禁止转发源地址位于192.168.80.100-192.168.80.200的udp数据包

MAC地址匹配:-m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP

#禁止来自某MAC 地址的数据包通过本机转发

状态匹配:-m state --state 连接状态
常见的连接状态:
NEW :主机连接目标主机,在目标主机上看到的第一个想要连接的包
ESTABLISHED :主机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态
RELATED :主机已与目标主机进行通信,目标主机发起新的链接方式,一般与ESTABLISHED 配合使用
INVALID :无效的封包,例如数据破损的封包状态

实现传递过数据包的协议,其他数据包统统放通

iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 443,80,22,21,20,53 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT            
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP 
#对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过。简单来说就是只允许所有自己发出去的包进来。
#比如我和你做生意,我们谈成了生意,到了支付的时候,就可以直接调用与这笔生意相关的支付功能

相关文章:

iptables 防火墙

linux防火墙基础 iptables的表&#xff0c;链结构 数据包控制的匹配流程 编写防火墙规则 基本语法&#xff0c;控制类型 添加&#xff0c;查看&#xff0c;删除规则 规则的匹配条件 iptables组件 netfilter &#xff1a;属于内核态的功能体系&#xff0c;是一个内核模块…...

软件设计师笔记1

分享一下学习软考时做的笔记&#xff0c;笔者太懒了&#xff0c;后续篇章都没咋记录&#xff0c;现在放出来水几篇文章 另外&#xff0c;本章内容都是结合教材&#xff0c;B站课堂记录。下一篇软考笔记知识点来自真题 软考笔记 第一章 1. 计算机的组成 1. 控制器 控制器由…...

springboot集成mybatis 单元测试

1、依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…...

ecc dsa rsa des

ECC&#xff08;椭圆曲线密码学&#xff09;、DSA&#xff08;数字签名算法&#xff09;、RSA&#xff08;一种公钥加密技术&#xff09;和DES&#xff08;数据加密标准&#xff09;都是密码学领域中重要的加密和安全技术。下面是对这四种技术的简要介绍&#xff1a; 椭圆曲线密…...

Gitee的原理及应用详解(三)

本系列文章简介&#xff1a; Gitee是一款开源的代码托管平台&#xff0c;是国内最大的代码托管平台之一。它基于Git版本控制系统&#xff0c;提供了代码托管、项目管理、协作开发、代码审查等功能&#xff0c;方便团队协作和项目管理。Gitee的出现&#xff0c;在国内的开发者社…...

Mia for Gmail for Mac:Mac用户的邮件管理首选

对于追求高效工作的Mac用户来说&#xff0c;Mia for Gmail for Mac无疑是邮件管理的首选工具。它以其卓越的性能和丰富的功能&#xff0c;为用户带来了前所未有的高效邮件管理体验。 Mia for Gmail for Mac不仅支持多帐号登录和标签选择功能&#xff0c;还提供了邮件分类、垃圾…...

如何在忘记密码的情况下解锁 iPhone? 6 种方法分享

您是否因为没有密码而无法解锁您的 iPhone&#xff1f; 别担心&#xff0c;这种情况比你想象的更常见&#xff01;忘记密码是 iPhone 用户面临的最常见问题之一&#xff0c;而且可能非常令人沮丧 - 但不要绝望。 在这篇文章中&#xff0c;我们将与您分享绕过 iPhone 屏幕密码…...

国产操作系统上使用rsync恢复用户数据 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上使用rsync恢复用户数据 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在国产操作系统上使用rsync备份并还原用户数据的文章。rsync是一款功能强大的文件同步和备份工具&#xff0c;广泛用于Linux系…...

Elastic Cloud 将 Elasticsearch 向量数据库优化配置文件添加到 Microsoft Azure

作者&#xff1a;来自 Elastic Serena Chou, Jeff Vestal, Yuvraj Gupta 今天&#xff0c;我们很高兴地宣布&#xff0c;我们的 Elastic Cloud Vector Search 优化硬件配置文件现已可供 Elastic Cloud on Microsoft Azure 用户使用。 此硬件配置文件针对使用 Elasticsearch 作…...

Mongodb 可视化工具Robot 3t安装【windows环境下】

下载应用 打开连接点我 选择windows版本并点击下载 下载完毕&#xff0c;双击并傻瓜安装 连接数据库 点击图标&#xff0c; 点击create创建连接 填写host和port 如果有用户名密码的&#xff0c;在authentication里填写 5. save 并连接即可使用&#xff01;...

【MATLAB】信号的熵

近似熵、样本熵、模糊熵、排列熵|、功率谱熵、奇异谱熵、能量熵、包络熵 代码内容&#xff1a; 获取代码请关注MATLAB科研小白的个人公众号&#xff08;即文章下方二维码&#xff09;&#xff0c;并回复信号的熵本公众号致力于解决找代码难&#xff0c;写代码怵。各位有什么急需…...

【QT环境配置】节约msvc2017灰色不可用问题

1. 问题 msvc2017不可用&#xff0c;2019、2022都同理解决。 2. 解决 打开控制面板->程序->程序和功能->找到自己安装的vs程序->鼠标右键后出现卸载更改->点击更改 找到下面组件即可。&#xff08;msvc2019就找msvcv142&#xff09;...

MyBatis框架的使用:mybatis介绍+环境搭建+基础sql的使用+如何使用Map传入多个参数+返回多个实体用List或者Map接收+特殊sql的使用

MyBatis框架的使用&#xff1a;mybatis介绍环境搭建基础sql的使用如何使用Map传入多个参数返回多个实体用List或者Map接收特殊sql的使用 一、MyBatis介绍1.1 特性1.2 下载地址1.3 和其它持久层技术对比 二、搭建环境2.1配置maven2.2 创建mybatis配置文件2.3 搭建测试环境 三、基…...

linux centos nginx配置浏览器访问后端(tomcat日志)

1、配置nginx访问tomcat日志路径 vim /usr/local/nginx/conf/nginx,conflocation ^~ /logs {autoindex on;autoindex_exact_size on;autoindex_localtime on;alias /home/tomcat/apache-tomcat-9.0.89-1/logs;}###配置讲解### 1、location ^~ /logs { … }: location&#xf…...

01-03.Vue:v-on的事件修饰符

01-03.Vue&#xff1a;v-on的事件修饰符 前言v-on的事件修饰符.stop的举例.capture举例.prevent的举例1.prevent的举例2.self举例 前言 我们接着上一篇文章 01-02.Vue的常用指令(二) 来讲 下一篇文章 01-04.Vue的使用示例&#xff1a;列表功能 v-on的事件修饰符 v-on 提供了很…...

MSI U盘重装系统

MSI U盘重装系统 1. 准备一块U盘 首先需要将U盘格式化&#xff0c;这个格式化并不是在文件管理中将U盘里面的所有东西都删干净就可以了&#xff0c;需要在磁盘管理中&#xff0c;将这块U盘格式化&#xff0c;如果这块U盘有分区的话&#xff0c;那将所有的分区都格式化并且删除…...

ubuntu如何安装gitlab runner

一、什么是GitLab Runner GitLab Runner 是 GitLab 提供的一个开源工具,用于在构建、测试和部署过程中执行作业。它是 GitLab 持续集成和持续部署(CI/CD)工作流的核心组件之一。 GitLab Runner 有以下主要功能: 作业执行:GitLab Runner 会接收来自 GitLab 的作业请求,并在指定…...

Java整合ELK实现日志收集 之 Elasticsearch、Logstash、Kibana

简介 Logstash&#xff1a;用于收集并处理日志&#xff0c;将日志信息存储到Elasticsearch里面 Elasticsearch&#xff1a;用于存储收集到的日志信息 Kibana&#xff1a;通过Web端的可视化界面来查看日志&#xff08;数据可视化&#xff09; Logstash 是免费且开放的服务器端数…...

如何判断自己的情商高低?

什么是情商&#xff1f; 情商&#xff08;简称为EQ&#xff09;&#xff0c;也叫情绪智力&#xff0c;和我们通常提到的智商智力有所不同&#xff08;侧重于理性思维&#xff09;&#xff0c;情商更贴近实际生活&#xff0c;如&#xff1a;情绪识别和自我管理&#xff0c;自我…...

JAVA:Spring Boot整合MyBatis Plus持久层

1、简述 MyBatis Plus是MyBatis的增强工具包&#xff0c;它在MyBatis的基础上进行了扩展&#xff0c;提供了许多便捷的功能&#xff0c;例如通用CRUD操作、分页插件、代码生成器等。使用MyBatis Plus&#xff0c;开发者可以更加方便地进行持久层操作&#xff0c;并且减少了很多…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...