linux防火墙 规则遵循最小权限原则,强调规则顺序、默认策略设为 DROP、状态跟踪(ESTABLISHED/RELATED)、及时保存持久化及修改前备份验证。

Linux防火墙 规则的核心是“最小权限原则”——只放行必需的流量,其余一律拒绝。写错一条规则可能导致服务不可用或安全缺口,所以不能靠试错,得理解底层逻辑和常见陷阱。
iptables 规则顺序决定一切
iptables 按链中规则从上到下逐条匹配,一旦命中就执行动作(ACCEPT/DROP),不再继续。所以 允许规则必须放在拒绝规则之前,否则全被拦住。
- 错误写法:iptables -A input -j DROP(追加到最后)→ 后面再加的允许规则根本没机会生效
- 正确做法:iptables -I INPUT 1 -p tcp –dport 22 -j ACCEPT(用 - I 插入到最前面)
- 查看当前顺序:iptables -L INPUT -n –line-numbers,带行号方便定位和删除
默认策略比单条规则更关键
很多人只关注添加规则,却忽略链的默认策略(policy)。INPUT 链默认是 ACCEPT,意味着没匹配到任何规则的包全放行——这等于裸奔。
- 生产环境建议:先设为 DROP,再逐步放开必要 端口
iptables -P INPUT DROP
iptables -P FORWARD DROP - 切记:设置 - P 前务必确保已有 ssh 等管理 端口 放行规则,否则可能锁死远程连接
- 临时救急:本地终端执行 iptables -P INPUT ACCEPT 可快速恢复访问
状态跟踪让规则更精准可靠
单纯靠端口判断不安全(比如有人伪造 SYN 包打开放端口)。启用 conntrack 模块后,可用状态(RELATED, ESTABLISHED)识别合法回包和关联连接。
- 必备基础规则:iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
- 配合使用 -m conntrack 更现代:iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
- 这样就能放心 DROP 所有新连接请求(-m state –state NEW),只留白名单端口
保存与持久化是稳定运行的前提
iptables 命令改的是内存中的规则,重启就丢失。必须显式保存并配置开机加载。
- debian/ubuntu:iptables-save > /etc/iptables/rules.v4,并确保 netfilter-persistent 服务启用
- RHEL/centos 7+:service iptables save 或用iptables-save > /etc/sysconfig/iptables
- 检查是否生效:systemctl list-unit-files | grep iptables,确认服务已启用
基本上就这些。规则不在多,在准;不在快,在稳。每次修改前先备份 iptables-save > /tmp/iptables.bak,改完用iptables -L -n 验证,再测试连通性。不复杂但容易忽略。