AI智能摘要
AI 生成的文章内容摘要
在混合使用 linux 与 Windows 的服务器环境中,统一防火墙策略是保障安全基线的关键。下面以常见服务端口 8080(Web 应用)、3306(MySQL)、9200(Elasticsearch)和 6379(Redis)为例,比较 firewalld(基于 zone)和 Windows Defender 防火墙(基于入站/出站规则)的配置逻辑,并给出最小权限原则下的实际命令示例。

1. 防火墙模型的根本差异
- firewalld:通过 zone(如
public、internal、trusted)划分网络安全等级。每个 zone 维护一套允许的服务或端口,流量只有在匹配的 zone 中被明确放行才会通过。 - Windows Defender:采用 入站 与 出站 规则,规则可以指定协议、端口、方向、适用的网络配置文件(Domain、Private、Public)。规则的粒度更细,但缺少类似 zone 的层级概念,需要在每个规则中手动指明适用的配置文件。
最小权限原则要求只在需要的 zone 或配置文件中打开必要端口,其他流量保持阻断。
2. firewalld 中的端口放行
下面示例假设业务服务器位于 internal 区域,仅对该区域放行目标端口。若服务器使用默认的 public 区域,可将 --zone=internal 替换为 --zone=public。
# 统一将目标服务器加入 internal 区域(如果尚未设置)
sudo firewall-cmd --permanent --zone=internal --add-source=10.0.0.0/24
sudo firewall-cmd --reload
# 8080 – HTTP 应用
sudo firewall-cmd --permanent --zone=internal --add-port=8080/tcp
# 3306 – MySQL
sudo firewall-cmd --permanent --zone=internal --add-port=3306/tcp
# 9200 – Elasticsearch(默认使用 TCP)
sudo firewall-cmd --permanent --zone=internal --add-port=9200/tcp
# 6379 – Redis
sudo firewall-cmd --permanent --zone=internal --add-port=6379/tcp
# 重新加载使配置生效
sudo firewall-cmd --reload
要点
--permanent确保规则持久化。- 只在
internal区域放行,外部public区域仍保持默认阻断。 - 若某端口仅用于出站请求(如内部服务调用外部 API),可以使用
--add-rich-rule指定方向为outbound,但对上述四个服务通常需要入站访问。
3. Windows Defender 中的规则对应
在 Windows 中,使用 PowerShell 的 New‑NetFirewallRule 创建入站规则。下面的示例统一将规则限定在 Private 网络配置文件,适用于内部服务器;如果服务器位于域环境,可改为 Domain。
# 8080 – HTTP 应用
New-NetFirewallRule -DisplayName "Allow TCP 8080 - WebApp" `
-Direction Inbound -Protocol TCP -LocalPort 8080 `
-Action Allow -Profile Private
# 3306 – MySQL
New-NetFirewallRule -DisplayName "Allow TCP 3306 - MySQL" `
-Direction Inbound -Protocol TCP -LocalPort 3306 `
-Action Allow -Profile Private
# 9200 – Elasticsearch
New-NetFirewallRule -DisplayName "Allow TCP 9200 - Elasticsearch" `
-Direction Inbound -Protocol TCP -LocalPort 9200 `
-Action Allow -Profile Private
# 6379 – Redis
New-NetFirewallRule -DisplayName "Allow TCP 6379 - Redis" `
-Direction Inbound -Protocol TCP -LocalPort 6379 `
-Action Allow -Profile Private
要点
-Profile Private限制规则仅在内部网络生效,公共网络仍受阻。- 若需要同时放行出站流量,可再添加对应的出站规则(
-Direction Outbound)。 - 通过
Get-NetFirewallRule -DisplayName "Allow TCP 3306 - MySQL"可随时检查规则状态。

4. 对比表:firewalld vs Windows Defender(同一端口)
| 端口 | firewalld 关键命令 | 适用 zone | Windows Defender 关键命令 | 适用网络配置文件 |
|---|---|---|---|---|
| 8080 | firewall-cmd --permanent --zone=internal --add-port=8080/tcp | internal | New-NetFirewallRule -DisplayName "Allow TCP 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile Private | Private |
| 3306 | firewall-cmd --permanent --zone=internal --add-port=3306/tcp | internal | New-NetFirewallRule -DisplayName "Allow TCP 3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow -Profile Private | Private |
| 9200 | firewall-cmd --permanent --zone=internal --add-port=9200/tcp | internal | New-NetFirewallRule -DisplayName "Allow TCP 9200" -Direction Inbound -Protocol TCP -LocalPort 9200 -Action Allow -Profile Private | Private |
| 6379 | firewall-cmd --permanent --zone=internal --add-port=6379/tcp | internal | New-NetFirewallRule -DisplayName "Allow TCP 6379" -Direction Inbound -Protocol TCP -LocalPort 6379 -Action Allow -Profile Private | Private |
5. 落地建议
- 统一安全基线:在 linux 端统一使用
internal(或自定义)zone,在 Windows 端统一使用Private配置文件,确保两套系统的最小权限范围相匹配。 - 审计与验证:
- linux:
firewall-cmd --list-all --zone=internal查看已放行端口。 - Windows:
Get-NetFirewallRule -Profile Private | Where-Object {$_.Direction -eq "Inbound"}列出所有入站规则。 - 定期清理:对不再使用的端口及时删除规则,防止权限漂移。
- Linux:
firewall-cmd --permanent --zone=internal --remove-port=8080/tcp && firewall-cmd --reload - Windows:
Remove-NetFirewallRule -DisplayName "Allow TCP 8080"

重庆市 1F
混合环境防火墙配置确实是个痛点,感谢对比
山东省烟台市 2F
容器宿主机上防火墙策略还要叠加 docker 的规则,更麻烦
上海市奉贤区 3F
linux 的 zone 概念和 Windows 的配置文件差异挺大
广东省深圳市 B1
@ 旅行达人 zone 和配置文件是两套思路,映射关系容易绕晕
上海市嘉定区 B1
@ 旅行达人 对,刚接触时老搞混,后来画了个对照表才理清
重庆市 B1
@ 旅行达人 两边概念不对应,换人接手时特别容易配错
甘肃省 4F
这几个常用端口配置命令很实用,先收藏了
山东省烟台市 5F
Windows Defender 规则粒度更细,但操作稍微繁琐点
广东省深圳市 6F
firewalld 的 –permanent 参数容易忘, reload 很重要
甘肃省 7F
建议加上如何验证规则是否生效的具体步骤
上海市崇明县 8F
内部网络统一用 Private 或 internal 确实更安全
广东省深圳市 B1
@ 可可碎片 配置文件也统一走 Private 能少很多麻烦
甘肃省 B1
@ 可可碎片 internal 和 Private 正好对应,两边口径一致好维护
广东省深圳市 B1
@ 可可碎片 设置在 Private 后公网访问直接被拦,遇到过一回就老实了
山东省烟台市 9F
Elasticsearch 默认端口暴露风险高,必须严格限制
重庆市 10F
PowerShell 脚本批量部署规则会更方便管理
甘肃省 B1
@ 金戈武夫 批量确实省事,规则多了手工一条条点太容易出错
广东省深圳市 B1
@ 金戈武夫 对,尤其网段多的时候统一配置比逐台改靠谱得多
上海市嘉定区 B1
@ 金戈武夫 我之前用脚本批量下发过,配合日志排查规则冲突很方便
山东省烟台市 11F
这种实操指南比纯理论更有价值,期待更多案例
浙江省温州市 12F
Windows 那边规则多了之后不好排查,有没有管理工具能批量查看?
山东省烟台市 13F
Redis 集群模式下端口规则是不是还得加节点间通信端口
甘肃省 14F
firewalld 里 rich rule 其实比直接加端口更灵活,适合复杂场景
重庆市 15F
Windows 上除了 PowerShell,老系统还得兼顾 netsh 命令吧
广东省深圳市 16F
出站规则经常被忽略,实际上很多隐患都在这边
山东省烟台市 17F
规则命名规范一点,后面查起来能省不少时间
山东省烟台市 18F
想问域环境下 Domain 配置文件和 Private 该怎么选
江苏省无锡市 19F
混合环境统一基线这点太重要了,踩过坑才懂
台湾省新北市 20F
source绑定和接口归属也得一起核对
上海市 21F
Windows 这边用 PowerShell 脚本确实比点界面快多了
江苏省无锡市 B1
@ 风尘叹 是的,用脚本一键多条规则省事多了,尤其要在几台机器上统一策略的时候,真不想再点来点去了 😄
北京市 22F
firewalld 那个 rich rule 出站示例能再展开下吗
宁夏银川市 B1
@ 团建请假专业户 可以,例如放行 internal 区域的出站 HTTPS:sudo firewall-cmd –permanent –zone=internal –add-rich-rule=’rule family=”ipv4″ direction=”out” port port=”443″ protocol=”tcp” accept’,再执行 reload。单独加 accept 不会阻断其他出站流量。