Linux防火墙规则如何编写_常见误区解析避免新手踩坑【指导】

5次阅读

linux防火墙 规则需理解匹配顺序、状态机制与持久化逻辑:规则自上而下匹配,限制性规则须前置;必须放行 RELATED/ESTABLISHED 连接;–permanent 仅保存配置,须 reload 或 save 才生效;firewalld 需明确 zone、接口 与服务关系。

Linux 防火墙规则如何编写_常见误区解析避免新手踩坑【指导】

Linux防火墙 规则不是写完就生效的配置清单,而是需要理解匹配逻辑、执行顺序和状态机制的一套运行策略。新手常因忽略底层原理,导致服务不通、规则失效或安全形同虚设。

规则顺序决定一切

防火墙按从上到下的顺序逐条匹配,一旦命中就立即执行动作(ACCEPT/DROP/REJECT),不再继续检查后续规则。比如:

  • 先写 iptables -A input -p tcp --dport 22 -j ACCEPT,再写 iptables -A INPUT -s 192.168.1.100 -j DROP —— 后者对 ssh 完全无效,因为流量早已被前面的规则放行
  • 正确做法是:把限制性规则(如封 IP、限 端口 )放在允许性规则之前;或者用-I 插入到链首,而非 -A 追加到末尾
  • firewalld 虽不直接暴露链序,但富规则(rich rules)也按添加顺序生效,--permanent后必须 firewall-cmd --reload 才真正载入顺序

别忘了连接状态管理

现代防火墙默认启用连接跟踪(conntrack),但新手常漏配“已建立连接”的放行规则,结果自己连不上服务器。

  • iptables 中务必包含:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT(或新版用-m conntrack --ctstate
  • firewalld 默认自动处理响应流量,但若手动添加了 --direct 规则或关闭了默认 zone 策略,就得自己补上状态相关逻辑
  • 测试时可用 ss -tnnetstat -tn确认连接是否处于 ESTABLISHED 状态,再比对规则是否覆盖

永久生效 ≠ 立即生效

很多命令加了 --permanent 就以为万事大吉,其实只是写进 配置文件,没重载就不会跑在内存里。

  • firewalld 中:--add-port=80/tcp --permanent只存到/etc/firewalld/zones/public.xml,必须跟firewall-cmd --reload
  • iptables 中:service iptables savecentos 6)或 iptables-save > /etc/sysconfig/iptables(CentOS 7+)才是持久化,重启后靠systemctl enable iptables 加载
  • 验证是否真生效:用 firewall-cmd --list-portsiptables -L -n看运行中的规则,而不是只查 配置文件

混淆区域、接口与服务概念

firewalld 用 zone 管理策略,但新手常把 public、internal、trusted 混用,或误以为“开了服务就等于开了 端口”。

  • firewall-cmd --add-service=http本质是打开 80/tcp + 对应的富规则,但前提是当前 zone(如 public)已激活且该接口归属此 zone
  • 查接口归属:firewall-cmd --get-zone-of-Interface=eth0;查活跃 zone:firewall-cmd --get-active-zones
  • 不要在 trusted zone 随便加外部网卡——它默认允许所有入站,相当于关了防火墙

基本上就这些。规则本身不复杂,容易踩坑的地方都在逻辑衔接和操作闭环上。

站长
版权声明:本站原创文章,由 站长 2025-12-16发表,共计1457字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources