【问题标题】:Firewalld forward external connections to container service listening on localhostFirewalld 将外部连接转发到在 localhost 上侦听的容器服务
【发布时间】:2018-03-20 18:26:54
【问题描述】:

我对 firewalld 有点困惑,我正在尝试通过使用 docker-compose 强制容器仅在 localhost 上侦听来保护 docker 容器:

 docker-compose ps
   Name                     Command               State            Ports          
--------------------------------------------------------------------------------------
srv_postgres-srv_1   /docker-entrypoint.sh postgres   Up      127.0.0.1:5432->5432/tcp

services:

 postgres-srv:
  image: postgres:9.5.5
  volumes:
   - postgres-srv_volume:/var/lib/postgresql/data
  ports:
   - "127.0.0.1:5432:5432"

volumes:
 postgres-srv_volume:

但是当我尝试使用 firewalld 将外部流量转发给它时,连接被拒绝。 到目前为止我的防火墙配置:

     public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports:
  protocols: 
  masquerade: yes
  forward-ports: port=5432:proto=tcp:toport=5432:toaddr=127.0.0.1
  source-ports: 
  icmp-blocks: 
  rich rules: 
        rule family="ipv4" source address="192.168.1.1/32" port port="5432" protocol="tcp" accept

请问我做错了什么?

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • 谢谢。并感谢您的反对。这将确保我总是想使用这个网站,我敢肯定。

标签: linux docker docker-compose centos7


【解决方案1】:

我不确定这绝对是正确的做法,但为了将端口转发到容器,感谢此处的信息:Assign Static IP to Docker Container, 我做了以下事情:

  1. 我通过在 docker-compose 文件中设置这些来强制容器具有静态地址(强制它在 localhost 上侦听连接现在似乎是多余的):

    version: '2'
    
    services:
    
     postgres-srv:
      image: postgres:9.5.5
      volumes:
       - postgres-srv_volume:/var/lib/postgresql/data
      networks:
       static-network:
         ipv4_address: 172.18.0.2
      ports:
       - "127.0.0.1:5432:5432"
    
    volumes:
     postgres-srv_volume:
    
    networks:
      static-network:
        ipam:
         config:
          - subnet: 172.18.0.0/16
            ip_range: 172.18.0.0/16
    

2 然后我像这样在防火墙中进行端口转发:

    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: eth0
      sources: 
      services: dhcpv6-client ssh
      ports: 
      protocols: 
      masquerade: yes
      forward-ports: 
      source-ports: 
      icmp-blocks: 
      rich rules: 
            rule family="ipv4" source address="192.168.0.1/24" forward-port port="5432" protocol="tcp" to-port="5432" to-addr="172.18.0.2"

现在我仍然无法让容器从外部监听 localhost,但我可以转发到静态容器 IP。 请告诉我这是否是正确的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2018-01-12
    • 2021-11-14
    相关资源
    最近更新 更多