iptables
是 Linux 系统下强大的防火墙工具,广泛用于流量过滤、安全防护和端口管理等任务。本文介绍其基本原理、常用命令及实际应用示例,适合系统运维和安全管理人员查阅使用。
📚 一、基本概念
🔹 表(Table)
iptables 共有几张表:
表名 | 功能 |
---|---|
filter |
默认表,负责数据包过滤(允许、拒绝) |
nat |
网络地址转换(NAT、端口映射) |
mangle |
修改数据包的服务类型、TTL等信息 |
raw |
跳过连接追踪 |
security |
与 SELinux 配合使用,增强安全策略控制 |
🔹 链(Chain)
每张表包含不同的"链"(Chain),数据包会经过对应的链执行规则:
链名 | 描述 |
---|---|
INPUT |
进入本机的数据包 |
OUTPUT |
本机发出的数据包 |
FORWARD |
路由转发的数据包 |
PREROUTING |
数据包到达网络堆栈前的处理点 |
POSTROUTING |
数据包即将离开主机的处理点 |
🧰 二、iptables 常用命令
1. 查看规则
bash
iptables -L # 查看默认表的规则
iptables -L -n # 不解析域名和端口
iptables -L -v # 显示详细信息(数据包/字节统计)
iptables -t nat -L # 查看 nat 表规则
iptables -S # 查看规则原始命令格式
2. 添加规则
bash
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 ssh 端口
iptables -A INPUT -s 192.168.1.100 -j DROP # 屏蔽某个 IP
iptables -A INPUT -i lo -j ACCEPT # 允许本地回环
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
3. 删除规则
bash
iptables -D INPUT 3 # 删除第3条规则
iptables -D INPUT -p tcp --dport 22 -j ACCEPT # 删除指定规则
4. 插入/替换规则
bash
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT # 插入到第一条
iptables -R INPUT 2 -p tcp --dport 443 -j ACCEPT # 替换第二条规则
5. 设置默认策略
bash
iptables -P INPUT DROP # 设置 INPUT 链默认策略为 DROP(拒绝)
iptables -P FORWARD DROP # 设置 FORWARD 链默认策略为 DROP(拒绝转发)
iptables -P OUTPUT ACCEPT # 设置 OUTPUT 链默认策略为 ACCEPT(允许发出)
🔐 三、实用防火墙配置示例
1. 允许特定端口通过,其余封锁
BASH
iptables -F # 清空所有现有规则
iptables -P INPUT DROP # 拒绝所有进入数据包
iptables -P FORWARD DROP # 拒绝所有转发数据包
iptables -P OUTPUT ACCEPT # 允许所有发出数据包
iptables -A INPUT -i lo -j ACCEPT # 允许本地回环接口
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # 允许已建立和相关连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH(22 端口)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许 HTTP(80 端口)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允许 HTTPS(443 端口)
2. NAT 端口转发(公网 80 转发到内网 8080)
BASH
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2:8080 # 目的地址 NAT,80 转发到内网主机
iptables -t nat -A POSTROUTING -j MASQUERADE # 启用地址伪装(源地址转换)
3. 屏蔽特定 IP
BASH
iptables -A INPUT -s 1.2.3.4 -j DROP # 拒绝来自 1.2.3.4 的连接
4. 限制连接频率(防止 DDoS)
BASH
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT # 限制访问频率,防止大流量攻击