阻止对 docker 容器的外部访问[关闭]

2023-12-02

我想阻止从外部直接访问 docker 容器。我使用 haproxy,希望只允许访问端口 80、443。

我在 iptables 中添加了以下规则。但我仍然可以通过不同的端口访问 docker 容器。

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
COMMIT

这可能是由于 DOCKER 链造成的

# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:https

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-ISOLATION  all  --  anywhere             anywhere
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (4 references)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             172.18.0.2           tcp dpt:http

Chain DOCKER-ISOLATION (1 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

我需要创建什么规则来阻止直接访问?


您可以使用以下命令,而不是使用 IP 表来执行此操作docker network create NETWORK命令创建一个网络来连接您的应用程序和代理。也不要在任何端口上公开应用程序。您应该公开的唯一容器是您的代理。然后,您可以在代理内部使用容器名称作为主机名来路由流量。同一网络上的每个容器都可以被其他容器访问。

例如如果

  • 我有容器 A,其名称为my-service以及在端口 3000 上运行的服务没有端口发布到主机
  • 容器 B 是在端口 80 上运行的代理发布到主机。我的代理可以将请求传递给http://我的服务:3000它将把流量路由到容器。
  • 如果我尝试去http://我的域名:3000这不会起作用,因为端口尚未公开,访问应用程序的唯一方法是通过端口 80 上的代理

我建议阅读https://docs.docker.com/engine/userguide/networking/work-with-networks/因为这解释了如何开始网络。

完全披露:我在我的个人 VPS 上运行这种设置,无法直接通过端口访问我的容器。使用内置的 docker 网络可能比乱搞 IP 表更好

希望这有用。

Dylan

Edit

我概括了这个过程,因为我不知道您的设置在代理、网络限制等方面的具体情况。我也没有进入具体的命令,因为上面的链接比我更好地涵盖了它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阻止对 docker 容器的外部访问[关闭] 的相关文章

随机推荐

  • ios - 以编程方式将 .m4a 转换为 .mp3 文件

    这里我有m4a格式的音频 我需要转换成mp3格式 为此 我使用的代码为 void toMp3 NSString m4aFilePath pathToSave NSString mp3FileName NSString stringWithF
  • 从我的 Android 应用程序调用 Google Pay Intent 时出现错误“您已超出银行设置的最大交易金额”

    我在 Android 应用程序中遇到 Google Pay 集成 应用内支付 问题 当我提出交易请求时 我收到错误 您已超出银行设置的最大交易金额 即使这是我的第一笔交易 当我尝试直接从 Google Pay 发送金额时 它起作用了 Thi
  • 监控和维护应用程序在光盘上的大小的解决方案

    我正在构建一个广泛使用 CoreData 的应用程序 并且我的许多模型都具有 UIImage 和 NSData 属性 用于图像和视频 由于将数据直接存储到 CoreData 中并不是一个好主意 因此我构建了一个文件管理器类 该类根据创建的上
  • RapidXML 给出空的 CDATA 节点

    我编写了下面的代码来获取 CDATA 节点值 我得到了节点的名称 但值是空白的 我将解析标志更改为 parse full 但它也不起作用 如果我从 XML 中手动删除 它会给出预期的值 但在解析之前删除它不是一个选项 代码 include
  • Promises - 在 Promise.all 中捕获所有拒绝[重复]

    这个问题在这里已经有答案了 我有这个虚拟代码 var Promise require bluebird function rej1 return new Promise reject new Error rej1 function rej2
  • Bootstrap 导航栏在滚动时折叠

    我在我的项目中使用引导灰度主题 它有一个在滚动时折叠的导航栏 或者如果我转到同一页面上的链接 download 等 问题是当我从其他页面转到锚链接时 导航栏在滚动之前不会折叠 我想解决方案是在java脚本中添加该行 但我真的不知道要添加什么
  • 如何解决OSError:[WinError 2]不可能找到指定文件:'c:\\ python39 \\ Scripts \\ chardetect.exe'

    正如标题中所述 每次我尝试通过 pip 安装某些内容时 在安装结束时都会出现错误 WARNING Failed to write executable trying to use deleteme logic Rolling back un
  • 如何获取JRadioButton的文本值

    我正在用java创建一个项目 我的程序有 80 个 JRadioButtons 我需要获取它们的文本值 现在这些单选按钮已添加到 ButtonGroup 每个单选按钮有 4 个单选按钮 我知道如何通过以下代码从单选按钮获取文本值 radio
  • 如何不屏蔽 GitHub Actions 中的输出?

    作为 GitHub Actions 中 PowerShell 脚本的一部分 我尝试输出一个 json 对象列表 以便稍后作为另一个作业的矩阵重新使用 使用以下命令我将编写输出 Write Host set output name value
  • XSLT 更改元素中的名称空间

    我正在尝试使用以下 xsl 代码更改元素属性的命名空间
  • ZendGdata框架路径设置错误

    你好 我正在使用 ZendGdata 1 12 5 框架在 youtube 上上传视频 我在我的 php 代码中使用了以下内容 path ZendGdata 1 12 5 library set include path get inclu
  • 如何使用 WS-UsernameToken 获取结果摘要?

    我有来自以下文档ONVIF 程序员指南 我目前正在尝试重现结果摘要使用指南中给出的相同条目 这是我的代码 private string GenerateHashedPassword string nonce string created s
  • Cassandra 无法在 Java 10 上启动

    我有一个全新的 Windows 10 家庭版安装 并全新安装了 JDK 10 0 1 这是我访问 JDK 下载站点时 Oracle 推荐的安装版本 我刚刚下载了 Cassandra 3 11 2 解压缩 d 它 并将 bin 目录放在我的类
  • firebase 云函数 API Google Cloud Storage 错误

    随着 Firebase Cloud Functions 的推出 我们正在考虑将当前的一些 Node js 服务器端代码迁移到云函数 我遇到的一个问题是从 GCS 存储桶下载文件到磁盘上的临时文件 然后将其作为附件通过电子邮件发送 使用 ma
  • 在初始 init“firebase”后添加/编辑 pod 文件

    因此 当我将 pod 文件安装到我的项目中时 我忘记添加到 FirebaseDatabase 中 现在我想将其添加到我该如何做 再次执行 pod init 过程会不会把事情弄乱 我的 Pod 文件照片 您应该只添加所需的新 Pod 然后运行
  • Vanilla JS 中具有 Momentum 的水平滚动

    我目前正在开发一个项目 我想要一个水平滑块 我使这个滑块可拖动 并找到了一些代码使其能够随动量滑动 我设法用鼠标滚轮进行水平滚动 但我不知道如何使其与动量效果一起工作 我能怎么做 Lorem ipsum dolor sat amet con
  • 带 Ifelse 条件的 Cbind/Rbind

    这是我正在使用的代码 x lt c Yes No No Yes Maybe y lt t 1 10 z lt t 11 20 rbind data frame ifelse x Yes y z 这会产生 X1L X12L X13L X4L
  • 提升.Interprocess notification() 性能

    我有两个进程 A 和 B 它们应该在 Windows 10 上使用 Boost Interprocess 通过共享内存快速交换数据 我的问题 之间的时间notify all 和wait 似乎很慢 通常为 15 毫秒 我最终编写了一个简单的应
  • 文字分隔符( \Q \E 块内的分隔符)

    我一直在尝试制作一些基于的功能RegEx他们中的大多数人都使用 Q and E作为一些RegEx pattern是用户输入 所以 假设我们正在使用delimiter 并想将其与 该函数将在以下行中构造一些东西 Q E 我不知道为什么 Q E
  • 阻止对 docker 容器的外部访问[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想阻止从外部直接访问 docker 容器 我使用 haproxy 希望只允许访问端口 80 443 我在 iptables 中添加了以下规则 但我仍然可以通过不同的端口访问 doc