AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 47079
In Process
Dan Carley
Dan Carley
Asked: 2009-07-29 08:36:38 +0800 CST2009-07-29 08:36:38 +0800 CST 2009-07-29 08:36:38 +0800 CST

Puppet 安全和网络拓扑

  • 772

背景:

我终于抽出一些时间加入 21 世纪,看看 Puppet。

就目前而言,我们在办公室内部保存的存储库中对所有服务器配置进行版本控制。当需要进行更新时,更改会重新检入存储库并手动推送到有问题的机器上。这通常意味着 SFTP'ing 到远程机器,然后从 shell 将文件移动到适当的位置,并具有相关权限。

因此,我希望 Puppet 能够成为我们现有产品的简单而惊人的扩展。

现在我考虑我们目前必须相当安全的过程。假设我们的内部网络总是比我们数据中心的公共网络相对更安全。

  • 这个过程总是一种方式。变化从安全环境到不安全环境,绝不会反过来。

  • 主存储在最安全的地方。通过窃取配置或发送恶意修改的危害风险大大降低。

问题:

根据我对 Puppet 服务器/客户端模型的理解,客户端会直接从服务器轮询和拉取更新。流量是 SSL 包装的,因此不能被拦截或欺骗。但这与我们目前所做的不同,因为 Puppet 服务器需要托管在公共位置。可以集中处理,也可以为我们维护的每个数据中心站点提供一个。

所以我想知道:

  • 我是否对从推到拉的变化感到不必要的偏执?

  • 我是否对将所有这些信息集中存储在公共网络上感到不必要的偏执?

  • 其他人如何维护多个网络 - 每个站点的单独服务器?


2009 年 7 月 30 日更新:

我想我的另一个大问题是必须信任一台机器。puppetmaster(s) 将被防火墙、安全等。但即便如此,任何具有监听服务的公共机器都有一定规模的攻击面。

据推测,如果主人有权更新任何一个 puppet 客户端上的任何文件,那么它的妥协最终会导致它的所有客户端的妥协。可以说是“王国的国王”。

  • 这个假设正确吗?

  • 有什么办法可以缓解吗?

networking security puppet
  • 7 7 个回答
  • 2949 Views

7 个回答

  • Voted
  1. Alex F
    2009-12-10T22:59:16+08:002009-12-10T22:59:16+08:00

    因为我有时将密码存储在我的模块中的变量中,为了能够部署应用程序而不必手动完成配置,这意味着我不能体面地将我的 puppet repo 放在公共服务器上。这样做意味着攻击 puppetmaster 将允许获取我们所有服务器上所有不同应用程序的一些应用程序或数据库密码。

    所以我的 puppetmaster 在我们的办公室专用网络中,我不在服务器上运行 puppetd ​​守护程序。当我需要部署时,我使用 ssh 从私有网络到服务器,创建隧道并远程调用 puppetd。
    诀窍不是设置远程隧道和 puppet 客户端连接到 puppetmaster,而是设置一个接受http 连接并且可以访问专用网络上的 puppetmaster 服务器的代理。否则 puppet 会因为主机名与证书冲突而拒绝拉取

    # From a machine inside privatenet.net :
    ssh -R 3128:httpconnectproxy.privatenet.net:3128 \
        -t remoteclient.publicnetwork.net \
        sudo /usr/sbin/puppetd --server puppetmaster.privatenet.net \
        --http_proxy_host localhost --http_proxy_port 3128 \
        --waitforcert 60 --test –-verbose
    

    对我有用,希望对你有帮助

    • 10
  2. David Pashley
    2009-07-29T09:37:52+08:002009-07-29T09:37:52+08:00

    我们有两个站点,我们的办公室和我们的 colo。每个站点都有自己的 puppetmaster。我们建立了一个 svn 存储库,其结构如下:

    root/office
    root/office/manifests/site.pp
    root/office/modules
    root/colo
    root/colo/manifests/site.pp
    root/colo/modules
    root/modules
    

    每个站点下的模块目录是一个 svn:externals 目录,回到顶层模块目录。这意味着它们共享完全相同的模块目录。然后,我们确保我们编写的绝大多数类都在模块目录下并被两个站点使用。这有一个很好的优势,即迫使我们进行一般性思考,而不是将课程与特定站点联系起来。

    至于安全性,我们将 puppetmaster(以及我们网络的其余部分)托管在防火墙后面,因此我们并不担心集中存储配置。puppetmaster 只会将配置发送到它信任的主机。显然,您需要保持该服务器的安全。

    • 4
  3. Paul Lathrop
    2009-07-29T09:33:32+08:002009-07-29T09:33:32+08:00

    我无法判断您的偏执狂有多么必要,这在很大程度上取决于您的环境。但是,我可以自信地说,您现有配置的两个主要点仍然可以适用。无论您的 puppetmaster 位于何处,您都可以确保您的更改从一个安全的环境(您办公室的存储库)转移到不太安全的环境。您将过程从 SFTP'ing 更改为一堆服务器,然后手动将文件放置到 SFTP'ing 到您的 puppetmaster 并让 Puppet 分发文件并将它们放在正确的位置。您的主存储仍然是存储库,并且您的风险得到了缓解。

    我不相信推或拉本质上比其他模型更安全。Puppet 在保护传输中的配置以及验证客户端和服务器以确保双向信任方面做得很好。

    至于多个网络 - 我们使用中央“主”puppetmaster 处理它,每个位置的卫星 puppetmaster 充当中央主控的客户端。

    • 2
  4. Mark Carey
    2009-12-10T23:20:49+08:002009-12-10T23:20:49+08:00

    一种设计方法是在每个系统站点本地设置一个 puppetmaster,并使用部署工具将更改推送到 puppetmaster。(使用带有 git hooks 的 git 也可以)。

    这将保留您对公共网络上侦听服务的担忧,因为 puppet 网络流量只会是内部的。

    也可以将清单推送到每个服务器,让 puppet 客户端解析清单并应用相关配置。

    • 1
  5. neoice
    2009-10-04T05:34:20+08:002009-10-04T05:34:20+08:00

    尽管您说“外部”,但我真的怀疑任意人需要连接到您的 puppetmaster。您可以随时将 VPN 加入其中。我的一个朋友曾经问我“如果连接是安全的,你是否需要担心协议的安全性?” 虽然我不同意这种态度,但额外的一层永远不会受到伤害,而且肯定会对我的个人偏执产生奇迹。此外,隧道隧道很有趣。

    • 0
  6. SAnnukka
    2010-01-31T00:52:44+08:002010-01-31T00:52:44+08:00

    Mark Burgess,cfengine 的作者和大学教授(这个木偶似乎应归功于它的传统)写了很多关于推和拉的文章。他声称拉动本质上更安全。如果您查看 cfengine 网站,他们在 17 年中只发生过 1 起网络安全事件。Burgess 声称这是因为拉式设计。我认为单点妥协是不可避免的。到那时,我会更关心攻击路线。

    • 0
  7. Hamish Downer
    2012-05-26T05:44:32+08:002012-05-26T05:44:32+08:00

    如果需要,您可以在没有中央主机的情况下运行 puppet。我见过的一种方法是使用 git 存储库,并且只有当标签由 gpg 密钥的预设列表之一签名时才会合并和部署更新的脚本。人们甚至想出了如何获取存储的配置(例如,用于从另一台服务器上处理的资源在中央服务器上设置 nagios 监控)。

    因此,如果中央 git 服务器受到威胁,其他服务器将不再应用任何更新。gpg 密钥将在系统管理员笔记本电脑或其他东西上,以及某种撤销密钥的方式。

    在http://current.workingdirectory.net/posts/2011/puppet-without-masters/阅读更多信息

    • 0

相关问题

  • 如何在 Windows Server PPTP VPN 中自动为客户端分配路由?

  • 为什么我的电脑休眠时 VPN 连接会中断?[关闭]

  • 有什么软件可以模拟局域网?

  • 保护新的 Ubuntu 服务器 [关闭]

  • 带宽利用工具?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve