VPS基本安全措施

再写一点关于docker的问题吧,其实没必要用ufw来管理docker的端口开放,docker会自己写入iptables规则用以管控端口,以docker compose为例:

1. 对于数据库或者redis之类仅在应用内使用的服务:

  • 仅在容器内部网络内开放,compose拉起时会创建一个名为第一个服务名_default的bridge,可以用docker network ls查看。
  • 容器默认对该内部网络开放所有端口。
  • 同一网络内的其他容器可以通过容器名和端口访问该服务。
  • 没有加入该网络的容器无法访问任何端口。
  • 对于仅在内部网络中暴露端口的服务,无需ports 下指定任何映射

2. 对于需要进行反代的服务:

  • 仅在127.0.0.1监听即可防止外部端口访问,在对应容器处使用
ports:
      - 127.0.0.1:端口:端口

3. 对于需要外部直接访问端口的服务:

  • 直接使用
ports:
      - 端口:端口

同样的,贴一个示例compose.yml

services:
    rsshub:
        image: diygod/rsshub:latest
        restart: always
        ports:
            - 127.0.0.1:1200:1200
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: "redis://redis:6379/"
            PUPPETEER_WS_ENDPOINT: "ws://browserless:3000"
        env_file:
            - .env
        healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:1200/healthz"]
            interval: 30s
            timeout: 10s
            retries: 3
        depends_on:
            - redis
            - browserless

    browserless:
        image: browserless/chrome
        restart: always
        ulimits:
            core:
                hard: 0
                soft: 0
        healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:3000/pressure"]
            interval: 30s
            timeout: 10s
            retries: 3

    redis:
        image: redis:alpine
        restart: always
        volumes:
            - ./data:/data
        healthcheck:
            test: ["CMD", "redis-cli", "ping"]
            interval: 30s
            timeout: 10s
            retries: 5
            start_period: 5s
    
    sb:
        image: ghcr.io/sagernet/sing-box
        container_name: sb
        restart: always
        volumes:
            - ./sing-box:/etc/sing-box/
        command: -D /var/lib/sing-box -C /etc/sing-box/ run
24 个赞