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

iptables 详解

iptables 是 Linux 系统中功能强大的 包过滤防火墙工具,用于管理网络数据包的流入、流出和转发规则,通过定义规则集实现对网络访问的控制(允许、拒绝、修改数据包等)。它工作在 内核空间,基于 Netfilter 框架(Linux 内核中的网络过滤子系统),是 Linux 系统安全防护的核心工具之一。

一、iptables 的核心概念

在使用 iptables 前,需理解以下核心术语:

1. 链(Chain)

链是 “规则的集合”,数据包在流经系统时会按固定顺序经过这些链,每条链包含若干条规则,规则按顺序匹配执行。
iptables 预设了 5 条核心链(基于数据包的流向划分):

  • INPUT:处理 目标是本机 的数据包(如外部主机访问本机的 SSH 服务)。
  • OUTPUT:处理 由本机生成 的数据包(如本机 ping 外部主机)。
  • FORWARD:处理 经过本机转发 的数据包(如本机作为路由器,转发其他主机的数据包)。
  • PREROUTING:在数据包 路由决策前 处理(常用于修改数据包的目标地址,如端口映射)。
  • POSTROUTING:在数据包 路由决策后、发送前 处理(常用于修改数据包的源地址,如 NAT 转换)。
2. 表(Table)

表是 “链的集合”,不同的表用于实现不同的功能(过滤、NAT、修改数据包等)。iptables 有 5 种内置表(功能优先级从高到低):

  • filter 表:默认表,用于 过滤数据包(允许 / 拒绝),包含 INPUT、OUTPUT、FORWARD 链,是最常用的表。
  • nat 表:用于 网络地址转换(修改数据包的源 / 目标 IP 或端口),包含 PREROUTING、POSTROUTING、OUTPUT 链(如将内网 IP 转换为外网 IP 实现上网)。
  • mangle 表:用于 修改数据包的标记或头部信息(如 TTL、TOS 字段),包含所有 5 条链(较少直接使用)。
  • raw 表:用于 关闭数据包的连接跟踪(提高性能),包含 PREROUTING、OUTPUT 链(适用于高并发场景)。
  • security 表:用于 强制访问控制(MAC),与 SELinux 配合使用(极少使用)。

表与链的关系:每个表包含特定的链,数据包会先进入对应的表,再按链的顺序匹配规则。例如,过滤功能优先使用 filter 表的 INPUT 链。

3. 规则(Rule)

规则是 iptables 的最小执行单元,由 匹配条件 和 目标动作 组成:

  • 匹配条件:定义数据包需满足的特征(如源 IP、目标端口、协议类型 TCP/UDP 等)。
  • 目标动作:当数据包匹配条件时执行的操作(如允许通过、拒绝、记录日志等)。

常见目标动作:

  • ACCEPT:允许数据包通过。
  • DROP:丢弃数据包(不返回任何响应,客户端会等待超时)。
  • REJECT:拒绝数据包(返回错误信息,如 “Connection refused”)。
  • SNAT:修改数据包的源地址(用于内网访问外网)。
  • DNAT:修改数据包的目标地址(用于端口映射,如将外网 80 端口映射到内网服务器)。
  • LOG:将数据包信息记录到系统日志(/var/log/messages 或自定义日志文件),之后继续匹配下一条规则。
  • RETURN:跳出当前链,返回上一级链继续匹配。

二、iptables 的工作流程

数据包流经 iptables 的流程可简化为:

  1. 数据包进入系统,先经过 PREROUTING 链(raw → mangle → nat 表),进行路由决策前的处理(如 DNAT)。
  2. 内核根据数据包的目标 IP 决定流向:
    • 若目标是本机,进入 INPUT 链(mangle → filter 表),通过后交给本机应用(如 SSH 服务)。
    • 若需要转发(本机是路由器),进入 FORWARD 链(mangle → filter 表),通过后继续转发。
    • 若由本机生成,进入 OUTPUT 链(raw → mangle → nat → filter 表)。
  3. 所有流出的数据包(转发或本机生成)最终经过 POSTROUTING 链(mangle → nat 表),进行发送前处理(如 SNAT)。

规则匹配逻辑:同一链中的规则按顺序匹配,一旦匹配到某条规则,就执行对应的动作(除非动作是 LOG 等需要继续匹配的类型),未匹配任何规则则执行链的 默认策略(如 filter 表 INPUT 链默认策略通常为 ACCEPT 或 DROP)。

三、iptables 常用命令

iptables 命令格式为:
iptables [-t 表名] 命令选项 [链名] [匹配条件] [-j 目标动作]

1. 基础操作(查看、清空、保存规则)
# 查看所有表的所有链规则(-L 列出规则,-n 显示 IP 而非域名,-v 详细信息)
iptables -L -n -v
iptables -t nat -L -n  # 查看 nat 表规则# 清空指定链的规则(-F 清空,-X 删除自定义链,-Z 重置计数器)
iptables -F INPUT    # 清空 filter 表 INPUT 链
iptables -t nat -F   # 清空 nat 表所有链
iptables -F && iptables -X && iptables -Z  # 清空所有规则、自定义链和计数器# 设置链的默认策略(-P 永久生效,策略为 ACCEPT 或 DROP)
iptables -P INPUT DROP    # INPUT 链默认拒绝所有数据包
iptables -P OUTPUT ACCEPT # OUTPUT 链默认允许所有数据包# 保存规则(不同系统保存方式不同)
# CentOS:
service iptables save  # 保存到 /etc/sysconfig/iptables
# Ubuntu(需安装 iptables-persistent):
iptables-save > /etc/iptables/rules.v4  # 手动保存
2. 过滤规则(filter 表,最常用)
# 允许本机回环地址(lo 接口,重要!否则本地服务可能无法通信)
iptables -A INPUT -i lo -j ACCEPT# 允许已建立的连接和相关连接(如 FTP 数据连接、SSH 保持连接)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT# 允许外部访问本机 SSH 服务(端口 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT# 允许外部访问本机 HTTP(80)和 HTTPS(443)服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT# 拒绝来自特定 IP(如 192.168.1.100)的所有连接
iptables -A INPUT -s 192.168.1.100 -j DROP# 拒绝特定 IP 访问本机 3306 端口(MySQL)
iptables -A INPUT -s 10.0.0.5 -p tcp --dport 3306 -j REJECT
3. NAT 规则(nat 表,用于地址转换)
# SNAT:将内网 IP(192.168.1.0/24)转换为外网出口 IP(1.2.3.4),实现内网上网
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 1.2.3.4# 动态 SNAT(适用于外网 IP 动态变化的场景,如拨号上网)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE# DNAT:将外网 IP(1.2.3.4)的 80 端口映射到内网服务器(192.168.1.10:8080)
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080
4. 日志规则(记录匹配的数据包)
# 记录所有被拒绝的 INPUT 数据包(日志前缀为 "IPT-DROP: ")
iptables -A INPUT -j LOG --log-prefix "IPT-DROP: " --log-level 6
iptables -A INPUT -j DROP  # 记录后拒绝(注意顺序,LOG 后需跟其他动作)
5. 删除规则(按编号或内容删除)
# 查看规则编号(--line-numbers)
iptables -L INPUT --line-numbers# 删除 INPUT 链中编号为 3 的规则
iptables -D INPUT 3# 按内容删除(与添加规则的格式相同,将 -A 改为 -D)
iptables -D INPUT -p tcp --dport 80 -j ACCEPT

四、iptables 的注意事项

  1. 规则顺序:规则按添加顺序匹配,具体规则应放在通用规则前(如先允许 SSH 再拒绝所有,否则拒绝规则会先生效)。
  2. 默认策略:建议将 INPUT 链默认策略设为 DROP(“白名单” 模式),只开放必要端口,提高安全性。
  3. 保存规则:临时添加的规则在系统重启后会丢失,需按系统类型保存(如 CentOS 的 service iptables save)。
  4. 兼容性:部分 Linux 发行版(如 Ubuntu 20.04+、CentOS 8+)默认使用 nftables 替代 iptables,但仍可通过 iptables-nft 兼容旧命令。
  5. 调试技巧:使用 LOG 动作记录未匹配的数据包,结合 tail -f /var/log/messages 分析丢包原因。

五、总结

iptables 是 Linux 系统中控制网络访问的核心工具,通过表、链、规则的三层结构,实现了对数据包的过滤、转换和修改。掌握 iptables 不仅能增强系统安全性(如限制端口访问、屏蔽恶意 IP),还能实现网络地址转换(如内网穿透、端口映射)等功能。实际使用中,需根据业务需求设计 “白名单” 规则,遵循 “最小权限” 原则,只开放必要的网络访问。

http://www.dtcms.com/a/415036.html

相关文章:

  • 基于dify搭建的论文查询和内容提取应用(可加群)
  • elasticsearch面试八股文
  • MySQL笔记---表的约束
  • 单页产品网站源码带后台东莞全网推广
  • Kafka 事务协议 KIP-890 更强的防重、无感升级与端到端性能
  • 【精品资料鉴赏】873页5A级智慧景区信息化规划设计方案
  • kanass入门到实战(5) - 如何进行任务管理
  • Spring AI alibaba对话上下文持久化数据库
  • 嵌入式面试题合集附答案(六)
  • 青岛做模板网站的公司wordpress自定义注册页面模板
  • 【大模型】深入理解大模型输出的Temperature、Top-k与Top-p采样
  • 如何编辑网站标题简约网站设计
  • 关于七牛云OSS存储的图片数据批量下载到本地
  • 左值引用、右值引用、万能引用
  • TrendFinder - 社交媒体趋势追踪工具
  • 【QT第一章】QT基础知识
  • 网站开发亿玛酷技术河南营销推广软件
  • 操作系统经典PV操作——读者-写者问题的公平性实现
  • 商业机构的网站是什么酒店网站模板设计方案
  • 【SpringAI中Chat-Client用法】
  • Python 数学公式构建海洋不明生物(好像是水母)动画 - 简谐振动
  • 宁波市江北区建设局网站上海php网站开发
  • Linux面试题及详细答案 120道(61-75)-- 文件系统与存储
  • 韶关住房和城乡建设局网站气血不足做网站
  • 橱柜网站建设公司建设网站的收费
  • 融资路演 AI 速成 72 小时实战指南(抓风口→做PPT→补漏洞)
  • JUC并发编程:共享模型之管程与悲观锁(synchronized)详解
  • php基础-文件包含(第13天)
  • STM32智能加湿器
  • 网站开发管理nodejs网站开发教程