如何为 postgresql 创建数字海洋防火墙

时间:2021-05-12 06:25:41

标签: docker docker-compose digital-ocean

我正在研究如何为我的 docker 容器创建数字海洋防火墙。

我知道如何为 TCP 端口 5432 创建规则。但是我仍然想使用 pgadmin 进行连接。

如何只允许本地连接,以及来自几台特定计算机的 IP 地址的两个连接?

enter image description here

1 个答案:

答案 0 :(得分:1)

以下是您在自己的容器中运行 postgres db 和 pgadmin 的情况(docker-compose.yml 文件)。

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

UFW

我建议使用 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 那些。

希望这会有所帮助,如果您需要更多信息,请告诉我。