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

Linux防火墙:全面解析IPTables的表、链、规则!

iptables 防火墙用于管理包过滤和 NAT 规则。IPTables 随所有 Linux 发行版一起提供。了解如何设置和配置 iptables 将帮助您有效地管理 Linux 防火墙。

iptables 工具用于管理 Linux 防火墙规则。乍一看,iptables 可能看起来很复杂(甚至令人困惑)。但是,一旦您了解了 iptables 的工作原理及其结构的基础知识,阅读和编写 iptables 防火墙规则就会很容易。

本文是正在进行的 iptables 教程系列的一部分。这是该系列的第一篇文章。

本文解释了 iptables 的结构,并解释了有关 iptables 表、链和规则的基础知识。

在一个高层 iptables 上可能包含多个表。表可能包含多个链。链可以是内置的或用户定义的。链可能包含多个规则。规则是为数据包定义的。

所以,结构是:iptables -> Tables -> Chains -> Rules。这在下图中定义。

图片


: IPTables 表、链和规则结构

重申一遍,表是一堆链,链是一堆防火墙规则。

I. IPTABLES 表和链

IPTables 有以下 4 个内置表。

1.过滤表

过滤器是 iptables 的默认表。所以,如果你没有定义你自己的表,你将使用过滤表。iptables 的过滤表有以下内置链。

  • INPUT 链 – 传入防火墙。用于到达本地服务器的数据包。

  • OUTPUT 链 – 从防火墙传出。用于本地生成并离开本地服务器的数据包。

  • FORWARD 链 – 本地服务器上另一个 NIC 的数据包。对于通过本地服务器路由的数据包。

2. NAT表

iptable 的 NAT 表具有以下内置链。

  • PREROUTING 链 – 在路由之前更改数据包。即在数据包到达系统之后(并且在路由之前)立即发生数据包转换。这有助于将数据包的目标 IP 地址转换为与本地服务器上的路由匹配的内容。这用于 DNAT(目标 NAT)。

  • POSTROUTING 链 – 在路由后更改数据包。即当数据包离开系统时发生数据包转换。这有助于将数据包的源 IP 地址转换为可能与目标服务器上的路由匹配的内容。这用于 SNAT(源 NAT)。

  • OUTPUT 链 – 防火墙上本地生成的数据包的 NAT。

3. Mangle 表

iptables 的 Mangle 表用于专门的数据包更改。这会改变 TCP 报头中的 QOS 位。Mangle 表具有以下内置链。

  • 预路由链

  • 输出链

  • 正向链

  • 输入链

  • POSTROUTING 链

4. 原始表

Iptable 的 Raw 表用于配置例外。原始表具有以下内置链。

  • 预路由链

  • 输出链

下图展示了iptables中的三个重要表。

图片

: IPTables 内置表格

二、IPTABLES 规则

以下是 iptables 规则要记住的要点。

  • 规则包含一个标准和一个目标。

  • 如果条件匹配,则转到目标中指定的规则(或)执行目标中提到的特殊值。

  • 如果条件不匹配,则继续执行下一条规则。

目标值

以下是您可以在目标中指定的可能的特殊值。

  • ACCEPT – 防火墙将接受数据包。

  • DROP – 防火墙将丢弃数据包。

  • QUEUE – 防火墙将数据包传递到用户空间。

  • RETURN – 防火墙将停止为此数据包执行当前链中的下一组规则。控制将返回到调用链。

如果您执行 iptables –list (或) service iptables status,您将看到系统上所有可用的防火墙规则。以下 iptable 示例显示此系统上没有定义防火墙规则。如您所见,它显示默认输入表,带有默认输入链、前向链和输出链。

# iptables -t filter --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

执行以下操作以查看 mangle 表。

# iptables -t mangle --list

执行以下操作以查看 nat 表。

# iptables -t nat --list

执行以下操作以查看原始表。

# iptables -t raw --list

注意:如果不指定 -t 选项,它将显示默认过滤器表。因此,以下两个命令是相同的。

# iptables -t filter --list
(or)
# iptables --list

下面的 iptable 示例显示了在过滤表的输入、转发和输出链中定义了一些规则。

# iptables --list
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --0.0.0.0/0            0.0.0.0/0Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --0.0.0.0/0            0.0.0.0/0Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destinationChain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination
1    ACCEPT     all  --0.0.0.0/0            0.0.0.0/0
2    ACCEPT     icmp --0.0.0.0/0            0.0.0.0/0           icmp type 255
3    ACCEPT     esp  --0.0.0.0/0            0.0.0.0/0
4    ACCEPT     ah   --0.0.0.0/0            0.0.0.0/0
5    ACCEPT     udp  --0.0.0.0/0            224.0.0.251         udp dpt:5353
6    ACCEPT     udp  --0.0.0.0/0            0.0.0.0/0           udp dpt:631
7    ACCEPT     tcp  --0.0.0.0/0            0.0.0.0/0           tcp dpt:631
8    ACCEPT     all  --0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
9    ACCEPT     tcp  --0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
10   REJECT     all  --0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

iptables –list 命令输出中的规则包含以下字段:

  • num - 特定链中的规则编号

  • target – 我们上面讨论的特殊目标变量

  • prot - 协议。tcp、udp、icmp等,

  • opt – 该特定规则的特殊选项。

  • source – 数据包的源 IP 地址

  • 目的地 - 数据包的目的地 IP 地址

http://www.xdnf.cn/news/10518.html

相关文章:

  • Cypress + TypeScript + Vue3
  • 数据库管理与高可用-MySQL全量,增量备份与恢复
  • 劫持进程注入
  • C语言进阶--程序的编译(预处理动作)+链接
  • 数据结构:递归(Recursion)
  • 基于TMC5160堵转检测技术的夹紧力控制系统设计与实现
  • 输入ifconfig,发现ens33不见了,无法连接至虚拟机
  • Golang——3、流程控制语句
  • C++实现伽罗华域生成及四则运算(三)
  • Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)
  • CppCon 2014 学习:C++ in Huge AAA Games
  • STM32F407寄存器操作(多通道单ADC+DMA)
  • 前端面试准备-5
  • Mask_RCNN 环境配置及训练
  • QT中子线程触发主线程弹窗并阻塞等待用户响应-传统信号槽实现
  • DRW - 加密市场预测
  • 考研系列—操作系统:第四章、文件管理(part.2)
  • 利用DeepSeek编写能在DuckDB中读PostgreSQL表的表函数
  • 多任务——进程
  • 基于机器学习的心脏病预测模型构建与可解释性分析
  • WIN11+VSCODE搭建的c/c++环境调试报错解决
  • vue+mitt的简便使用
  • API异常信息如何实时发送到钉钉
  • 重读《人件》Peopleware -(14)Ⅱ 办公环境 Ⅶ 把门带上
  • Windows商店中的免费扫雷游戏应用
  • 将手机网络经USB数据线和本地局域网共享给华为AP6050DN无线接入点
  • 任务22:创建示例Django项目,展示ECharts图形示例
  • 【渲染】拆解三国:谋定天下场景渲染技术
  • 3D Gaussian splatting 06: 代码阅读-训练参数
  • 《机器学习数学基础》补充资料:韩信点兵与拉格朗日插值法