我正在尝试设置防火墙,以仅允许来自特定 IP 地址的端口 80 和 443 上的入站流量。我尝试创建一条规则来阻止 TCP、本地端口 80 和 443 上的所有流量,然后我添加了一条规则以允许来自特定远程 IP 地址的流量。但是,我一直收到来自任何 IP 地址的流量。因此,我禁用了允许流量的规则,但我仍然收到来自任何 IP 地址的流量。然后我更改了规则以阻止任何端口上的所有 TCP 流量,但我仍然收到流量。
没有允许 TCP 80、443 或任何不限于特定程序。如何阻止除特定 IP 地址之外的端口上的传入流量?有没有办法确定哪条规则允许流量通过?谢谢!
答案1
首先:
- 如果某个端口/服务/应用程序没有规则,且防火墙已启用,则该端口的所有流量都会被阻止!
- 如果已启用允许针对端口/服务/应用程序的规则,允许匹配的流量。
- 如果已启用堵塞端口/服务/应用程序的规则,其优先级高于允许规则和匹配的流量被阻止!
您说端口 80 和 443 上的入站流量从任何地方都允许。这意味着有一条活动规则允许该流量。您希望仅允许来自某些 IP 地址的流量到这些端口。
您首先需要删除允许流量的规则,然后创建仅允许来自特定 IP 地址的流量的规则。
要找出什么规则导致您的端口 80 和 443 可访问,请首先获取所有活动规则:
$active_rules = Get-NetFirewallRule -Enabled True -Direction Inbound -Action Allow
下一步是搜索允许端口 80 和 443 上的入站流量的可能规则:
$port_filters = $active_rules | Get-NetFirewallPortFilter | Where-Object { $_.LocalPort -in (80, 443) }
然后找到关联的防火墙规则:
$port_filters | Get-NetFirewallRule
可能是更轻松仅按本地端口高级防火墙设置的图形用户界面中的列。但这些命令可能会以某种方式帮助您追踪规则。
要记住的事情:检查三个不同的配置文件。如果您没有找到端口过滤器,则可能是 Web 应用程序或 Web 服务处于活动状态允许规则。
找到并删除(或禁用)相关规则后,创建一个新的允许端口和地址的规则:
New-NetFirewallRule -DisplayName "Allow TCP:80,443 from certain IPs" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80,443 -RemoteAddress ("8.8.8.8", "8.8.4.4", "…")