Appearance
Iptables 基础
这是 Iptables 防火墙的基础知识文档,详细介绍其功能、表结构和使用方法。
什么是 Iptables?
Iptables 是 Linux 系统上的一个基于内核的防火墙工具,用于过滤、修改和转发网络数据包。它是 Linux 内核 netfilter 框架的用户空间管理工具,提供了强大的网络安全控制能力。
主要功能
- 数据包过滤:根据规则允许或拒绝特定的网络流量
- 网络地址转换(NAT):实现源地址转换(SNAT)和目标地址转换(DNAT)
- 数据包修改:修改数据包的TOS字段、TTL值等
- 数据包转发:控制数据包在不同网络接口之间的转发
- 连接跟踪:跟踪网络连接状态,实现基于状态的防火墙策略
Iptables 表结构
Iptables 由多个表(Tables)组成,每个表包含不同功能的链(Chains),用于处理不同类型的网络操作。
1. Filter 表
- 默认表:最常用的表,用于数据包过滤
- 包含的链:
- INPUT:处理进入本地系统的数据包
- OUTPUT:处理从本地系统发出的数据包
- FORWARD:处理通过本地系统转发的数据包
- 主要用途:控制允许哪些数据包进入、离开或通过系统
2. NAT 表
- 网络地址转换表:用于修改数据包的源地址或目标地址
- 包含的链:
- PREROUTING:在数据包路由前修改目标地址(DNAT)
- POSTROUTING:在数据包路由后修改源地址(SNAT)
- OUTPUT:修改本地产生的数据包的目标地址
- 主要用途:实现端口映射、地址伪装、负载均衡等功能
3. Mangle 表
- 数据包修改表:用于修改数据包的特殊标记和选项
- 包含的链:
- PREROUTING:在路由前修改数据包
- INPUT:处理进入本地的数据包
- FORWARD:处理转发的数据包
- OUTPUT:处理本地发出的数据包
- POSTROUTING:在路由后修改数据包
- 主要用途:修改TOS字段、TTL值、设置连接标记等
4. Raw 表
- 原始数据包表:用于处理连接跟踪之前的数据包
- 包含的链:
- PREROUTING:处理进入的数据包
- OUTPUT:处理本地发出的数据包
- 主要用途:绕过连接跟踪机制,提高性能
5. Security 表
- 安全标记表:用于强制访问控制(MAC)规则
- 包含的链:
- INPUT:处理进入的数据包
- OUTPUT:处理本地发出的数据包
- FORWARD:处理转发的数据包
- 主要用途:与SELinux等安全模块配合使用
核心概念
- 链(Chains):数据包处理的路径,每个链包含一系列规则
- 规则(Rules):定义匹配条件和处理动作的语句
- 匹配条件(Match Conditions):确定哪些数据包会被规则处理(如协议、端口、IP地址等)
- 动作(Actions/Targets):匹配后对数据包执行的操作(如ACCEPT、DROP、REJECT、SNAT、DNAT等)
常用规则示例
1. 基本过滤规则
bash
# 允许本地回环接口通信
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立和相关的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH连接(端口22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP和HTTPS流量
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 拒绝所有其他入站流量(默认策略)
iptables -P INPUT DROP2. NAT规则示例
bash
# 地址伪装(将内部IP转换为外部IP)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 端口转发(将外部8080端口转发到内部192.168.1.100的80端口)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
# 本地端口转发(将本地8080端口转发到192.168.1.100的80端口)
iptables -t nat -A OUTPUT -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:803. 高级过滤规则
bash
# 限制特定IP的访问
iptables -A INPUT -s 192.168.1.50 -j ACCEPT # 允许特定IP
iptables -A INPUT -s 10.0.0.0/8 -j DROP # 拒绝整个网段
# 限制连接速率(防止DoS攻击)
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
# 根据时间限制访问
iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 18:00 --weekdays Mon-Fri -j ACCEPT规则管理
bash
# 查看所有规则(包含详细信息)
iptables -L -n -v
# 查看特定表的规则
iptables -t nat -L -n
# 删除规则
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
# 插入规则到指定位置
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
# 保存规则(Debian/Ubuntu)
iptables-save > /etc/iptables/rules.v4
# 恢复规则
iptables-restore < /etc/iptables/rules.v4
# 清除所有规则
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
iptables -t security -F
# 重置链的默认策略
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT注意事项
- 配置Iptables时要小心,避免意外封锁SSH连接导致无法远程管理服务器
- 建议在测试规则前先保存当前规则,以便出现问题时恢复
- 生产环境中应该将Iptables规则设置为开机自动加载
- 结合连接跟踪功能可以实现更安全的基于状态的防火墙策略
通过以上内容,你应该对Iptables的基本功能、表结构和规则配置有了全面的了解。在实际应用中,可以根据具体需求灵活配置Iptables规则,保障网络安全。