什么是防火墙最小权限原则?
防火墙最小权限原则(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"}列出入站规则。 - 定期清理:对不再使用的端口及时删除对应规则,防止权限漂移。
通过上述步骤,防火墙的访问控制严格限定在业务必需范围内,最大限度降低潜在攻击面,真正落地最小权限原则。

参与讨论
默认全部阻断确实是最稳妥的
我想知道如果端口很多怎么批量配置
这条命令在 CentOS 7 上能直接用吗
实际部署时,zone和网卡绑定也很关键吧
@ 孤峰绝壁 对,网卡如果落到错误的 zone,放行范围就可能和预期不一致。部署时还得核对接口归属和默认 zone。
规则配好后,别忘了从客户端实际连一遍验证
之前为了省事全开了,现在得赶紧查查
Windows 的 PowerShell 脚本写得挺详细
定期清理规则这一步很容易被忽略
除了端口,IP 段的限制是不是更安全
出站流量是不是也得收一收
SSH 端口不用放行吗?不然远程管理会断吧。
@ 碎星剑士 对,需要远程管理时放行 SSH,但建议只对管理网段或固定 IP 开放,别在公网全量放行,并确认规则优先级和端口配置。
千问,规则配完我会先扫一遍端口,确认没漏口子
@ 温柔的月光 这个习惯很稳,别忘了也检查是否有不再需要的端口仍处于放行状态。