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

理解 iptables 的表与链

理解 iptables 的表与链

iptables 是 Linux 中用于配置防火墙规则的工具,其核心功能是通过表和链来处理数据包。以下是关于 iptables 表与链的详细说明,以及如何利用这些规则实现特定的网络行为。


在这里插入图片描述

1. 四种表及其优先级

iptables 的表按照优先级从高到低依次为:

  • raw 表:优先级最高,主要用于处理连接跟踪(如标记某些数据包不被连接跟踪)。
  • mangle 表:用于修改数据包的内容或元数据(如 TTL、TOS 等)。
  • nat 表:用于网络地址转换(如 SNAT 和 DNAT)。
  • filter 表:用于过滤数据包(如允许或拒绝流量)。

2. 各表中的链

filter 表

主要负责数据包的过滤功能,包含以下链:

  • INPUT 链:过滤所有目标地址是本机的数据包。
  • FORWARD 链:过滤所有经过本机转发的数据包。
  • OUTPUT 链:过滤所有由本机产生的数据包。
nat 表

主要负责网络地址转换,包含以下链:

  • PREROUTING 链:在路由决策之前,改变数据包的目标地址(DNAT)。
  • POSTROUTING 链:在路由决策之后,改变数据包的源地址(SNAT)。
  • OUTPUT 链:本地产生的数据包,在路由决策之前,可以改变目标地址。
mangle 表

主要用于修改数据包的内容或元数据,包含以下链:

  • PREROUTING 链:在数据包进入时修改。
  • INPUT 链:在数据包到达本机时修改。
  • FORWARD 链:在数据包转发时修改。
  • OUTPUT 链:在本地产生数据包时修改。
  • POSTROUTING 链:在数据包离开本机时修改。
raw 表

主要用于标记数据包是否需要连接跟踪,包含以下链:

  • PREROUTING 链:在数据包进入时处理。
  • OUTPUT 链:在本地产生数据包时处理。

3. 数据包处理流程

在这里插入图片描述

以下是数据包经过 iptables 的完整处理流程:

  1. 数据包进入时

    • 首先进入 mangle 表的 PREROUTING 链,可以在此修改数据包头内容。
    • 接着进入 nat 表的 PREROUTING 链,可以在此进行 DNAT(目标地址转换)。
  2. 路由判断

    • 根据路由表判断数据包是发往本机还是需要转发。
  3. 如果是发往本机

    • 进入 filter 表的 INPUT 链,根据规则过滤限制进入本机的数据包。
    • 数据包进入本机后,可能会触发本地应用程序的响应。
    • 本地生成的响应数据包进入 filter 表的 OUTPUT 链,根据规则过滤限制发送出去的数据包。
  4. 如果是转发

    • 进入 filter 表的 FORWARD 链,根据规则过滤限制转发的数据包。
  5. 数据包离开时

    • 最后进入 mangle 表的 POSTROUTING 链,可以在此修改数据包内容。
    • 接着进入 nat 表的 POSTROUTING 链,可以在此进行 SNAT(源地址转换)。

4. 示例规则解析

以下两条规则展示了如何使用 iptables 实现“拒绝所有端口连接,但允许 SSH(22 章口)连接”的功能:

规则 1:拒绝所有端口连接
iptables -t filter -A INPUT -s 0.0.0.0/0.0.0.0 -d X.X.X.X -j DROP
  • -t filter:指定操作的是 filter 表。
  • -A INPUT:将规则追加到 INPUT 链。
  • -s 0.0.0.0/0.0.0.0:匹配来自任何源地址的数据包。
  • -d X.X.X.X:匹配目标地址为 X.X.X.X 的数据包。
  • -j DROP:丢弃匹配的数据包。
规则 2:允许 SSH(22 端口)连接
iptables -I INPUT -s 0.0.0.0/0.0.0.0 -d X.X.X.X -p tcp --dport 22 -j ACCEPT
  • -I INPUT:将规则插入到 INPUT 链的最前面(优先级高于之前的规则)。
  • -p tcp:匹配 TCP 协议的数据包。
  • --dport 22:匹配目标端口为 22 的数据包。
  • -j ACCEPT:接受匹配的数据包。

5. 规则执行顺序的重要性

iptables 的规则是按顺序匹配的,因此规则的插入顺序非常重要。例如:

  • 如果先添加了 DROP 规则,则所有数据包都会被丢弃,后续的 ACCEPT 规则将不会生效。
  • 因此,通常会优先插入允许特定流量的规则(如 ACCEPT),然后再添加通用的拒绝规则(如 DROP)。

6. 总结

通过理解 iptables 的表与链,我们可以灵活地配置防火墙规则,从而实现各种网络需求。上述示例展示了如何通过 filter 表的 INPUT 链实现“拒绝所有端口连接,但允许 SSH(22 端口)连接”的功能。这种规则在服务器安全管理中非常常见,能够有效保护系统免受未经授权的访问。

相关文章:

  • Maven 多仓库与镜像配置全攻略:从原理到企业级实践
  • Androidjetpack之viewmodel的原理分析
  • 2025年最新Web安全(面试题)
  • 网络服务之DHCP
  • 新加坡太白私募:金融创新与稳健发展的典范
  • 探索亮数据Web Unlocker API:让谷歌学术网页科研数据 “触手可及”
  • 图像预处理-图像掩膜
  • mysql表类型查询
  • 修改镭神激光雷达ip
  • 数据结构与算法 复习记录(一)
  • 【Python进阶】元组:不可变序列的十大核心应用
  • JavaScript基础-01(笔记)
  • 复旦大学、百度联合开源数字人项目hallo2,支持高分辨率(可达4K)、长视频生成(最多1小时)
  • PyTorch学习-小土堆教程
  • 2025年泰迪杯数据挑战赛B题问题分析
  • 文章记单词 | 第35篇(六级)
  • 等离子体浸没离子注入(PIII)
  • XR技术赋能艺术展演|我的宇宙推动东方美学体验化
  • 50常用控件_QPushButton
  • Linux的目录结构(介绍,具体目录结构)
  • 2022年适合小学生的新闻/谷歌seo 外贸建站
  • 关于做网站的毕业设计/海南百度推广中心
  • 用虚拟机做服务器搭建网站/哪些平台可以发布软文
  • 用织梦做的网站是模板的吗/福建seo顾问
  • 常州建设局网站/排名第一的手机清理软件
  • the 7 wordpress theme/天津seo排名扣费