我正在使用 docker-compose 来部署我的应用程序。
我想从我的开发机器访问部署数据库。
有没有办法通过源 IP 地址限制来公开端口?就像高级防火墙端口转发中发生的情况一样。我的意思是,我想将我的数据库端口映射到类似的东西0.0.0.0:1234
,并且只有我的 IP 可以连接到它。
目前,我公开了端口127.0.0.1:1234
并使用 ssh 端口映射来访问它,但是该服务器上所有正在运行的应用程序以及任何有权访问该服务器的人都可以连接到该服务器。
db:
#....
ports:
- "127.0.0.1:1234:5432"
#....
ssh -L 1234:127.0.0.1:1234 [email protected]
答案1
首先,我不依赖网络策略来保护应用程序,因为许多攻击者一旦找到一个漏洞就可以轻易地转移攻击方向。相反,每个应用程序都应该有自己的身份验证要求、加密通信等,以消除谁可以访问哪个端口的担忧。
话虽如此,要为 docker 发布的端口配置防火墙,您需要 DOCKER-USER 表和 conntrack 来识别主机上的原始端口(而不是容器的端口)。并且您从最后到第一插入规则,因为其中已经有一个默认规则来接受所有内容。例如,允许端口 5000
# drop external requests by default
iptables -I DOCKER-USER -j DROP
# allow existing requests
iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
# allow inter-container requests
iptables -I DOCKER-USER -i br+ -j RETURN
# allow request from docker to external
iptables -I DOCKER-USER -i docker+ -j RETURN
# allow anything to host port 5000
iptables -I DOCKER-USER -p tcp -m conntrack --ctorigdstport 5000 -j RETURN