Linux防火墙核心工具是iptables,它直接操作内核Netfilter,规则即时生效但不持久;需按“表→链→规则”层级配置,四表(filter/nat/mangle/raw)对应不同功能,五链(INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING)对应数据包生命周期;基础操作为查(-L)、清(-F)、配(-A),默认策略设为DROP前须先添加允许回环、已建立连接及必要服务的规则;规则需保存至文件并配置开机加载以实现持久化。

Linux 防火墙配置的核心工具是 iptables,它不是独立服务,而是直接操作内核 Netfilter 框架的命令行工具。规则一旦添加立即生效,无需重启,但默认不持久——关机后会丢失,需手动保存。配置的关键在于理解“表→链→规则”的层级结构,并按数据流向合理组织策略。
先搞清四表五链:别乱加规则的底层逻辑
iptables 不是堆规则,而是分层处理数据包:
-
四表:按功能划分规则集合
— filter 表(默认):负责“放行还是拒绝”,最常用,含 INPUT/OUTPUT/FORWARD 链
— nat 表:做地址转换(如端口映射、SNAT/DNAT),含 PREROUTING/POSTROUTING/OUTPUT 链
— mangle 表:修改数据包(如 TOS、TTL),极少手动配置
— raw 表:关闭连接跟踪(conntrack),用于特殊高性能场景 -
五链:按数据包生命周期挂载规则
— INPUT:目标是本机的数据包(如 SSH 连接、Web 请求)
— OUTPUT:本机主动发出的数据包
— FORWARD:经本机转发的数据包(路由器或网关模式)
— PREROUTING:路由前处理(DNAT 在这里改目的地址)
— POSTROUTING:路由后处理(SNAT 在这里改源地址)
基础操作三步走:查、清、配
刚上手建议从干净环境开始,避免旧规则干扰:
-
查规则:
iptables -L -n -v查看 filter 表所有链(数字显示 IP/端口,带统计)
加--line-numbers可显示序号,方便后续删除或插入 -
清规则:
iptables -F清空 filter 表所有链;iptables -X删除用户自定义链
注意:-F不影响默认策略(policy),如 INPUT 默认是 ACCEPT,仍需显式设置 -
设默认策略(白名单前提):
iptables -P INPUT DROP
这条命令意味着:没被明确允许的入站包一律丢弃。务必在添加允许规则后再执行,否则可能锁死 SSH
写好第一条允许规则:保命+实用
典型安全起点(按顺序添加,iptables 自上而下匹配):
- 允许本地回环:
iptables -A INPUT -i lo -j ACCEPT - 允许已建立和相关连接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(这是让响应包能回来的关键,比如你访问外网,它的回包靠这条放行) - 开放必要服务,例如 SSH:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
可加来源限制:-s 192.168.1.100或-s 10.0.0.0/8 - 允许 ping(可选):
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
保存与恢复:让规则开机还在
iptables 规则存在内存里,重启就清空。要持久化:
- 保存当前规则:
iptables-save > /etc/iptables/rules.v4
(Debian/Ubuntu 路径;CentOS 7+ 建议用/etc/sysconfig/iptables) - 开机加载:
— Debian/Ubuntu:安装iptables-persistent包,自动读取rules.v4
— CentOS 7:启用iptables.service,确保它在 firewalld 停用后启用 - 临时恢复:
iptables-restore
不复杂但容易忽略:规则顺序决定一切,-A 是追加到末尾,-I 是插入开头;删规则用编号更稳妥(iptables -D INPUT 3);测试时建议开两个终端,一个连着 SSH,一个执行命令,避免误操作断连。










