如何解决为什么即使启用了 UFW,我也可以通过公共 IP 访问 redis?
我有分别运行 Django 和 Redis 的 Droplet A 和 Droplet B。它们都位于数字海洋上的 VPC 上,并且拥有公共和私有 IP 地址。
下面是我的 redis docker-compose。我正在尝试将容器 redis 端口映射到主机端口,以便我可以通过 VPC 连接到它。
redis:
restart: always
image: redis
command: ["redis-server","--appendonly","yes"]
volumes:
- redis_data:/data
ports:
- 6379:6379
在 Django - 也连接到 VPC,我以这种方式连接到 redis:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://private_ip:6379","OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",},}
}
这有效 - 我能够与我的 redis droplet 进行交互。但是我怀疑 ports: 6379:6379
实际上可能会打开 redis droplet 到互联网,果然,如果我尝试通过公共 IP 地址连接,这也有效。即使我在浏览器中输入 Droplet 的公共 IP 地址,像这样:public_ip:6379,我的 redis 安装也会将其检测为潜在的安全威胁 - 请求以某种方式通过。我如何阻止对 redis droplet 的所有 http/public 请求,并只允许通过 VPN 上的私有 ip 进行流量?
这也有效:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://public_ip:6379",}
}
更新: 在 Droplet B (redis) 上,这是来自 UFW 的读数
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
然后,如果我在 chrome public_ip:6379
中输入 Droplet 的公共 IP 地址,我的 docker 读数会显示:
It looks like somebody is sending POST or Host: commands to Redis. This is likely due to an attacker attempting to use Cross Protocol Scripting to compromise your Redis instance. Connection aborted.
不仅如此,通过公共IP地址连接到redis droplet真的有效吗?
解决方法
Docker 和 UFW 之间存在问题。 UFW 不控制 Docker 打开的端口,不幸的是,这种情况也不会出现在 ufw 状态上。对此有许多建议的解决方案,您可以谷歌搜索,但我发现对我最有用的是:
https://jorisvergeer.nl/2019/11/03/let-docker-and-ufw-work-nicely/
然而,由于您使用的是 DigitalOcean,一个更简单的方法可能是创建一个 DigitalOcean 防火墙,它只允许授权 IP 在允许的端口访问 Droplet B。设置防火墙后,将 Droplet B 放在里面,这样应该可以很好地控制到 Droplet B 的流量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。