Linux防火墙规则编写核心是“最小权限原则”+“明确流向控制”,推荐nftables;默认策略设为DROP,先放行lo、ESTABLISHED/RELATED连接,再按需精准开放SSH、HTTP/HTTPS等端口,并限制连接频率,最后保存规则防重启丢失。

Linux防火墙规则编写核心在于“最小权限原则”+“明确流向控制”,用 iptables 或 nftables(推荐新系统用 nftables)实现,关键不是堆规则,而是理清“谁访问谁、走什么协议、开哪几个端口、默认怎么处理”。
先定策略:默认拒绝,再精准放行
绝大多数安全问题源于默认允许。务必把默认策略设为 DROP:
- iptables:运行 iptables -P INPUT DROP、iptables -P FORWARD DROP、iptables -P OUTPUT ACCEPT(出站通常宽松些)
- nftables:在 base chain 中设 policy drop,例如:nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
- 切记:执行前确保已有 SSH 规则且已测试连通,否则可能锁死自己
只开必需端口:按服务而非IP粗放放行
别写 “-s 0.0.0.0/0 -p tcp --dport 22 -j ACCEPT” 就完事——要加状态跟踪和连接限制:
- SSH 安全写法(iptables):iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
- HTTP/HTTPS(仅限 Web 服务器):iptables -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT
- 本地回环必须放通:iptables -A INPUT -i lo -j ACCEPT(所有规则前建议加这条)
善用连接状态(state / ct state),避免“半开漏洞”
无状态规则易被绕过。实际生效的几乎都依赖连接追踪:
- 只允许已建立或相关连接响应:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- nftables 对应写法:nft add rule inet filter input ct state established,related accept
- 这条规则通常放在 INPUT 链靠前位置(但要在 lo 之后、具体服务规则之前)
保存与恢复要闭环,别让重启变“裸奔”
内存规则重启即丢。必须固化:
- iptables:用 iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)或 service iptables save(CentOS 7 及更早)
- nftables:导出为文件 nft list ruleset > /etc/nftables.conf,并启用 systemd 服务:systemctl enable nftables
- 每次修改后,先 nft -f /etc/nftables.conf 或 iptables-restore 测试,再确认开机加载
基本上就这些。不复杂,但容易忽略状态匹配、默认策略和持久化三个环节。写规则前先画张草图:本机哪些服务对外?哪些IP需要访问?哪些出向连接必须允许?照着画的来,比抄模板更稳。
以上就是Linux防火墙规则如何编写_最佳实践总结助你快速突破【教程】的详细内容,更多请关注php中文网其它相关文章!