什么是防火墙最小权限原则?

15 人参与

防火墙最小权限原则(Least Privilege)要求只在必要的网络区域或配置文件中开放业务所需的端口和协议,所有未明确放行的流量默认被阻断。该原则的核心在于将攻击面压缩到最小范围,防止因多余开放导致的横向渗透或服务被利用。实现时必须先明确业务流向:哪些服务需要入站访问,哪些仅需出站请求,然后在对应的防火墙模型中精确限定。

在 linux 环境下,基于 firewalld 的实现通常通过 zone 来划分安全等级。以内部服务器所在的 internal 区域为例,只需在该 zone 中永久添加业务端口即可:

sudo firewall-cmd --permanent --zone=internal --add-port=8080/tcp   # Web 应用
sudo firewall-cmd --permanent --zone=internal --add-port=3306/tcp   # MySQL
sudo firewall-cmd --permanent --zone=internal --add-port=9200/tcp   # Elasticsearch
sudo firewall-cmd --permanent --zone=internal --add-port=6379/tcp   # Redis
sudo firewall-cmd --reload

上述命令确保只有 internal 区域的流量可以访问四个端口,公共区域仍保持默认阻断,符合最小权限的要求。

在 Windows 环境,Windows Defender 防火墙 采用入站/出站规则配合网络配置文件(Domain、Private、Public)实现同等控制。针对内部网络(Private 配置文件),可使用 PowerShell 创建对应规则:

New-NetFirewallRule -DisplayName "Allow TCP 8080 - WebApp" `
    -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile Private
New-NetFirewallRule -DisplayName "Allow TCP 3306 - MySQL" `
    -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow -Profile Private
New-NetFirewallRule -DisplayName "Allow TCP 9200 - Elasticsearch" `
    -Direction Inbound -Protocol TCP -LocalPort 9200 -Action Allow -Profile Private
New-NetFirewallRule -DisplayName "Allow TCP 6379 - Redis" `
    -Direction Inbound -Protocol TCP -LocalPort 6379 -Action Allow -Profile Private

同样,仅在 Private 网络下放行,Public 网络保持阻断,形成跨平台的最小权限基线。

实施要点

  • 明确业务需求:先列出必须开放的端口和对应协议,避免盲目放行。
  • 统一安全基线:linux 使用统一的 internal(或自定义)zone,Windows 统一使用 Private 配置文件,确保两套系统的权限范围相匹配。
  • 审计与验证:linux 可通过 firewall-cmd --list-all --zone=internal 检查已放行端口;Windows 则使用 Get-NetFirewallRule -Profile Private | Where-Object {$_.Direction -eq "Inbound"} 列出入站规则。
  • 定期清理:对不再使用的端口及时删除对应规则,防止权限漂移。

通过上述步骤,防火墙的访问控制严格限定在业务必需范围内,最大限度降低潜在攻击面,真正落地最小权限原则。

参与讨论

15 条评论
  • Deathwhisper

    默认全部阻断确实是最稳妥的

    回复
  • 血色预言者

    我想知道如果端口很多怎么批量配置

    回复
  • 风和日丽记

    这条命令在 CentOS 7 上能直接用吗

    回复
  • 孤峰绝壁

    实际部署时,zone和网卡绑定也很关键吧

    回复
    1. 孔雀王子

      @ 孤峰绝壁 对,网卡如果落到错误的 zone,放行范围就可能和预期不一致。部署时还得核对接口归属和默认 zone。

      回复
  • 孤独夜

    规则配好后,别忘了从客户端实际连一遍验证

    回复
  • ReverieShade

    之前为了省事全开了,现在得赶紧查查

    回复
  • 傀儡低语

    Windows 的 PowerShell 脚本写得挺详细

    回复
  • 夜影无声

    定期清理规则这一步很容易被忽略

    回复
  • 感恩的麦穗

    除了端口,IP 段的限制是不是更安全

    回复
  • 雪落江南

    出站流量是不是也得收一收

    回复
  • 碎星剑士

    SSH 端口不用放行吗?不然远程管理会断吧。

    回复
    1. 枫少@KillBoy (作者)

      @ 碎星剑士 对,需要远程管理时放行 SSH,但建议只对管理网段或固定 IP 开放,别在公网全量放行,并确认规则优先级和端口配置。

      回复
  • 温柔的月光

    千问,规则配完我会先扫一遍端口,确认没漏口子

    回复
    1. qianwen

      @ 温柔的月光 这个习惯很稳,别忘了也检查是否有不再需要的端口仍处于放行状态。

      回复