iptables 命令详解及示例
iptables 是 Linux 系统下的防火墙工具,用于管理网络数据包的过滤、转发和 NAT(网络地址转换)。它基于规则链(Chains)和表(Tables)进行配置,是 Linux 网络安全的核心组件之一。
1. iptables 基本概念
(1)表(Tables)
| 表名 | 说明 |
|---|---|
| filter | 默认表,用于数据包过滤(允许/拒绝) |
| nat | 网络地址转换(NAT) |
| mangle | 修改数据包(如 TTL、TOS) |
| raw | 数据包跟踪(较少使用) |
(2)链(Chains)
| 链名 | 说明 |
|---|---|
| INPUT | 处理进入本机的数据包 |
| OUTPUT | 处理本机发出的数据包 |
| FORWARD | 处理转发的数据包(如路由器) |
| PREROUTING (nat) | 数据包进入时修改(DNAT) |
| POSTROUTING (nat) | 数据包离开时修改(SNAT/MASQUERADE) |
2. iptables 基本语法
iptables [-t 表名] 命令 [链名] [规则] [动作]
-t 表名:指定表(默认filter)-A:追加规则-I:插入规则-D:删除规则-L:列出规则-F:清空规则-P:设置默认策略
3. 常用命令示例
(1)查看规则
iptables -L -n -v # 查看 filter 表规则
iptables -t nat -L -n # 查看 nat 表规则
iptables -L INPUT --line-numbers # 显示规则编号
(2)清空规则
iptables -F # 清空 filter 表
iptables -t nat -F # 清空 nat 表
iptables -X # 删除自定义链
iptables -Z # 重置计数器
(3)设置默认策略
iptables -P INPUT DROP # 默认拒绝所有输入
iptables -P OUTPUT ACCEPT # 默认允许所有输出
iptables -P FORWARD DROP # 默认拒绝所有转发
4. 防火墙规则示例
(1)允许/拒绝特定 IP
# 允许 192.168.1.100 访问
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# 拒绝 10.0.0.5 访问
iptables -A INPUT -s 10.0.0.5 -j DROP
# 允许来自 192.168.1.0/24 的 SSH 连接
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
(2)允许/拒绝端口
# 允许 HTTP (80) 和 HTTPS (443)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 拒绝 ICMP (ping)
iptables -A INPUT -p icmp -j DROP
(3)允许回环(lo)接口
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
(4)防止 SYN Flood 攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
5. NAT 规则示例
(1)SNAT(源地址转换)
# 将内网 192.168.1.0/24 通过 eth0 出口 IP 进行 NAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
(2)DNAT(目标地址转换)
# 将公网 IP 的 80 端口转发到内网 192.168.1.100:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.100:80
(3)端口转发
# 将 8080 端口转发到 80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
6. 高级规则
(1)限制连接数
# 限制每 IP 最多 10 个 SSH 连接
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 -j DROP
(2)匹配 MAC 地址
# 允许特定 MAC 地址访问
iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
(3)日志记录
# 记录被拒绝的包
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROPPED: "
7. 保存与恢复规则
iptables-save > /etc/iptables.rules # 保存规则
iptables-restore < /etc/iptables.rules # 恢复规则
(Ubuntu/Debian)
apt install iptables-persistent
netfilter-persistent save
(CentOS/RHEL)
service iptables save
8. 总结
iptables是 Linux 防火墙核心工具,用于包过滤、NAT、端口转发等。- 主要表:
filter(默认)、nat、mangle、raw。 - 主要链:
INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。 - 常用操作:
-A添加规则,-D删除规则,-L查看规则-p指定协议,--dport指定端口,-j指定动作
- NAT 示例:
MASQUERADE(动态 SNAT)DNAT(端口转发)
- 规则需保存,否则重启后失效。
掌握 iptables 可以有效保护服务器安全!🚀