iptables 完全指南:从四表五链到实战应用
警告:本文为理论指导手册,所有示例命令均需验证后使用。生产环境请谨慎操作!
一、命令规范与最佳实践
1. 参数规范建议
# 旧写法(某些系统可能报错)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 新写法(推荐显式指定模块)
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
2. 在线工具推荐
iptables 命令生成器:https://cmdgenerator.org/zh/cmd-generators/iptables
二、核心参数修正版
匹配条件参数(带模块声明)
条件参数 | 模块依赖 | 正确写法示例 |
---|---|---|
--dport | -m tcp/udp | -p tcp -m tcp --dport 80 |
--sport | -m tcp/udp | -p udp -m udp --sport 53 |
--state | -m state | -m state --state ESTABLISHED |
--ctstate | -m conntrack | -m conntrack --ctstate NEW |
--mac-source | -m mac | -m mac --mac-source 00:0c:29:xx:xx:xx |
--limit | -m limit | -m limit --limit 100/sec |
三、关键实战案例修正
案例 1:SSH 防护(带模块声明)
# 放行内网新连接并记录IP
iptables -A INPUT -p tcp -m tcp --dport 22 -s 192.168.1.0/24 \
-m conntrack --ctstate NEW \
-m recent --set --name SSH_WHITELIST
# 60秒内超过3次新连接自动封禁
iptables -A INPUT -p tcp -m tcp --dport 22 \
-m conntrack --ctstate NEW \
-m recent --rcheck --seconds 60 --hitcount 3 \
--name SSH_WHITELIST -j DROP
# 允许正常SSH连接
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
案例 2:Web 服务器防护(DDoS 防御)
# 速率限制新连接
iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 \
-m conntrack --ctstate NEW \
-m limit --limit 100/s --limit-burst 200 -j ACCEPT
# 丢弃超限请求
iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 \
-m conntrack --ctstate NEW -j DROP
四、四表五链原理图解
@startuml
skinparam monochrome true
title iptables 数据包处理流程
start
:数据包到达网卡;
-> PREROUTING(raw/mangle/nat);
if (路由决策) then (目标为本机)
-> INPUT(mangle/filter);
:本机处理;
-> OUTPUT(mangle/nat/filter);
else (需要转发)
-> FORWARD(mangle/filter);
endif
-> POSTROUTING(mangle/nat);
:数据包离开网卡;
end
@enduml
五、高级配置模板库
1. 企业级防火墙模板
#!/bin/bash
# 清空所有规则
iptables -F
iptables -t nat -F
iptables -t mangle -F
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 放行本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP控制(允许ping入但限速)
iptables -A INPUT -p icmp -m icmp --icmp-type 8 \
-m limit --limit 10/sec -j ACCEPT
2. NAT 网关模板
# 启用IP转发
sysctl -w net.ipv4.ip_forward=1
# MASQUERADE动态源地址转换
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 端口转发模板(带连接跟踪)
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.100:80
iptables -A FORWARD -p tcp -d 192.168.1.100 -m tcp --dport 80 \
-m state --state NEW,ESTABLISHED -j ACCEPT
六、专家级调试技巧
1. 规则调试命令
# 查看规则命中计数器
iptables -L -v -n --line-numbers
# 追踪特定流量(调试模式)
iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE
2. 连接跟踪分析
# 查看活动连接
conntrack -L
# 实时监控连接事件
conntrack -E
# 清除指定连接
conntrack -D -s 192.168.1.100
七、持久化配置方案
1. 配置保存(Debian/Ubuntu)
# 安装持久化工具
apt-get install iptables-persistent
# 手动保存规则
netfilter-persistent save
2. 开机自启配置
# 保存当前规则到文件
iptables-save > /etc/iptables/rules.v4
# 恢复规则
iptables-restore < /etc/iptables/rules.v4
八、延伸学习路径
主题 | 推荐资源 | 难度等级 |
---|---|---|
nftables 迁移 | 迁移指南 | ★★★★☆ |
eBPF 扩展 | Cilium 文档 | ★★★★★ |
性能调优 | Netfilter 内核优化 | ★★★★☆ |
特别提示:建议在测试环境验证所有规则后,使用 iptables-apply
工具安全部署到生产环境。