单个目录/文件同时由两个单独的 samba 守护进程提供服务是否安全?

单个目录/文件同时由两个单独的 samba 守护进程提供服务是否安全?

情况是这样的:

  • 我有一台 Debian 服务器,它既是小型办公室的 Web/邮件服务器,也是 Internet 网关。所有外部可用服务都在 OpenVZ 虚拟环境中运行。
  • 我有一个需求,需要为办公室内的员工提供对共享目录(供设计师使用)的外部访问权限。该目录必须可通过 SMB 访问,因此我设置了 OpenVPN 以通过互联网提供对 Samba 的安全访问。
  • 为了提高安全性,我不想让 OpenVPN 远程用户(将来可能会有更多)完全访问公司网络,因此我计划在一个虚拟环境中设置一个 Samba 守护进程,仅监听 OpenVPN 虚拟接口,并在物理机器上设置一个单独的 Samba 守护进程,仅监听内部网络接口。守护进程将服务于位于 VE 根树内的同一目录(物理机器的操作系统可以访问)。

主要问题是:当从内部网络和外部同时访问文件时,是否会发生冲突(文件锁定问题等)(这种情况很可能发生,因为此设置用于 Adob​​e InDesign/InCopy 协作)?如果会,在这种情况下哪种设置更好?我正在考虑的另一种选择是通过端口转发使内部 Samba 守护程序在 OpenVPN 接口上可访问。同样,我不希望 OpenVPN 客户端真正完全访问公司网络,我只希望 Samba 共享在 Internet 上工作(这是计划的工作流程所需要的)。

如果有人有类似设置的经验,我将非常感激您分享您的见解。

编辑 - 澄清:我使用 OpenVPN 和桥接 VPN(tap 接口),因为我知道这是 Samba 的正确选择(它甚至可以在路由 VPN 上运行吗?它不需要复杂的转发/路由设置吗?)然而,我想要将 VPN 与物理服务器的接口桥接,原因有 3 个:避免在打开和关闭接口时干扰公司网络;避免授予外部客户端访问整个内部网络的权限;作为一项策略规则,避免在物理机器上运行公共服务。

目前,我计划使用选项 1:

  • 选项 1:在 VE 上运行 OpenVPN 和 Samba,供外部客户端使用,在主服务器上运行第二个 Samba 实例,供员工(不需要 VPN)使用。但是我担心两个 Samba 实例会提供相同的文件并发生冲突(因此提出了最初的问题)。
  • 选项 2 是在 VE 中仅运行 OpenVPN 并将 Samba 端口转发到物理机(或 OpenVZ 术语中的硬件节点)。
  • 选项 3 是不用为这项服务使用 VE(因为它本质上是非公开的),只需在带有 tap(桥接)接口的硬件节点上运行 OpenVPN,但不是实际上是通过物理接口进行桥接,然后让单个 Samba 实例监听内部网络接口和 tap 接口(对于 VPN 客户端),而不是监听外部接口。

因此,更新后的问题是:选项 3 是否比前两个选项更不安全?如果不是,我会实施它,因为它似乎是最简单和最强大的。

抱歉,我无法用较少的语言表达:)感谢您的阅读和回答。

答案1

我只是使用防火墙来控制访问。要使它工作,您必须设置 OpenVPN 以使用 tun 接口并通过防火墙路由流量。完成此操作后,您有几个限制访问的选项。您可以使用指令为承包商分配静态 IP 地址,client-config-dir然后限制该 IP 地址可以访问的内容。如果您将静态分配的 IP 地址保存在可以使用与 OpenVPN DHCP 用户(员工)不同的 CIDR 描述的 IP 块中,那么您可以轻松编写防火墙规则以针对每种类型的用户。我倾向于选择的另一个选项是使用不同的子网在不同端口上为客户端设置 2 个不同的 OpenVPN 服务器,并使用一个用于员工访问,另一个用于承包商访问。然后,您可以根据子网对任一组应用您想要的任何限制,而无需处理单个 IP 地址。

在 SAMBA 方面,您可以简单地依靠文件上的权限来限制他看到的内容。但是如果您不想或不能将所有正常共享暴露给承包商,因为他们可能会泄露客户/项目列表等信息,那么您可以在invalid users = <username>您不希望他们看到的共享上使用选项。并使用指令仅为承包商添加共享valid users = <username>。另一个选择是使用include = /somepath/%G.smb.confinclude = /somepath/%u.smb.conf指令来执行每个主要组或每个用户的配置指令。

相关内容