ufw-docker
ufw-docker copied to clipboard
如何禁止局域网访问?
你好,我有一些问题希望得到帮助。
我有这样一些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)全部只能在本机上访问,应该如何配置?
以下为只启用ufw,未使用ufw-docker的情况下。
我发现使用ufw allow 27017
,ufw allow 27018
,ufw 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三个端口同样的效果。