【iptables命令详解】iptables 是 Linux 系统中用于配置 IPv4 数据包过滤规则的工具,是 Netfilter 项目的一部分。它主要用于设置、维护和检查系统的网络数据包过滤规则,广泛应用于防火墙配置、网络地址转换(NAT)以及流量控制等场景。
一、iptables 基本概念
概念 | 说明 |
链(Chain) | iptables 的规则集合,分为 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING 等。 |
表(Table) | 不同的规则集被组织在不同的表中,如 filter、nat、mangle、raw 等。 |
规则(Rule) | 定义了如何处理特定的数据包,包括允许、拒绝、丢弃等操作。 |
二、iptables 常用命令总结
命令 | 功能描述 |
`iptables -L` | 列出当前所有规则 |
`iptables -L -n` | 列出规则并以数字形式显示 IP 和端口 |
`iptables -F` | 清空所有规则 |
`iptables -X` | 删除用户自定义的链 |
`iptables -Z` | 将计数器归零 |
`iptables -A INPUT -s 192.168.1.100 -j DROP` | 在 INPUT 链中添加一条规则,拒绝来自 192.168.1.100 的数据包 |
`iptables -I FORWARD -p tcp --dport 80 -j ACCEPT` | 在 FORWARD 链前插入一条规则,允许 TCP 端口 80 的流量 |
`iptables -D INPUT -s 192.168.1.100 -j DROP` | 删除指定的规则 |
`iptables -S` | 显示所有规则的完整列表(含参数) |
三、iptables 表与链的关系
表(Table) | 链(Chain) | 用途 |
filter | INPUT, OUTPUT, FORWARD | 默认表,用于过滤数据包(允许/拒绝) |
nat | PREROUTING, POSTROUTING, OUTPUT | 用于网络地址转换(NAT) |
mangle | PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD | 用于修改数据包头部信息 |
raw | PREROUTING, OUTPUT | 用于标记数据包,用于连接跟踪 |
四、iptables 规则示例
示例 | 说明 |
`iptables -A INPUT -p icmp -j ACCEPT` | 允许 ICMP 协议(如 ping)进入 |
`iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT` | 允许向外发送 HTTP 流量 |
`iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.0.0/8 -j ACCEPT` | 允许从内网到外网的流量 |
`iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE` | 设置 SNAT(源地址伪装),适用于动态 IP 场景 |
五、注意事项
- iptables 规则是按顺序执行的,越靠前的规则优先级越高。
- 修改规则后需要保存,否则重启后会丢失(可使用 `iptables-save` 和 `iptables-restore`)。
- 使用 `-n` 参数可以加快规则显示速度,避免 DNS 解析。
- 避免误删规则,建议在测试环境中先进行验证。
六、总结
iptables 是 Linux 系统中非常强大的防火墙工具,合理配置可以有效提升系统安全性。掌握其基本语法、表与链的关系,以及常见命令,是运维人员必备技能之一。在实际应用中,应结合具体需求进行规则设计,并注意规则的顺序和逻辑,避免误操作导致网络中断或安全漏洞。
提示: 如果你使用的是较新的系统(如 Ubuntu 20.04 及以上版本),可能会默认使用 `nftables` 替代 iptables,但 iptables 仍然兼容并可继续使用。