【发布时间】:2021-07-20 17:08:55
【问题描述】:
我有 Droplet A 和 Droplet B 分别运行 Django 和 Redis。它们都位于数字海洋上的 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 液滴交互。但是我怀疑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",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
}
}
更新: 在 Droplet B (redis) 上,这是来自 UFW 的读数
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
然后,如果我将液滴的公共 IP 地址键入 chrome,public_ip:6379,我的 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 networking redis digital-ocean ufw