在Docker容器中启动了一个Apache服务器,它获取以下IP地址172.21.0.3 网关IP和prefixlen如下172.21.0.1/16,并且与此IP相连的虚拟接口是br-47b7ac758218。
容器在端口80上侦听,它也不是已发布的端口,只是配置为公开端口。
das@my-machine:~/go/src/secure$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1a75fb4be73 test_httpserver "bash -c '/etc/init.…" 18 hours ago Up 41 minutes 80/tcp test_httpserver_1
现在,用例是停止Docker主机的任何命令或程序以连接到http_server runnning conatiner。运行docker的主机具有以下IP 10.223.97.3/24
添加了以下IPtable条目以停止docker主机连接到http服务器,例如wget http://172.21.0.3/应该无法连接。 下面是基于http服务器的容器的虚拟网关接口。
`
das @ das-All-Series:〜/ go / src / ElephantTrunkArch / docker_setup $ ifconfig br-47b7ac758218
br-47b7ac758218链接encap:以太网HWaddr 02:42:67:e3:1c:1a
inet地址:172.21.0.1广播:172.21.255.255掩码:255.255.0.0
inet6 addr:fe80 :: 42:67ff:fee3:1c1a / 64范围:链接
向上广播运行多播MTU:1500公制:1
` 搜索并参考了Docker文档,但不幸的是,该解决方案均无效。
以下IP表规则被应用,但是它们都不起作用。
Any input packet coming to gateway interface with source IP range of docker host should be dropped.
sudo iptables -I DOCKER-USER -s 10.223.97.0/24 -i br-47b7ac758218 -j DROP
这是码头工人社区的建议,但没有起作用
`
sudo iptables -I DOCKER-USER -s 10.223.97.0/24 -i ext_if -j DROP
Tried this thinking that the packet might be referded as a forward pcaket as it starts from host machine and get forwarded to virtual bridge in IP layer, hence added a rule to drop all forward packet from 10.223.97.0/24
-前进! -s 10.224.97.0/24 -o br-47b7ac758218 -j DROP
-前进! -s 10.224.97.0/24 -i br-47b7ac758218 -j DROP
` 这也行不通。来自docker host的wget命令是打包的,可从apache服务器获取index.html文件
` $ wget http://172.21.0.3/ --2018-11-20 22:27:32-- http://172.21.0.3/ 正在连接至172.21.0.3:80...。 HTTP请求已发送,正在等待响应... 200 OK 长度:11321(11K)[text / html] 保存到:“ index.html.8”
index.html.8 100%[======================================= ================================================== =======================>] 11.06K --.- KB / s in 0s
2018-11-20 22:27:32(278 MB / s)-保存的'index.html.8'[11321/11321]
$ `