我正在研究如何为我的 docker 容器创建数字海洋防火墙。
我知道如何为 TCP 端口 5432 创建规则。但是我仍然想使用 pgadmin 进行连接。
如何只允许本地连接,以及来自几台特定计算机的 IP 地址的两个连接?
答案 0 :(得分:1)
以下是您在自己的容器中运行 postgres db 和 pgadmin 的情况(docker-compose.yml 文件)。
version: '3.1'
services:
db:
image: postgres:latest
restart: "no"
container_name: postgres
volumes:
- ./database:/var/lib/postgresql/data
networks:
- postgresql_network
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: root
POSTGRES_USER: root
POSTGRES_DB: mydb
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin
networks:
- postgresql_network
restart: "no"
ports:
- "8087:80"
volumes:
- ./deployment/pgadmin/pgadmin4/servers.json:/pgadmin4/servers.json
environment:
PGADMIN_DEFAULT_EMAIL: me@myself.com
PGADMIN_DEFAULT_PASSWORD: admin123
PGADMIN_LISTEN_PORT: 80
POSTGRES_PASSWORD: root
POSTGRES_USER: root
POSTGRES_DB: mydb
networks:
postgresql_network:
name: postgresql_network
为了完整,还有 pgadmin 的 servers.json 文件:
{
"Servers": {
"1": {
"Name": "Local",
"Group": "Servers",
"Host": "postgres",
"Port": 5432,
"MaintenanceDB": "postgres",
"Username": "root",
"SSLMode": "prefer",
"SSLCert": "<STORAGE_DIR>/.postgresql/postgresql.crt",
"SSLKey": "<STORAGE_DIR>/.postgresql/postgresql.key",
"SSLCompression": 0,
"Timeout": 10,
"UseSSHTunnel": 0,
"TunnelPort": "22",
"TunnelAuthentication": 0
}
}
}
在 Digital Ocean 上运行这个 docker-compose.yml 意味着需要以下端口: 5432 用于 Postgres 8087 用于 pgadmin
我建议使用 Digital Ocean 防火墙的命令行界面。这是UFW,它很容易使用。 具体IP地址规则如下:
ufw allow from 99.99.99.99 proto tcp to any port 5432
ufw allow from 99.99.99.99 proto tcp to any port 8087
第一个允许从 99.99.99.99. 访问端口 5432,即数据库。 第二个从那个 IP 到 8087,pgadmin 软件。
pgadmin 和 postgres 之间的本地连接在 docker 网络本身中处理。别担心,你不需要 UFW 那些。
希望这会有所帮助,如果您需要更多信息,请告诉我。