关于我
~一个热爱火影的业余小提琴玩家~
Joynaruto

Docker网络之防火墙

前言

最近在各种Docker容器中玩耍的非常欢乐,偶然发现ufwDocker容器均没有生效,都在法外之地玩儿着呢,得把他们抓回来 :|

启用ufw

启用ufw这块参见我这篇

修改几个配置

#修改ufw默认的配置
nano /etc/default/ufw
#把DEFAULT_FORWARD_POLICY修改成下面这样
DEFAULT_FORWARD_POLICY="ACCEPT"

#修改docker.service配置,防止它修改防火墙规则
##docker.service可能在以下3个路径,选任一修改即可##
/usr/lib/systemd/system/docker.service
/etc/systemd/system/multi-user.target.wants/
/lib/systemd/system/docker.service
#修改文件
nano /usr/lib/systemd/system/docker.service
#找到 ExecStart 字段
#默认为:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
改为
ExecStart=/usr/bin/dockerd --iptables=false -H fd:// --containerd=/run/containerd/containerd.sock

#修改docker的默认配置。注释DOCKER_OPTS这行,在参数后添加添加--iptables=false
nano /etc/default/docker
#修改文件
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --iptables=false"

#修改/etc/ufw/before.rules以使容器内部可以访问外网,否则任何容器内的联网操作都会被禁止
nano /etc/ufw/before.rules
#在`*filter`前面添加下面内容,根据自己具体网段往后自行添加
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -s 172.17.0.0/16 -j MASQUERADE
-A POSTROUTING ! -s 172.18.0.0/16 -j MASQUERADE
-A POSTROUTING ! -s 172.xx.0.0/16 -j MASQUERADE
COMMIT

#重启docker
systemctl daemon-reload && systemctl restart docker

#若不生效重启服务器

测试

经过上述步骤,使用tcping来测试具体端口的开放和关闭之后,发现ufw已经完全接管Docker网络且Docker容器内部也能顺利访问外网。

 

参考文章:
ubuntu下面ufw管住docker的端口
linux防火墙firewall无法禁用docker端口映射问题

发表回复

textsms
account_circle
email

Joynaruto

Docker网络之防火墙
前言 最近在各种Docker容器中玩耍的非常欢乐,偶然发现ufw对Docker容器均没有生效,都在法外之地玩儿着呢,得把他们抓回来 :| 启用ufw 启用ufw这块参见我这篇 修改几个配置 #修改ufw…
扫描二维码继续阅读
2022-05-20