我可以在 Linux 中锁定对 TCP 端口的访问吗

我可以在 Linux 中锁定对 TCP 端口的访问吗

我正在尝试保护单节点 Elasticsearch 机器的安全。基本上,我想将 Elasticsearch 放在反向代理 (nginx) 后面,并确保任何用户或进程与 Elasticsearch 通信的唯一方式是通过代理。

如果 Elaticsearch 支持在 unix 套接字上监听,那么这将是微不足道的。我只需在套接字文件上设置适当的权限即可完成。但是由于事实并非如此,我只能监听 TCP 端口。

我读过一些关于网络命名空间看起来他们可以工作,但我对他们的经验为零。

有没有一种简单、安全的方法来确保机器上唯一可以与 Elasticsearch 通信的进程/用户是 nginx?

答案1

为了防止本地非 root 用户的攻击,我确实会使用网络命名空间。

这可能是最简单的解决方案,因为一般来说,网络内容与用户/组管理分离,并且虽然可以使用 来混合两者iptables,但它增加了开销。

网络命名空间仅依赖于这样一个事实:只有 root 才能将进程移入或移出命名空间。

所以你需要一个类似于 (ns = 命名空间) 的设置

main ns ---- nginx ns ---- elasticsearch ns

其中连接是通过虚拟以太网 (veth) 对及其自己的 LAN 网段实现的。这意味着主命名空间中的每个进程只能访问 nginx 命名空间,而无法直接访问 elasticsearch 命名空间(除非您能够在此命名空间中启动进程)。

您需要了解网络基础知识(LAN 网段、网络掩码、路由与默认路由)。ip netns ...是用于创建和管理网络空间以及在命名空间中启动进程的命令行工具。ip link ...是创建 veth-pairs 的命令行工具。

我建议在每个命名空间中启动一个xterm,以便您可以查看和修改网络配置。一旦一切正常,只需编写脚本即可。

您需要稍微尝试一下,但这并不难。我想不出更简单的方法来做到这一点。

编辑

要开始使用命名空间,请尝试以下脚本这个答案,或者看看这个问题

我不确定你被困在哪里。网络命名空间。将每个命名空间视为自己的联网虚拟计算机,它恰好与物理计算机的其余部分共享文件系统和其他内容。因此,处理名称空间与连接 LAN 中的计算机相同。一个重要的工具是虚拟以太网对,您可以将其视为连接两个网络命名空间的虚拟 LAN 电缆。

相关内容