在 AWS EC2 实例上设置 docker owasp/zap 并连接到它

在 AWS EC2 实例上设置 docker owasp/zap 并连接到它

过去几天我一直为此事苦恼不已。

我有一个运行着 Ubuntu 的 EC2 实例,并且设置了我的 AWS 实例,以便允许所有访问端口 8088 和 8090 的流量进入。此链接,我认为只需使用浏览器的 GUI 就很容易了,因为我无法访问 EC2 实例上的 GUI。因此我运行此命令(来自教程):

docker run -u zap -p 8088:8088 -p 8090:8090 -i owasp/zap2docker-stable zap-webswing.sh

它启动时没有任何提示。但是当我使用端口 访问我的公共 EC2 IP 时8088,我收到一条错误消息,提示“无法访问此站点”。我已成功在不同的端口上在此 EC2 实例上设置了 jenkins,并且可以访问。因此,我不确定为什么在尝试运行 OWASP/ZAP 时无法访问此端口。

当我运行时,sudo iptables -t nat -L -n我得到以下信息:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:8088

Chain DOCKER (2 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8088 to:172.17.0.2:8088

我不擅长这种事情。。所以我不知道到底发生了什么,也不知道我需要改变什么?但是,当我转到我的公共 IP 和我指定的端口时,我是否可以启动 OWASP/ZAP 并让它工作?

答案1

抱歉提起这个老问题,但我过去在 Docker 容器中运行 ZAP 时遇到了问题(实际上是 AWS ECS)。就我而言,我并不想提前设置端口(让 Docker 专门管理端口,因为我可能正在运行超过一个在同一主机上创建一个 zap 实例 - 我们需要在 CI 环境中执行此操作,事情变得诡异的如果您将其移至 AWS ECS)。我发现 ZAP+Docker+Random Port 监听器存在两个问题:

  1. ZAP 将只监听你指定的端口,如果传入的请求是不同的端口,那么 ZAP 就会忽略该流量,结果类似于“无法访问该站点”
  2. 因此,它只会监听来自同一主机名也是如此。因此 ZAP 认为它正在监听localhost,并且它会忽略任何看似发往其他目的地的流量localhost

我认为两者其实是一样的。就我而言,我不得不欺骗才能让它工作。我必须向 zap 容器添加一个 nginx 反向代理(我使用 nginx 是因为它很轻量,而且配置起来很容易)。基本上,流程看起来像这样:

我 -> 容器中的 nginx --(将主机头重写为localhost:8080)--> ZAP 监听器

Nginx 端没有其他处理,只是“监听固定端口上的流量(Docker 管理外部的端口),重写主机头,然后localhost:8080将流量发送到localhost:8080(ZAP 正在监听的位置)。这有点黑客,但对我来说很有效。

相关内容