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个钩子点:
- NF_INET_PRE_ROUTING:数据包进入系统后,路由判断之前
- NF_INET_LOCAL_IN:数据包目标是本机时
- NF_INET_FORWARD:数据包需要转发时
- NF_INET_LOCAL_OUT:本机产生的数据包离开时
- 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 规则处理流程
规则匹配机制
- 顺序匹配:规则按照添加顺序依次匹配
- 首次匹配:找到第一个匹配的规则后执行对应动作
- 默认策略:如果没有规则匹配,执行链的默认策略
数据包处理流程
数据包到达
↓
检查第一条规则
↓
匹配? → 是 → 执行动作 → 结束/继续
↓
否
↓
检查下一条规则
↓
重复直到所有规则检查完毕
↓
执行默认策略
动作类型
终止动作
- 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 应用场景
典型应用场景
服务器防护
- Web 服务器安全
- 数据库服务器保护
- 应用服务器访问控制
网络边界防护
- 企业网关
- DMZ 区域隔离
- 内外网访问控制
流量管理
- 带宽限制
- 连接数控制
- QoS 实现
网络服务
- NAT 网关
- 负载均衡
- 端口转发
部署架构示例
互联网
|
v
边界防火墙 (iptables)
|
v
DMZ 区域
|
v
内网防火墙 (iptables)
|
v
内部网络
1.8 性能特点
性能优势
- 内核级处理:在内核空间处理,性能高效
- 零拷贝:避免用户空间和内核空间的数据拷贝
- 连接跟踪:智能的状态跟踪机制
性能考虑
- 规则数量:规则过多会影响性能
- 规则顺序:常用规则应放在前面
- 匹配条件:复杂条件会增加处理时间
1.9 安全考虑
安全原则
- 最小权限原则:只开放必要的端口和服务
- 默认拒绝:默认策略设为 DROP
- 定期审查:定期检查和更新规则
- 日志记录:记录重要的安全事件
常见安全威胁
- DDoS 攻击:大量请求导致服务不可用
- 端口扫描:恶意探测开放端口
- 暴力破解:尝试破解登录凭据
- 数据泄露:未授权的数据访问
本章小结
本章介绍了 iptables 的基本概念和架构:
- 核心概念:iptables 是基于 Netfilter 框架的防火墙工具
- 架构组成:表、链、规则的层次结构
- 处理流程:数据包在不同钩子点的处理过程
- 应用场景:从服务器防护到网络边界控制
- 性能特点:内核级处理带来的高性能
本章练习
理论练习:
- 画出数据包在 Netfilter 框架中的完整流向图
- 列出四个表的用途和包含的链
- 解释规则匹配的基本原理
实践练习:
- 查看当前系统的 iptables 版本
- 检查系统中已有的防火墙规则
- 了解系统中是否同时运行了其他防火墙工具
思考题:
- 为什么需要多个表和链的设计?
- 在什么情况下会选择使用 nftables 而不是 iptables?
- 如何平衡安全性和性能?
下一章我们将学习如何安装和配置 iptables 环境。