解决ufw无法拦截docker容器映射的端口

在某项目中由于使用的是基于Ubuntu类似的发行版无法像Centos7系统一样使用Firewalld拦截某些由Docker/K8s容器创建的高危端口。


由于无法复现当时项目使用的系统,只能在Ubuntu 22.04.2 LTS中进行测试了。
这次在安装k8s前我已经开启了ufw,并且将集群的IP添加运行的规则。

一、修改ufw默认的配置

修改/etc/default/ufw,把DEFAULT_FORWARD_POLICY修改为下面

DEFAULT_FORWARD_POLICY="ACCEPT"

二、修改docker默认的配置
修改/etc/default/docker里面的DOCKER_OPTS

DOCKER_OPTS="--iptables=false

按需修改,因为里面可能有个别不由于的配置项。

三、修改/etc/ufw/before.rules文件
修改/etc/ufw/before.rules文件,在*filter前面添加如下内容

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
COMMIT

四、修改daemon.json文件
由于我安装docker时配置了daemon.json文件,使用这里追加下面的参数

"iptables": false

五、重启Docker服务

service docker restart

这样只能手动按需开发对应的端口了。
配置"iptables": false后再初始化k8s会报错。。。。。。

ChiuYut

2023年04月26日

发布者

ChiuYut

咦?我是谁?这是什么地方? Ya ha!我是ChiuYut!这里是我的小破站!