
你刚买了一台服务器,想配防火墙。搜索了一下,看到iptables的命令行语法,头皮发麻。-A、-D、-t nat、--dport……这些参数看着就不像人类能记住的。你想关掉一些端口,又怕把自己锁在外面。更麻烦的是,很多人配完防火墙自己先连不上服务器了。
今天把iptables的基本概念和常用命令讲清楚,让你能看懂、能上手。
先看一个数据
iptables是基于Netfilter框架的Linux内核级防火墙工具,至今仍是大多数Linux发行版的默认防火墙方案。它通过定义规则链(Chain)和规则(Rule)对网络流量进行精细化控制。在云原生时代,虽然出现了更现代化的替代方案,但iptables在存量系统和经典运维场景中仍占据主导地位。
核心概念:表与链
在iptables里,规则按“表→链→规则”三层结构组织。表代表功能分类,链代表流量处理阶段,规则决定具体动作。
四张常用表:
| 表名 | 用途 | 包含链 |
|---|---|---|
| filter | 默认表,负责数据包的允许/拒绝 | INPUT、OUTPUT、FORWARD |
| nat | 网络地址转换(端口转发、IP伪装) | PREROUTING、POSTROUTING、OUTPUT |
| mangle | 修改数据包头部(如TTL、QoS标记) | 五条链全有 |
| raw | 绕过连接跟踪,提升性能 | PREROUTING、OUTPUT |
普通用户最常用的是filter表(过滤流量)和nat表(端口转发)。
五条核心链:
- INPUT:处理进入本机的数据包(别人访问你的服务器)
- OUTPUT:处理本机发出的数据包(你的服务器访问别人)
- FORWARD:处理经过本机转发的数据包(把服务器当路由器用)
- PREROUTING:路由决策前处理(常用于DNAT)
- POSTROUTING:路由决策后处理(常用于SNAT)
重点:你配安全组用的是INPUT链,配端口转发用的是nat表的PREROUTING链。
常用命令
查看规则:
bash
iptables -L -v -n
-L列出规则,-v显示详细信息,-n用数字显示IP和端口(不解析域名)。
查看nat表规则:
bash
iptables -t nat -L -v -n
添加规则(追加到末尾):
bash
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
插入规则(放到最前面):
bash
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
删除规则(按内容):
bash
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
清空所有规则:
bash
iptables -F
实战示例
示例1:基础防火墙
bash
# 默认拒绝所有入站流量 iptables -P INPUT DROP iptables -P FORWARD DROP # 允许本地回环 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 iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
示例2:端口转发
bash
# 将外部访问80端口的流量转发到内网服务器 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080 iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 8080 -j ACCEPT
保存规则(重要)
iptables规则默认是临时的。重启服务器或systemctl restart iptables后规则会丢失。
Debian/Ubuntu:
bash
apt install iptables-persistent netfilter-persistent save
CentOS/RHEL:
bash
service iptables save
真实案例:配完自己连不上
一个朋友在服务器上配防火墙,iptables -P INPUT DROP然后只开了80和443端口。忘记开22端口,SSH连接直接被切断了。他只能去云厂商控制台用VNC登录,把22端口加上。
教训:改默认策略之前,一定先确保SSH端口已经放行。顺序应该是先加允许规则,再改默认策略。
最后一句
iptables的配置看似复杂,但核心就几件事:用filter表控入站,用nat表做转发,规则顺序决定匹配优先级。先配允许规则再改默认策略,不然你会把自己关在外面。
建议新手从简单规则开始:先允许SSH,再允许HTTP/HTTPS,最后把默认策略改成DROP。等熟悉了再尝试NAT和自定义链。




