ufw-docker icon indicating copy to clipboard operation
ufw-docker copied to clipboard

如何禁止局域网访问?

Open tjpgt opened this issue 3 years ago • 1 comments

你好,我有一些问题希望得到帮助。

我有这样一些docker容器跑在一台机器上:

一个nginx, 网络模式为host,端口为18443,nginx接受http请求转发到127.0.0.1:38080

三个mongodb数据库容器,网络模式为docker默认的网络(bridge),端口映射为27017->27017, 27018->27017, 27019->27017。

一些应用服务容器,使用docker stack部署,网络为docker中用户自定义的overlay driver网络,互相之间访问使用服务名称,访问数据库直接使用本机ip,其中有个api网关服务,端口映射出来,38080->38080,接受ngixn的转发。

现在我下载了脚本,启用了ufw并运行了install之后,应用服务无法访问mongodb数据库了。(后来测试,只启用ufw也会造成这种现象,而且奇怪的是局域网里其他机器能访问这台机子上的数据库,这台机子上容器里的应用却访问不到数据库)

我希望是从别的机器(包括局域网内的机器)只能访问nginx的18443端口,其他的端口(27017-27019,38080)全部只能在本机上访问,应该如何配置?

tjpgt avatar Dec 13 '21 06:12 tjpgt

以下为只启用ufw,未使用ufw-docker的情况下。

我发现使用ufw allow 27017ufw allow 27018ufw allow 27019可以使我容器中的服务可以访问数据库,然后按照https://docs.docker.com/network/iptables/#add-iptables-policies-before-dockers-rules ,往DOCKER-USER中插入规则可以限制只有本机能访问这些端口。

之后我看ufw的日志,观察到之前block的都是来自docker_gwbridge的请求,所以我试了下,使用ufw allow in on docker_gwbridge就可以达到与上面allow三个端口同样的效果。

tjpgt avatar Dec 15 '21 00:12 tjpgt