【iptables命令详解】iptables 是 Linux 系统中用于配置网络数据包过滤规则的重要工具,主要用于实现防火墙功能。它通过定义一系列规则来控制进出系统的网络流量,从而提高系统的安全性。iptables 本质上是一个用户空间的工具,它与内核中的 netfilter 模块配合工作,实现对数据包的处理。
一、iptables 基本概念
| 术语 | 说明 |
| 表(Table) | iptables 中有多个预定义的表,如 filter、nat、mangle、raw 等,每种表负责不同类型的规则处理。 |
| 链(Chain) | 每个表中包含多个链,如 INPUT、OUTPUT、FORWARD 等,每个链代表一组规则。 |
| 规则(Rule) | 每条规则定义了如何处理特定的数据包,例如允许、拒绝或丢弃。 |
| 策略(Policy) | 链的默认策略,通常为 ACCEPT 或 DROP。 |
二、iptables 主要表和链
| 表名 | 作用 | 常见链 |
| filter | 默认表,用于过滤数据包(如允许/拒绝) | INPUT, OUTPUT, FORWARD |
| nat | 用于网络地址转换(NAT),如端口转发 | PREROUTING, POSTROUTING, OUTPUT |
| mangle | 用于修改数据包头部信息(如 TOS、TTL) | PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD |
| raw | 用于标记数据包,以绕过连接跟踪 | PREROUTING, OUTPUT |
三、iptables 常用命令
| 命令 | 说明 |
| `iptables -L` | 列出当前所有规则 |
| `iptables -L -n` | 列出规则并以数字形式显示 IP 和端口 |
| `iptables -F` | 清空所有规则 |
| `iptables -X` | 删除自定义链 |
| `iptables -P INPUT DROP` | 设置 INPUT 链默认策略为 DROP |
| `iptables -A INPUT -s 192.168.1.100 -j DROP` | 添加一条规则,禁止来自 192.168.1.100 的数据包 |
| `iptables -A INPUT -p tcp --dport 22 -j ACCEPT` | 允许 SSH 流量(端口 22) |
四、iptables 规则示例
以下是一些常见的 iptables 规则配置示例:
| 目标 | 规则描述 | 示例命令 |
| 允许 SSH 访问 | 允许 TCP 端口 22 的入站流量 | `iptables -A INPUT -p tcp --dport 22 -j ACCEPT` |
| 禁止特定 IP | 禁止来自某个 IP 的所有流量 | `iptables -A INPUT -s 192.168.1.100 -j DROP` |
| 允许本地回环 | 允许本地回环接口通信 | `iptables -A INPUT -i lo -j ACCEPT` |
| 禁止外部访问 Web | 禁止外部访问本机的 HTTP 端口 80 | `iptables -A INPUT -p tcp --dport 80 -j DROP` |
| 启用 NAT 转发 | 允许内部网络通过 NAT 访问外网 | `iptables -A POSTROUTING -o eth0 -j MASQUERADE` |
五、iptables 保存与恢复
在 Linux 系统中,iptables 规则在重启后会丢失,因此需要将规则保存到文件中,并在系统启动时加载。
| 命令 | 说明 |
| `iptables-save > /etc/iptables/rules.v4` | 保存当前规则到文件 |
| `iptables-restore < /etc/iptables/rules.v4` | 从文件恢复规则 |
| `service iptables save` | 在某些系统中直接保存规则(如 CentOS) |
六、注意事项
- iptables 是基于规则的,顺序非常重要。规则是按顺序匹配的。
- 使用 `-A` 添加规则时,应确保规则顺序合理。
- 不建议使用 `iptables -F` 直接清空所有规则,以免误操作导致服务中断。
- 对于生产环境,建议使用更高级的防火墙工具如 `ufw`、`firewalld` 或 `nftables` 来简化管理。
七、总结
iptables 是一个强大且灵活的命令行工具,能够精细控制网络流量,适用于各种 Linux 环境下的防火墙配置。虽然其语法相对复杂,但通过合理的规则设计,可以有效提升系统的安全性和稳定性。对于初学者来说,建议先熟悉基本的表、链和规则结构,再逐步深入配置高级功能。


