【问题标题】:How to create digitalocean firewall for postgresql如何为 postgresql 创建 digitalocean 防火墙
【发布时间】:2021-08-02 12:02:54
【问题描述】:

我正在研究如何为我的 docker 容器创建 digitalocean 防火墙。

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

我怎样才能只允许本地连接,以及来自几台特定计算机 IP 地址的两个连接?

【问题讨论】:

  • 这取决于你的 pgadmin 在哪里运行。如果它在同一主机上的单独容器上运行,那么当 pgadmin 在您自己的笔记本电脑上运行时,情况就不同了。

标签: docker docker-compose digital-ocean


【解决方案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 那些。

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

【讨论】:

  • 哇,感谢您的详细回答!我实际上在我的计算机上设置了 pgadmin,而不是 docker-compose。但也许最好/最安全的选择是将端口 5432 仅保护到 docker-compose 中的本地连接(`ports: - 127.0.0.1:5432:5432')?然后在设置 pgadmin continer 后允许到 8087 的公共连接?
  • 如果您只允许本地连接到 5432(数据库),那么您主机上的 pgadmin 无法访问它。 DockerContainers 创建自己的网络。主机是外部计算机,而不是在其本地主机网络上。如果您在同级容器中运行 pgadmin(意味着:在同一个 Docker 网络上),那么 pgadmin 可以通过该网络访问数据库,并且不需要设置防火墙。
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2022-12-23
  • 1970-01-01
  • 2020-05-27
相关资源
最近更新 更多