MENU

docker无视防火墙问题总结

前言

之前一直使用docker来部署项目,不过发现直接使用-p映射端口则出现问题,如nginx映射80端,一般都会写-p 80:80,这样导致直接透过系统本机的防火墙,不用开端口可以直接外网访问80端。之前一直使用阿里云、腾讯云机器,可以给ECS实例设置安全组方式限制外网端口,不过针对没有这种设置操作的服务器实例之前一直没有认真研究,现在做一下这次折腾总结记录。

解决方法

  • 使用host网络,docker默认是使用bridge桥接网络方式。
  • 使用expose方式暴露端口在本机,然后采用nginx、haproxy等代理工具做一次转发
  • 映射端口改用-p 127.0.0.1:8080:8080,后在本机nginx代理工具映射公网访问服务
  • 禁用docker的iptables规则(下面详细介绍该方法)

禁用iptables规则详细说明(centos7系统下)

  • docker配置修改,禁止iptables规则

    # 编辑/lib/systemd/system/docker.service文件
    
    # 在ExecStart后添加 --iptables=false 
    
  • 重载docker配置&重启docker服务

    systemctl daemon-reload
    systemctl restart docker
    

    完成上述两步以及可以采用系统firewall控制端口访问,但会出现docker容器间无法访问,而且容器内也无法访问外部网络

  • 使用类似NAT网络方式使得docker可以访问外部网络

    firewall-cmd --permanent --zone=public --add-masquerade
    

谈谈使用该方法解决docker无视系统防火墙问题所带来的缺点:容器内无法获取得到客户端的真实IP,由于是类似NAT网络,常常nginx日志上记录的是docker0网络的子网IP,对于一些业务无法获取真实IP可能不能容忍,看个人的取舍吧。

参考文章
无视系统防火墙的docker

标签: Linux, docker
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码