Linux 防火墙( iptables )

目录

一、 Linux 防火墙基础

1. 防火墙基础概念

(1)防火墙的概述与作用

(2)防火墙的结构与匹配流程

(3)防火墙的类别与各个防火墙的区别

2. iptables 的表、链结构

(1)规则表

(2)规则链

3. 数据包过滤的匹配流程

(1)规则表之间的顺序

(2)规则链之间的顺序

入站流量处理流程

出站流量处理流程

(3)规则链内部各条防火墙规则之间的顺序

总结速记表

二、编写防火墙规则

1. iptables 的基础设置

(1)iptables 安装

(2)启动防火墙并设置开机自启动

2. 基本语法、数据包控制类型

(1)基本语法

(2)控制类型

3. 添加·、查看、删除规则等基本规则

(1)添加新的规则(链的末尾可使用“-p 协议名”作匹配条件)

(2)查看规则列表(可结合“-L”,“--line-numbers”)

(3)删除、清空规则

(4)设置默认策略

三、规则的匹配条件(分为三大类)

1. 通用匹配

(1)协议匹配

(2)地址匹配

(3)网络接口匹配

2. 隐含匹配

(1)端口匹配

(2)ICMP 类型匹配

3. 显式匹配

(1)多端口匹配

(2)IP范围匹配

(3)MAC 地址匹配

(4)状态匹配


一、 Linux 防火墙基础

1. 防火墙基础概念

(1)防火墙的概述与作用
  • 定义:防火墙是位于网络边界的 安全屏障,通过预定义规则控制进出网络的流量。

  • 核心功能

    • 访问控制:允许或拒绝特定流量(如 IP、端口、协议)。

    • 网络地址转换(NAT):隐藏内部网络结构,实现 IP/端口映射。

    • 流量监控:记录网络活动,检测异常行为(如 DDoS 攻击)。

    • 防御攻击:阻止恶意流量(如 SYN Flood、ICMP 洪水)。

(2)防火墙的结构与匹配流程
           ┌───────────────┐  输入流量 →│ 规则匹配引擎 │→ 输出流量  └───────┬───────┘  ↓  [日志记录/警报]  
数据包 → 匹配规则 → 执行动作(ACCEPT/DROP/REJECT)  ↑  规则数据库(表+链+规则)  

匹配流程
协议分析 → 规则匹配 → 执行动作(允许/拒绝/日志)

(3)防火墙的类别与各个防火墙的区别
  • iptables:传统防火墙工具,用于管理Linux防火墙的命令程序,基于 Netfilter 框架,通过规则表(Tables)和规则链(Chains)管理流量。是“用户态”(User Space ,用户空间)的防火墙管理体;通常在/sbin/iptables 目录下。

  • nftables:iptables 的替代品,在Linux内核中实现包过滤防火墙的内部结构,语法更简洁,性能更优,逐步成为主流。是“内核态”(Kernel Space ,内核空间)不以程序或文件形式存在的防火墙功能体系。

  • firewalld:动态防火墙管理工具(Red Hat 系默认),支持区域(Zones)和运行时/永久配置。

  •  类型对比

工具特点适用场景
iptables基于 Netfilter 框架,直接管理规则表/链,语法复杂但灵活。精细化控制、复杂网络环境
nftablesiptables 的替代品,统一语法、性能更优,支持多规则合并。新系统、追求高效管理的场景
firewalld动态防火墙管理工具,支持运行时/永久配置,抽象为“服务”和“区域”。快速配置(如开放 Web 服务)

2. iptables 的表、链结构

iptables 的作用是为了过滤机制的实现提供规则

(1)规则表
表名功能常见操作
filter数据包过滤(默认表)确定是否放行数据包允许/拒绝流量(ACCEPT/DROP)
nat网络地址转换(NAT)修改数据包中的源、目标 IP 地址或端口。端口转发、IP 伪装(MASQUERADE)
mangle修改数据包头部(如 TTL(生存周期)、TOS(服务类型))为数据包设置标记标记数据包(MARK)
raw决定是否对数据包进行状态跟踪标记不追踪的数据包(NOTRACK)
(2)规则链

每个表包含多个链,链是规则的集合,决定数据包的处理路径:

链名所属表触发场景
POSTROUTINGmangle, nat数据包离开网卡前(SNAT 修改源地址)
PREROUTINGraw, mangle, nat数据包进入网卡后、路由决策前(DNAT 修改目标地址)
INPUTfilter数据包目标是本机地址应用(入站)
OUTPUTfilter本机向外发出的数据包(出站)
FORWARDfilter数据包需要转发到其他主机(路由开启时生效)

链路由图

外部数据 → PREROUTING → 路由判断 → 目标是否本机?  ↓                 ↙             ↘  INPUT链         FORWARD链        OUTPUT链  ↓                 ↓               ↓  本机进程          转发处理        POSTROUTING → 外发

3. 数据包过滤的匹配流程

匹配流程:

数据包依次经过不同 表(raw → mangle → nat → filter)。

在表中按 链 的顺序处理(如 PREROUTING → INPUT)。

链内规则按 从上到下 顺序匹配,命中则执行动作(ACCEPT/DROP)。

(1)规则表之间的顺序

数据包依次经过 raw → mangle → nat → filter 表的处理:

  1. raw 表PREROUTING链:决定是否跳过连接追踪(如标记 NOTRACK)。

  2. mangle 表PREROUTING链:修改数据包头部(如调整 TTL)。

  3. nat 表PREROUTING链:执行地址转换(如 DNAT 端口映射)。

  4. filter 表INPUT链:最终决定是否允许数据包通过。

(2)规则链之间的顺序

数据包根据方向触发不同链:

  • 入站流量(如访问本机 Web 服务):

    网卡 → PREROUTING(raw/mangle/nat) → 路由决策 → INPUT(filter) → 本地应用  
  • 转发流量(如路由器转发数据):

    网卡 → PREROUTING → 路由决策 → FORWARD(filter) → POSTROUTING → 出站网卡  
  • 出站流量(如本机访问外网):

    本地应用 → OUTPUT(filter) → POSTROUTING(mangle/nat) → 出站网卡  
入站流量处理流程
1. 网卡接收数据包  ↓  
2. raw 表的 PREROUTING 链  ↓  
3. mangle 表的 PREROUTING 链  ↓  
4. nat 表的 PREROUTING 链(DNAT)  ↓  
5. 路由决策(目标是否为本机?)  ↓  
6. 是 → filter 表的 INPUT 链(决定是否允许进入本机)  ↓  
7. 本地应用接收  
出站流量处理流程
1. 本地应用发送数据包  ↓  
2. filter 表的 OUTPUT 链(决定是否允许出站)  ↓  
3. mangle 表的 POSTROUTING 链  ↓  
4. nat 表的 POSTROUTING 链(SNAT/MASQUERADE)  ↓  
5. 数据包从网卡发出  
(3)规则链内部各条防火墙规则之间的顺序

执行原则

  • 从上到下逐条匹配

  • 首次匹配后停止(ACCEPT/DROP/REJECT)

  • 未匹配则执行链的默认策略(通过 iptables -P 设置)

总结速记表

核心概念要点
防火墙作用访问控制、NAT、流量监控、防御攻击
表与链的关系表按功能分类,链按流量方向划分
匹配流程顺序raw → mangle → nat → filter(表顺序);PREROUTING → INPUT/FORWARD → POSTROUTING(链顺序)
安全最佳实践默认拒绝(-P DROP)、细化规则优先、定期审计规则

二、编写防火墙规则

1. iptables 的基础设置

(1)iptables 安装

yum -y install iptables iptables-services     ##注意有些系统装过iptables,直接下一步启动就好

(2)启动防火墙并设置开机自启动

systemctl stop firewalld     ##关闭默认的 防火墙(firewalld),避免产生影响

systemctl disable  firewalld

systemctl start iptables.service     ##启动iptables 防火墙

systemctl enable iptables.service

2. 基本语法、数据包控制类型

(1)基本语法
iptables [-t 表名] 命令选项 [链名] [规则条件] [-j 控制类型  ]

参数解析

  • -t:指定操作表(不指定,默认为filter表)

  • 命令选项:-A(追加)/-I(插入)/-D(删除)/-L(查看)等

  • -j:指定数据包处理动作(ACCEPT/DROP等)

  • -p : 指定协议

(2)控制类型
控制类型功能描述典型场景
ACCEPT允许通过开放SSH端口(22)
DROP静默丢弃防御端口扫描
REJECT拒绝并返回错误明确拒绝HTTP请求(返回RST)
LOG记录日志(不阻断流量)/var/log/messages调试防火墙规则
SNAT源地址转换内网机器访问外网
DNAT目标地址转换外网访问内网服务器
MASQUERADE动态源地址转换拨号上网等动态IP环境

3. 添加·、查看、删除规则等基本规则

管理选项:

类别选项用途
增加-A追加到最后一行
-I插入到第一行(或指定序号)
查看-L列出所有规则
-n以数字形式显示
-v详细信息
--line(--line-numbers)显示序号
删除-D删除一条(指定序号或内容)
-F清空所有
修改-R替换某条规则
设置默认-P设置默认规则
(1)添加新的规则(链的末尾可使用“-p 协议名”作匹配条件)
# 允许特定IP访问SSH  
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT  # 插入规则到链首(优先级最高)  
iptables -I INPUT 1 -p icmp -j DROP          # 禁止所有ping  # 设置端口转发(需开启ip_forward)  
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80  
(2)查看规则列表(可结合“-L”,“--line-numbers”)
# 查看filter表规则(默认表)  
iptables -L -n --line-numbers -v  # 查看nat表规则  
iptables -t nat -L -n  # 输出解析:  
# num   pkts bytes target     prot opt in out source      destination  
# 1      200 12000 ACCEPT     tcp  --  *  *   192.168.1.100 0.0.0.0/0   tcp dpt:22  
(3)删除、清空规则
# 按编号删除  
iptables -D INPUT 2          # 删除INPUT链第2条规则  # 按条件删除  
iptables -D INPUT -s 192.168.1.100 -j ACCEPT  # 清空所有规则  
iptables -F                  # 清空当前表  默认filter表
iptables -t nat -F           # 清空nat表  
(4)设置默认策略
# 设置INPUT链默认拒绝所有入站  
iptables -P INPUT DROP  # 设置OUTPUT链默认允许所有出站  
iptables -P OUTPUT ACCEPT  # 注意:默认策略应在具体规则前设置!  

三、规则的匹配条件(分为三大类)

匹配条件是什么?有什么用?

1. 通用匹配(常规匹配,可直接使用)

(1)协议匹配

结合“ -p  协议名 ”的形式指定,用来检查数据包所使用的网络协议(--protocol),可用协议类型在/etc/procotols 文件。

iptables -I INPUT -p icmp -j DROP   //丢弃通过 icmp 协议访问防火墙本机的数据包iptables -A FORWARD ! -p icmp -j ACCEPT   //允许转发经过防火墙的除 icmp 协议之外的数据包
(2)地址匹配

结合“-s 源地址” 或 “-d 目标地址 ”的形式指定,用来检查数据包的源地址(--source)或目标地址(--destination)。

##拒接转发源地址192.168.1.11的数据,允许转发源地址位于192.168.7.0/24网段的数据
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT#遭到小规模扫描和攻击时(例如10.20.30.0/24),封锁IP地址
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I FORWARD -s 10.20.30.0/24 -j DROP
(3)网络接口匹配

结合“-i 接口名” 和 “-o 接口名 ”的形式指定,用于检查数据包从防火墙的哪一个接口进入或发出,分别对应入站网卡(--in-interface)、出站网卡(--out-interface)

##要丢弃从外网接口访问防火墙本机且源地址为私有地址的数据包
iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i ens33 -s 172.16.0.0/16 -j DROP
iptables -A INPUT -i ens33 -s 192.168.0.0/16 DROP

2. 隐含匹配(指定的协议匹配为前提条件,无法单独使用)

(1)端口匹配

结合“--sport 源端口” 或 “--dport 目标端口” 的形式,针对的协议为 TCP 或 UDP,用来检查数据包的源端口或目标端口。单个端口号或以冒号“ : ”分隔,但多个端口不采用。

##允许为网段192.168.4.0/24 转发 DNS 查询数据包
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT
(2)ICMP 类型匹配

结合“--icmp-type ICMP” 的形式,用于检查ICMP数据包的类型(--icmp-type).

##禁止从其他主机ping本机,但是允许本机ping其他本机
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

3. 显式匹配(要求额外的内核模块提供支持,必须“-m 模块名称”形式调用)

(1)多端口匹配

结合“-m multiport --dports 端口列表”、“-m multiport --sports 端口列表”的形式,用于检查数据包的源端口、目标端口、多个端口以逗号进行分隔。

iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
(2)IP范围匹配

结合“-m iprange --src-range IP 范围”、“-m iprange --dst-range IP范围”的形式,用于检查数据包的源地址、目标地址。

iptables -A FORWARD -p tcp -m iprange --src-range192.168.4.21-192.168.4.28 -j DROP
(3)MAC 地址匹配

结合“-m mac --mac-source MAC地址”的形式,用于检查数据包的源MAC地址。

iptables -A INPUT -m mac --mac-source MAC地址  -j DROP
(4)状态匹配

结合“-m state --state 连接状态”的形式,基于iptables 的状态跟踪机制用来检查数据包的连接状态(State)。

##禁止转发与正常TCP连接无关的非--syn请求数据包
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP##只开放本机Web服务(80端口),但对发给本机的TCP应答数据包放行
iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

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

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

相关文章

大数据 - 2. Hadoop - HDFS(分布式文件系统)

前言 为什么海量数据需要分布式存储技术? 文件过大时,单台服务器无法承担,要靠数量来解决。数量的提升带来的是网络传输、磁盘读写、CPU、内存等各方面的提升。 众多的服务器一起工作,如何保证高效且不出错 ? 大数…

使用cursor进行原型图设计

1.下载cursor 2.模式设置: 模型使用claude-3.7-sonnet的think模式 3.引导词模板: 我想要开发一个中高考英语口语考试的模拟考试系统,我需要将上面的这个应用输出成高保真的原型图设计。请考虑以下的规范: 用户体验&#xff1…

极狐GitLab 功能标志详解

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 功能标志 (BASIC ALL) 使用功能标志,您可以将应用程序的新功能小批量部署到生产环境中。您可以为部分用户打开和…

AI与无人驾驶汽车:如何通过机器学习提升自动驾驶系统的安全性?

引言 想象一下,在高速公路上,一辆无人驾驶汽车正平稳行驶。突然,前方的车辆紧急刹车,而旁边车道有一辆摩托车正快速接近。在这千钧一发的瞬间,自动驾驶系统迅速分析路况,判断最安全的避险方案,精…

【NLP 63、大模型应用 —— Agent】

人与人最大的差距就是勇气和执行力,也是唯一的差距 —— 25.4.16 一、Agent 相关工作 二、Agent 特点 核心特征: 1.专有场景(针对某个垂直领域) 2.保留记忆(以一个特定顺序做一些特定任务,记忆当前任务的前…

RAGFlow本地部署教程 :多模态检索+动态生成,用AI重构企业知识生产力

RAGFlow是一款基于检索增强生成(RAG)技术的智能工作流平台,通过整合多源数据检索与生成式AI模型,优化企业知识管理、智能问答及自动化报告生成,核心功能包括: 多源数据融合:支持数据库、文档库、…

【C/C++】深入理解指针(二)

文章目录 深入理解指针(二)1.const修饰指针1.1 const修饰变量1.2 const修饰指针变量 2.野指针2.1 野指针成因1.指针未初始化2. 指针越界访问3.指针指向的空间释放 2.2 如何规避野指针2.2.1 指针初始化2.2.2 小心指针越界2.2.3 指针变量不再使⽤时,及时置NULL&#x…

【verilog】在同一个 always 块中写了多个“看起来独立”的 if / if-else,到底谁先谁后,怎么执行?会不会冲突?

🔍 问题本质 在一个 always (posedge clk) 块中,所有的代码都是顺序执行的。但这不意味着它就像软件一样“一条一条执行”,因为最终是电路!电路是并行存在的! Verilog 是硬件描述语言(HDL)&am…

【React】什么是 Hook

useStateuseEffectuseRef 什么是hook?16.8版本出现的新特性。可以在不编写class组件的情况下使用state以及其它的React特性 为什么有hook?class组件很难提取公共的重用的代码,然后反复使用;不编写类组件也可以使用类组件的状态st…

如何查看自己抖音的IP属地?详细教程及如何修改

在当今互联网时代,IP属地信息已成为各大社交平台(如抖音、微博、快手等)展示用户真实网络位置的重要功能。以下是关于如何查看抖音IP属地的详细教程及常见问题解答,帮助您快速了解相关信息: 一、如何查看抖音账号的IP属…

深度学习算力革新:AI服务器在运维工作中的智能化实践

【导语】作为IT基础设施服务领域的从业者,我们在日常工作中发现,AI服务器的智能化运维能力正在重塑传统IDC的管理模式。本文将以DeepSeek系列服务器为例,分享智能算力设备在真实运维场景中的创新应用。 一、传统服务器集群的运维痛点 在数据…

安装部署RabbitMQ

一、RabbitMQ安装部署 1、下载epel源 2、安装RabbitMQ 3、启动RabbitMQ web管理界面 启用插件 rabbitmq数据目录 创建rabbitmq用户 设置为管理员角色 给用户赋予权限 4、访问rabbitmq

中间件--ClickHouse-4--向量化执行(什么是向量?为什么向量化执行的更快?)

1、向量(Vector)的概念 (1)、向量的定义 向量:在计算机科学中,向量是一组同类型数据的有序集合,例如一个包含多个数值的数组。在数据库中,向量通常指批量数据(如一列数…

Python PDF 转 Markdown 工具库对比与推荐

根据最新评测及开源社区实践,以下为综合性能与适用场景的推荐方案: 1. ‌Marker‌ ‌特点‌: 转换速度快,支持表格、公式(转为 LaTeX)、图片提取,适配复杂排版文档‌。依赖 PyTorch&#xff0c…

Vue 和 Spring boot 和 Bean 不同生命周期

一、Vue 组件生命周期 父子组件生命周期顺序: 创建时: 父 beforeCreate → 父 created → 父 beforeMount → 子组件生命周期 → 父 mounted 更新时: 父 beforeUpdate → 子组件更新 → 父 updated。 销毁时: 父 beforeDestroy…

Microsoft Azure 基础知识简介

Microsoft Azure 基础知识简介 已完成100 XP 2 分钟 Microsoft Azure 是一个云计算平台,提供一系列不断扩展的服务,可帮助你构建解决方案来满足业务目标。 Azure 服务支持从简单到复杂的一切内容。 Azure 具有简单的 Web 服务,用于在云中托…

C语言链接数据库

目录 使用 yum 配置 mysqld 环境 查看 mysqld 服务的版本 创建 mysql 句柄 链接数据库 使用数据库 增加数据 修改数据 查询数据 获取查询结果的行数 获取查询结果的列数 获取查询结果的列名 获取查询结果所有数据 断开链接 C语言访问mysql数据库整体源码 通过…

【Maven】手动安装依赖到本地仓库

【Maven】手动安装依赖到本地仓库 【一】下载依赖【二】安装 JAR 文件到本地仓库【三】验证安装【四】在项目中使用该依赖【1】注意事项【2】额外提示 【一】下载依赖 登录到中央仓库下载依赖,中央仓库地址:https://mvnrepository.com/ 搜搜你的依赖的a…

腾讯云golang一面

go垃圾回收机制 参考自:https://zhuanlan.zhihu.com/p/334999060 go 1.3 标记清除法 缺点 go 1.5 三色标记法 屏障机制 插入屏障 但是如果栈不添加,当全部三色标记扫描之后,栈上有可能依然存在白色对象被引用的情况(如上图的对象9). 所以要对栈重新进行三色标记扫…

跨平台嵌入式音视频开发指南:EasyRTC音视频通话的多场景适配与AI扩展能力

在数字化通信技术飞速发展的今天,实时音视频通信已成为众多智能设备和应用的核心功能。从智能家居到远程办公,从在线教育到智能安防,音视频通信技术的应用场景不断拓展,对低延迟、高稳定性和跨平台兼容性的需求也在持续增长。在这…