切换语言为:繁体
Linux防火墙firewalld不生效,无法拦截Docker映射端口

Linux防火墙firewalld不生效,无法拦截Docker映射端口

  • 爱糖宝
  • 2024-10-22
  • 2054
  • 0
  • 0

背景

今天出现了一个奇怪的现象,centos服务器上的防火墙(firewall)没有开放8103端口,但是依然可以访问

服务器开放的端口如下:

Linux防火墙firewalld不生效,无法拦截Docker映射端口

可以看出并没有开放8103端口

开放的服务如下:

Linux防火墙firewalld不生效,无法拦截Docker映射端口

失败的原因,如下:

docker run -p 启动的时候会往iptables里面添加规则,firewall底层是基于iptables的,所以-p参数启动等于在防火墙上打了个洞

因为我是在docker的宿主机上控制端口访问,所以简单粗暴直接让docker不使用iptables,操作如下:

vi /usr/lib/systemd/system/docker.service

在文件中添加 --iptables=false

Linux防火墙firewalld不生效,无法拦截Docker映射端口

systemctl daemon-reload
systemctl restart docker

重启 Docker 搞定!!!

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

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

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

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

0条评论

您的电子邮件等信息不会被公开,以下所有项均必填

OK! You can skip this field.