1.1 iptables 简介

什么是 iptables

iptables 是 Linux 系统中最重要的防火墙工具之一,它是一个用户空间的应用程序,允许系统管理员配置 Linux 内核防火墙(由 Netfilter 框架提供)的规则。

核心特性

  • 包过滤:基于各种条件过滤网络数据包
  • 网络地址转换(NAT):实现地址转换和端口映射
  • 数据包修改:修改数据包的内容和标记
  • 连接跟踪:跟踪网络连接状态
  • 负载均衡:实现简单的负载均衡功能

1.2 Netfilter 框架

Netfilter 架构

Netfilter 是 Linux 内核中的一个框架,提供了各种网络相关操作的钩子(hooks)。

用户空间应用
    |
    | (系统调用)
    |
    v
iptables 工具
    |
    | (netlink socket)
    |
    v
Netfilter 框架 (内核空间)
    |
    | (钩子函数)
    |
    v
网络协议栈

Netfilter 钩子点

Netfilter 在网络协议栈的关键位置设置了5个钩子点:

  1. NF_INET_PRE_ROUTING:数据包进入系统后,路由判断之前
  2. NF_INET_LOCAL_IN:数据包目标是本机时
  3. NF_INET_FORWARD:数据包需要转发时
  4. NF_INET_LOCAL_OUT:本机产生的数据包离开时
  5. NF_INET_POST_ROUTING:数据包离开系统前,路由判断之后

数据包流向图

网络 → PRE_ROUTING → 路由判断 → FORWARD → POST_ROUTING → 网络
                        ↓                      ↑
                   LOCAL_IN              LOCAL_OUT
                        ↓                      ↑
                    本地进程 ←→ 本地进程 ←→ 本地进程

1.3 iptables 表和链

四个默认表

iptables 将规则组织在不同的表中,每个表有特定的用途:

1. filter 表(默认表)

  • 用途:包过滤,决定是否允许数据包通过
  • :INPUT、FORWARD、OUTPUT
  • 示例:阻止特定IP访问、开放特定端口

2. nat 表

  • 用途:网络地址转换
  • :PREROUTING、OUTPUT、POSTROUTING
  • 示例:SNAT、DNAT、端口转发

3. mangle 表

  • 用途:修改数据包的头部信息
  • :PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
  • 示例:修改TOS、TTL、标记数据包

4. raw 表

  • 用途:配置免于连接跟踪的数据包
  • :PREROUTING、OUTPUT
  • 示例:提高性能,跳过连接跟踪

表的优先级

数据包处理的表优先级顺序:

raw → mangle → nat → filter

链的详细说明

INPUT 链

  • 作用:处理目标是本机的数据包
  • 应用场景
    • 限制SSH访问
    • 开放Web服务端口
    • 防止DDoS攻击

OUTPUT 链

  • 作用:处理本机发出的数据包
  • 应用场景
    • 限制本机访问外部服务
    • 防止数据泄露
    • 控制出站连接

FORWARD 链

  • 作用:处理经过本机转发的数据包
  • 应用场景
    • 路由器/网关功能
    • 内网访问控制
    • 流量整形

PREROUTING 链

  • 作用:数据包进入系统后立即处理
  • 应用场景
    • DNAT(目标地址转换)
    • 端口重定向
    • 负载均衡

POSTROUTING 链

  • 作用:数据包离开系统前最后处理
  • 应用场景
    • SNAT(源地址转换)
    • 伪装(MASQUERADE)
    • 流量统计

1.4 规则处理流程

规则匹配机制

  1. 顺序匹配:规则按照添加顺序依次匹配
  2. 首次匹配:找到第一个匹配的规则后执行对应动作
  3. 默认策略:如果没有规则匹配,执行链的默认策略

数据包处理流程

数据包到达
    ↓
检查第一条规则
    ↓
匹配? → 是 → 执行动作 → 结束/继续
    ↓
   否
    ↓
检查下一条规则
    ↓
重复直到所有规则检查完毕
    ↓
执行默认策略

动作类型

终止动作

  • ACCEPT:接受数据包
  • DROP:丢弃数据包(静默丢弃)
  • REJECT:拒绝数据包(发送错误信息)

非终止动作

  • LOG:记录日志后继续处理
  • MARK:标记数据包后继续处理
  • RETURN:返回调用链继续处理

跳转动作

  • 自定义链:跳转到用户定义的链

1.5 iptables 与其他防火墙工具的关系

与 firewalld 的关系

firewalld (高级管理工具)
    ↓
iptables (底层规则引擎)
    ↓
Netfilter (内核框架)
  • firewalld:提供动态防火墙管理,支持区域概念
  • iptables:提供静态规则管理,更加灵活和强大
  • 共存:可以同时使用,但需要注意规则冲突

与 ufw 的关系

ufw (Ubuntu 简化工具)
    ↓
iptables (底层实现)
    ↓
Netfilter (内核框架)
  • ufw:Ubuntu 的简化防火墙工具
  • 底层:实际上是 iptables 的前端

1.6 版本演进

iptables 发展历史

  • ipfwadm:Linux 2.0 时代的防火墙工具
  • ipchains:Linux 2.2 时代的改进版本
  • iptables:Linux 2.4+ 时代的现代防火墙工具
  • nftables:新一代防火墙工具,逐步替代 iptables

nftables 对比

特性 iptables nftables
语法 复杂 简化
性能 较好 更好
原子操作 不支持 支持
脚本化 困难 容易
向后兼容 - 支持 iptables

1.7 应用场景

典型应用场景

  1. 服务器防护

    • Web 服务器安全
    • 数据库服务器保护
    • 应用服务器访问控制
  2. 网络边界防护

    • 企业网关
    • DMZ 区域隔离
    • 内外网访问控制
  3. 流量管理

    • 带宽限制
    • 连接数控制
    • QoS 实现
  4. 网络服务

    • NAT 网关
    • 负载均衡
    • 端口转发

部署架构示例

互联网
    |
    v
边界防火墙 (iptables)
    |
    v
DMZ 区域
    |
    v
内网防火墙 (iptables)
    |
    v
内部网络

1.8 性能特点

性能优势

  • 内核级处理:在内核空间处理,性能高效
  • 零拷贝:避免用户空间和内核空间的数据拷贝
  • 连接跟踪:智能的状态跟踪机制

性能考虑

  • 规则数量:规则过多会影响性能
  • 规则顺序:常用规则应放在前面
  • 匹配条件:复杂条件会增加处理时间

1.9 安全考虑

安全原则

  1. 最小权限原则:只开放必要的端口和服务
  2. 默认拒绝:默认策略设为 DROP
  3. 定期审查:定期检查和更新规则
  4. 日志记录:记录重要的安全事件

常见安全威胁

  • DDoS 攻击:大量请求导致服务不可用
  • 端口扫描:恶意探测开放端口
  • 暴力破解:尝试破解登录凭据
  • 数据泄露:未授权的数据访问

本章小结

本章介绍了 iptables 的基本概念和架构:

  1. 核心概念:iptables 是基于 Netfilter 框架的防火墙工具
  2. 架构组成:表、链、规则的层次结构
  3. 处理流程:数据包在不同钩子点的处理过程
  4. 应用场景:从服务器防护到网络边界控制
  5. 性能特点:内核级处理带来的高性能

本章练习

  1. 理论练习

    • 画出数据包在 Netfilter 框架中的完整流向图
    • 列出四个表的用途和包含的链
    • 解释规则匹配的基本原理
  2. 实践练习

    • 查看当前系统的 iptables 版本
    • 检查系统中已有的防火墙规则
    • 了解系统中是否同时运行了其他防火墙工具
  3. 思考题

    • 为什么需要多个表和链的设计?
    • 在什么情况下会选择使用 nftables 而不是 iptables?
    • 如何平衡安全性和性能?

下一章我们将学习如何安装和配置 iptables 环境。