iptables [-t 表名] 命令选项 [链名] [规则匹配条件] [-j 目标动作]
filter:默认表,用于数据包过滤(INPUT/OUTPUT/FORWARD 链)。
nat:用于网络地址转换(如端口转发、SNAT/DNAT)。
mangle:用于修改数据包(如 TTL、TOS 等)。
raw:用于连接跟踪豁免。
选项 | 作用 |
---|---|
| 追加规则到链尾 |
| 插入规则到链首(可指定位置) |
| 删除指定规则 |
| 列出规则 |
| 清空链中的所有规则 |
| 设置链的默认策略(如 DROP/ACCEPT) |
| 创建自定义链 |
| 删除自定义链 |
| 显示详细信息(与 |
| 显示规则的行号(便于删除) |
条件 | 示例 | 说明 |
---|---|---|
|
| 匹配协议(tcp/udp/icmp等) |
|
| 目标端口(需配合 |
|
| 源端口 |
|
| 源 IP 或网段 |
|
| 目标 IP |
|
| 输入网卡 |
|
| 输出网卡 |
|
| 使用扩展模块(如 |
动作 | 说明 |
---|---|
| 允许数据包 |
| 丢弃数据包(无响应) |
| 拒绝数据包(返回错误) |
| 记录日志(/var/log/messages) |
| 源地址转换(NAT) |
| 目标地址转换(NAT) |
| 动态 IP 的 SNAT(如拨号网络) |
查看当前规则:
iptables -L -n -v --line-numbers
允许来自 192.168.1.0/24 的 SSH 连接:
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
拒绝所有其他 INPUT 流量:
iptables -P INPUT DROP
端口转发(将 80 转到 8080):
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
删除规则(按行号):
iptables -L INPUT --line-numbers # 查看行号 iptables -D INPUT 3 # 删除 INPUT 链的第 3 条规则
保存规则(依赖发行版):
CentOS/RHEL: service iptables save
或 /etc/init.d/iptables save
Ubuntu/Debian: 需安装 iptables-persistent
并运行 netfilter-persistent save
。
规则顺序:规则从上到下匹配,第一条匹配的规则生效。
默认策略:设置 DROP
前确保允许必要的流量(如 SSH),否则可能被锁定。
测试前备份:使用 iptables-save > backup.rules
备份规则。
IPv6:如需配置 IPv6,需使用 ip6tables
命令。
如果需要更复杂的配置(如限速、连接数限制),可以结合 iptables
扩展模块(如 limit
, connlimit
)或工具如 fail2ban
。
最新评论: