我有一个 Docker 容器需要访问主机上的某些端口,但我只想限制对这些端口的访问。这是我用来运行容器的命令:
docker run -it --network test -p 2020:22 --name my-container 229da73a2adb
为了限制对主机端口之一的访问,比如 3030,我使用以下 iptables 规则:
iptables -A INPUT -i br-68c6feca2ecb -p tcp --dport 3030 -j ACCEPT
iptables -A INPUT -p tcp --dport 3030 -j DROP
此外,我想防止容器和主机之间交换任何其他流量。我通过以下规则实现这一点:
iptables -A INPUT -i br-68c6feca2ecb -j DROP
但是,我还想让容器接受来自外部网络的 SSH 流量,但不允许任何其他流量从容器发送到互联网。有没有办法做到这一点?
如何将网络流量限制在所需的端口?
我不能使用 --internal 标志,因为我仍然需要发布端口。
我找到了答案。使用以下命令关闭所有容器的流量,只为它们播放 ssh:
iptables -A DOCKER-USER -p tcp --dport ssh -j ACCEPT
iptables -A DOCKER-USER -p tcp --sport ssh -j ACCEPT
iptables -A DOCKER-USER -d 192.168.0.0/16 -j DROP