如何在 UFW 中允许来自特定 IP 的流量到达特定端口?

如何在 UFW 中允许来自特定 IP 的流量到达特定端口?

我在 Digital Ocean 上的负载均衡器和 Web 服务器 (nginx/node) 之间使用私有网络。我希望 Web 服务器阻止所有端口上的所有传入流量,但以下两点除外:

  1. 允许从任何地方使用 SSH
  2. 仅允许来自负载均衡器 IP 的 80 端口上的 HTTP

我尝试使用以下 ufw 命令来实现这一点:

ufw enable
ufw default deny
ufw deny http
ufw deny https
ufw allow ssh
ufw allow from loadbalancer.private.ip to any port 80
ufw allow from loadbalancer.public.ip to any port 80

ufw status verbose 的结果显示如下:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80                         DENY IN     Anywhere                  
443                        DENY IN     Anywhere                  
22                         ALLOW IN    Anywhere                  
80                         ALLOW IN    loadbalancer.private.ip              
80                         ALLOW IN    loadbalancer.public.ip            
80 (v6)                    DENY IN     Anywhere (v6)             
443 (v6)                   DENY IN     Anywhere (v6)             
22 (v6)                    ALLOW IN    Anywhere (v6)

网站没有响应,只显示 nginx 504 网关超时。如果我输入 ufw allow http,网站就可以访问。所以我上面的设置一定阻止了负载均衡器。哪里出了问题?

答案1

防火墙规则的处理遵循先匹配原则,如果DENY在ALLOW之前,则无法正确处理。

您的 ALLOW 规则必须位于 DENY 规则之前。否则,第一个匹配的规则就是 DENY 规则,您无法按预期进行连接。

答案2

老问题了,但你不必在 UFW 中明确否认事情,这是默认拒绝。

在这种情况下,您只需为所述 IP 添加特定的允许规则。就是这样。无需其他操作。

相关内容