Tag: iptables

Docker容器在本地主机上可见,但不能从具有自定义bridge0的其他主机上看到

新的Docker 1.7.0在RHEL 7.1上安装 所以,我安装了最新的Docker 1.7.0,我无法让这个新服务器服务于外部世界。 [root@pppdc9prd8ok eea.docker.jenkins]# uname -a Linux pppdc9prd8ok 3.10.0-229.4.2.el7.x86_64 #1 SMP Fri Apr 24 15:26:38 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux [root@pppdc9prd8ok eea.docker.jenkins]# docker –version Docker version 1.7.0, build 0baf609 [root@pppdc9prd8ok eea.docker.jenkins]# docker info Containers: 10 Images: 110 Storage Driver: devicemapper Pool Name: docker-253:0-4374531-pool Pool Blocksize: 65.54 kB Backing Filesystem: extfs Data […]

禁用从Docker容器到主机的SSH访问

我正在运行一个CoreOS来托pipe一些Docker容器,并且我想阻止从容器到CoreOS主机的SSH访问,我猜这将是一个合理的安全问题。 我试图使用/etc/hosts.deny文件或使用iptables来限制这个访问。 这种方法的问题是,他们都需要专门定义容器的IP范围,我无法find一个有保证的方式来自动在所有新的主机上指定它。 正如docker文档所描述的,桥接接口的默认networking定义是: $ sudo docker network inspect bridge [ { "name": "bridge", "id": "7fca4eb8c647e57e9d46c32714271e0c3f8bf8d17d346629e2820547b2d90039", "driver": "bridge", "containers": { "bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727": { "endpoint": "e0ac95934f803d7e36384a2029b8d1eeb56cb88727aa2e8b7edfeebaa6dfd758", "mac_address": "02:42:ac:11:00:03", "ipv4_address": "172.17.0.3/16", "ipv6_address": "" }, "f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27": { "endpoint": "31de280881d2a774345bbfb1594159ade4ae4024ebfb1320cb74a30225f6a8ae", "mac_address": "02:42:ac:11:00:02", "ipv4_address": "172.17.0.2/16", "ipv6_address": "" } } } ] Docker文档还说,它在docker0接口可用时使用172.17.42.1/16 (也可以使用-b选项进行configuration)。 但是我看到一些容器拥有自己的IP地址,比如10.1.41.2并且使用硬编码的 IP范围来阻塞它们变得困难。 我知道–icc选项会影响守护进程间的容器通信,并且希望find一个像这样干净的方法,并限制从容器到主机的SSH访问。 谢谢。

docker覆盖networking阻止IP转发

在Docker中使用Overlaynetworking时,docker引擎负责处理相关的iptables规则。 我有5个容器。 其中4个是应用程序,其中1个是“网关”,我希望所有stream量都通过这个网关(Ip_forwarding容器) 与 – 链接这工作完美,但与覆盖networking,这似乎是由于iptables规则阻止。 任何援助将不胜感激推荐的方法来解决这个问题。

不能将服务器上的Docker应用程序暴露给外部IP

我试图让这个CNIL / PIA应用程序在我的服务器上使用docker容器。 但是,我似乎无法正确绑定我的机器和我的容器的端口。 我的Dockerfile是 from node maintainer Théophile Dano <theophile@fifty-five.com> run mkdir -p /app run chown node:node /app workdir /app copy . /app user node expose 4200 run npm i cmd ["./node_modules/.bin/ng", "server"] 而启动我使用的容器的命令是: docker run -i -t -P MY_SERVER_IP::4200 cnil-pia 在我的IP表中( sudo iptables -t nat -L -n ): Chain DOCKER (2 references) target […]

来自Docker容器的出站Telnet连接被拒绝,但在主机上正常工作

我在通过Tutum to AWS托pipe的节点上遇到networking问题。 我进入了节点并跑了 telnet localhost 3000 而且效果很好。 当我将docker exec -it <containerid> bash放到我的一个容器中并运行上面的命令时,我得到这个错误: telnet: Unable to connect to remote host: Connection refused 谁能阐明为什么出站连接从容器到主机是不允许的?

docker集装箱中的基于端口的路由

我有一个docker应用程序容器( node:latest形象),它有两个networking接口: eth1:这是一个默认的接口,是来自服务的所有容器之间的桥接networking。 (由pipeworkpipe理,但我不能在这个层面上改变任何东西) eth0:这是一个普通的docker0接口,除eth1以外的所有地方都可以访问。 这里是默认的路由表: Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.25.88.254 0.0.0.0 UG 0 0 0 eth1 10.25.88.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 正如你所看到的,有必要将eth1作为默认接口,但是这会导致我一个问题:我的应用程序需要ssh访问一些其他远程服务器,这些服务器不能通过eth1访问,但eth0有访问权限。 所以我需要改变这个请求的路线。 我的第一个解决scheme是: route add -net 10.20.33.0/24 gw 172.17.42.1 这种方法工作正常,我将获得访问范围10.20.33.0/24地址。 但它会阻止从主机访问应用程序本身。 应用程序在端口80上运行,添加此路由后,来自10.20.33.0/24范围内的主机的所有请求10.20.33.0/24将失败。 所以我想这条路线是如此全球化,并影响所有input/输出请求的IP范围。 […]

无法从外部机器访问公开暴露的Docker容器端口,只能从本地主机访问?

我在我的Ubuntu Linux 14.04机器上运行了一个Docker容器,它公开地公开了一个端口: docker run –name spacyapi -d -p 127.0.0.1:7091:7091 jgontrum/spacyapi:en 我可以连接并执行对容器中的服务器的命令,而本地机器没有问题。 例如: curl http://localhost:7091/api –header 'content-type: application/json' –data '{"text": "This is a test."}' -X POST 该命令忠实执行。 但是,如果我从外部机器尝试相同的CURL命令,则会出现“连接被拒绝”错误: curl http://192.5.169.50:5000/api –header 'content-type: application/json' –data '{"text": "This is a test."}' -X POST curl: (7) Failed to connect to 192.5.169.50 port 7091: Connection refused 其中192.5.169.50是运行Docker容器的IP地址。 我不认为我需要任何iptables规则,因为我不需要设置在同一个框上运行的Node.JS服务器。 我的本地networking上的所有其他计算机都可以访问Node.JS服务器。 […]

如何configurationdocker的iptables规则DOCKER-USER限制输出?

我正在运行一个容器,我只想让它访问特定的ips。 换句话说,我想拒绝大部分目的地ips。 我已经尝试了以下内容: iptables -I DOCKER-USER -o custom-interface ! -d xxx.xxx.xxx.xxx -j REJECT 但它拒绝所有的连接,我不能ping xxx.xxx.xxx.xxx 。 这真是奇怪,我想我只是通过自定义接口阻止输出数据包,不会达到xxx.xxx.xxx.xxx。 所以所有到达xxx.xxx.xxx.xxx的数据包和输出数据包都将被接受。 但看来我错了。 为什么? 任何帮助是欣赏。 编辑 接受的答案显示如何configuration传入限制,然后我学会了如何configuration传出限制。 创build一个BEFORE_DOCKER表 iptables -N BEFORE_DOCKER 默认 iptables -I BEFORE_DOCKER -j DROP Docker容器公共pipe理访问(在这里插入所有允许的IP) iptables -I BEFORE_DOCKER -o eth0 -d 172.114.1.23 -j ACCEPT iptables -I BEFORE_DOCKER -o eth0 -d 10.129.172.12 -j ACCEPT Docker容器限制局域网访问(在这里插入您的局域网IP范围或多个IP) iptables -I […]

iptablesredirect到docker容器中的不同host / tproxy

我开始怀疑这是不是可以做iptables,但我想透明地将httpsredirect到redsocks(proxyish)服务器。 设置是这样的。 我在boot2docker中,并且想要使用需要validation的上游代理。 我在一个docker集装箱里运行CNTLM,还有一个munkyboy / redsocks的图像。 Redsocks将一切交给cntlm,然后再上游。 然后我用了一条线 iptables -t nat -A PREROUTING -p tcp '!' -s $CNTLM –dport 443 -j DNAT –to $REDSOCKS:12346 这对任何正在NAT的任何东西都很有用。 它经历了redsocks和cntlm,然后是互联网,它不知道它是使用代理。 然而,因为它是prerouting表,这只适用于主机以外的其他东西。 我希望它也能在主机上工作。 到处谈论使用输出表,就像 iptables -t nat -A OUTPUT -p tcp –dport 443 -j DNAT –to $REDSOCKS:12346 这似乎是奇怪的https。 看着日志,redsocks获取连接,将它传递给CNTLM,但是然后cntlm打印这个 cntlm[1]: 172.17.0.9 CONNECT 172.17.0.9:12346 作为curl https://google.com的结果 我认为DNAT正在改变数据包的IP dst? 做DNAT,我认为https通过代理使用。 有趣的是,它在PREROUTING表和OUTPUT表中的工作方式不同。 我也尝试了使用TPROXY的MANGLE表,但是这只在PREROUTING上才可用。 […]

Docker隐藏调用容器的IP

免责声明: 我是一个networking新手。 原谅我,如果我不使用适当的词汇来形容我的问题。 语境: 所以我有几个在CoreOS上运行的应用程序容器(Docker)。 每个容器必须具有不同的IAMangular色。 由于在同一个主机上可能会有N个不同的IAMangular色运行,因此使用EC2实例元数据( http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2- instance-metadata.html )来检索实例凭证。 每个容器都需要一组不同的凭证(因为每个容器都有不同的angular色)。 为了解决这个问题,我偶然发现这个项目https://github.com/dump247/docker-ec2-metadata这是一个Go代理拦截(使用iptables规则)调用http://169.254.169.254/latest / meta-data / iam / security-credentials /,并根据调用容器的IAMangular色提供适当的凭据。 iptables规则(请参阅https://github.com/dump247/docker-ec2-metadata/blob/master/README.md )重新路由呼叫是: # Get the host IP address. You can use a different mechanism if you wish. # Note that IP can not be 127.0.0.1 because DNAT for loopback is not possible. PROXY_IP=$(ifconfig eth0 | grep […]