通过mitmproxy运行docker容器

时间:2015-07-07 14:49:19

标签: security docker gateway mitmproxy

我正在尝试通过在另一个docker容器中运行的mitmproxy来路由docker容器的所有流量。为了使mitmproxy起作用,我必须更改原始docker容器的网关IP。

Here is an example of what I want to do,但我想将其限制在docker个容器内。

有关我如何能够做到这一点的任何想法?另外,我想避免以特权模式运行两个docker容器中的任何一个。

1 个答案:

答案 0 :(得分:2)

授予容器的默认功能集不允许容器修改网络设置。通过在特权模式下运行,您可以向容器授予所有功能 - 但是还可以根据需要授予单个功能。在这种情况下,您需要的名为CAP_NET_ADMIN(此处为完整列表:http://man7.org/linux/man-pages/man7/capabilities.7.html),因此您可以将--cap-add NET_ADMIN添加到docker run命令。

确保在启动两个容器时使用该选项,因为它们都需要进行一些网络调整才能启用透明数据包拦截。

在"代理"容器,根据mitmproxy透明模式指令配置iptables预路由NAT规则,然后启动mitmproxy(使用-T标志启用透明模式)。我使用一个小的启动脚本作为代理映像的入口点,因为网络设置更改仅在容器运行时发生,无法在Dockerfile中指定或以其他方式保留。

在"客户"容器,只需使用ip route命令将默认网关更改为docker网桥上代理容器的IP地址。如果这是您要定期重复的设置,请考虑在客户端映像上使用入口点脚本,该容器将在容器启动时自动为您设置此脚本。容器链接使这更容易:您可以启动代理容器,并在启动客户端容器时将其链接。然后,客户端入口点脚本可以通过环境变量访问代理容器的IP。

顺便说一下,如果您可以在非透明模式下使用mitmproxy(明确配置客户端使用HTTP代理),我强烈推荐它。设置起来不那么令人头疼。

祝你好运,玩得开心!