Cyr*_*ros 7 networking security dns internet ip
目前,我的家庭网络上运行着大量服务器。其中包括 Minecraft 服务器、Git 服务器和 Teamspeak 服务器(最后两个服务器在 Raspberry Pi 上的 docker 上运行)。
为了让我和我想与之共享服务器的人变得更容易,我决定使用免费的 DynDns 提供商 (No-Ip) 来设置 DynDns,而不考虑潜在的安全风险。
几天前,当我开始 ping 给定域名时,我就遇到了其中一个风险,它显示了我清晰的公共 IP 地址。然后我尝试使用通用的“IP 查找”网站,当然,我的公共 IP 地址可供我告诉域名的每个人(以及每个以某种方式接触到该域名的人)看到。
我当然知道这是一个巨大的安全风险,经过几天的努力寻找合适的解决方案,我现在的问题是:
如何隐藏/屏蔽我的公共 IP,同时仍然能够与朋友和 IT 同学高效共享我的服务器?
或者换句话说:我如何摆脱这种风险?
use*_*686 32
\n\n几天前,当我开始 ping 给定的域名时,我就遇到了其中一个风险,它显示了我清晰的公共 IP 地址。然后我尝试使用通用的“IP 查找”网站,当然,我的公共 IP 地址可供每个我告诉域名的人(以及每个以某种方式接触到该域名的人)看到。
\n
是的,这一直是 DNS 的工作方式(无论是 DynDNS 还是其他方式)。您的连接永远不会通过DNS;它的工作只是将您指向一个特定的 IP 地址。
\n\n\n我当然明白这是一个巨大的安全风险
\n
不,确实不是。
\n首先,正如其他人所解释的,首先需要知道 IP 地址才能联系服务器,因为互联网实际上根本无法将数据包“发送到域名” \xe2\x80\x93 它总是需要先转换为IP地址。因此,一般来说,IP 地址并不是受到严格保护的东西;而是会受到严格保护。它们更像是知识的基线水平。(在某些方面,知道域名实际上比只知道 IP 地址可以提供更多访问权限!)
\n但即使假设您的 IP 地址可能保持隐藏状态(假设连接以某种方式通过域名中继),您的服务器仍然会以完全相同的方式接受与完全相同的服务的连接,因此会受到影响面临与以前相同的风险。
\n要点是攻击不是通过 IP 地址进行某种“后门访问”;而是通过 IP 地址进行。它们是通过您向公众开放的相同服务完成的。您的服务器可以执行的所有操作均由接受连接的特定服务决定,例如您的 Minecraft 服务器。
\n最后,即使通信需要 IP 地址,不知道该地址对于攻击者来说也不是什么大障碍。大多数攻击不是来自专门针对您的人,它们来自能够扫描整个互联网以寻找某些易受攻击的服务的僵尸网络。IPv4 地址 \xe2\x80\x93 相对较少,少于 2 32 \xe2\x80\x93,只需几个小时,甚至几分钟(取决于网络连接),即可扫描所有可能的 IPv4 地址以查找特定的开放地址端口 \xe2\x80\x93,然后可能再花几个小时来探测它们是否存在某些已知漏洞。
\n这意味着,即使您将 IP 地址完全保密,几乎在您的服务器上线的同一天,各种机器人就会开始敲您的门。我将新安装的 VPS 在没有防火墙的情况下放置了一个小时,它已经记录了数千次 SSH 登录尝试,就像这样。
\n知道您的地址带来的唯一实际风险可能是成为 DDoS 目标的可能性,但如果您的目标受众是您在现实生活中认识的人,我真的不会认为这是一个很大的风险。确实存在“代理”服务,可以通过允许您通过在前面放置代理来隐藏自己的地址来缓解这种情况。最常见的是,它们用于基于 HTTP 的服务(不仅用于隐藏后端服务器,还用于在正常操作期间提供缓存) \xe2\x80\x93 您可能听说过 CDN,例如 CloudFlare \xe2\x80\x93但甚至有些专门提供游戏服务器,通常不是免费的。
\n\n\n我如何摆脱这种风险?
\n
您没有描述任何具体的风险 \xe2\x80\x93 只是重复这一点,知道 IP 地址并不是使服务器容易受到攻击的原因 \xe2\x80\x93在其上运行的接受连接的服务是什么可能(也可能不会)使其变得脆弱。
\n因此,降低实际风险的主要方法是:
\n确保服务使用强身份验证(即没有容易猜测的密码),并保持软件最新,以降低预身份验证攻击的风险。
\n使用其他方式 \xe2\x80\x93 而非基于 DNS 的 \xe2\x80\x93 来限制谁可以连接到它们。出于各种原因\xe2\x80\x93,防火墙(nftables/iptables/ufw)是很好的选择,例如确保新服务在设置之前不会公开访问,或者将服务限制为特定的客户端 IP 地址。
\n通常使用私有 VPN(OpenVPN、Tailscale 等)来限制访问,该 VPN 将提供额外的身份验证层,特别是在某些客户端具有动态 IP 地址的情况下。
\n在服务器内使用权限分离,这样如果有人闯入特定服务,他们就无法危害其他事物。以“root”身份运行尽可能少的服务;在不同的系统帐户下运行不同的服务(例如拆分“www-data”);在容器中运行东西;使用AppArmor。
\n正如阿尔宾所暗示的那样,将您的服务器与网络的其他部分隔离,这样,如果有人闯入,他们只能危害服务器,而不能危害 LAN 的其他部分。这通常意味着两个独立的子网,一个用于您的服务器(“DMZ”),另一个用于其余子网,路由器有自己的防火墙来限制流量的去向。
\n检查服务器正在做什么。即使您没有精美的监控系统,至少也要htop
时不时地运行一下;查看最新的系统日志;可能是 vnstat 或 systemd-cgls。换句话说,寻找任何异常情况(无论是您自己的服务崩溃,还是有人运行比特币矿工,或者您的硬盘即将放弃)。
您无法“隐藏”您的公共 IP 地址。公共 IP 地址的要点是公开。如果您隐藏您的 IP 地址,那么没有人能够再访问您的服务器。
知道公共地址并不会使您的服务器不安全。您还需要考虑其他多个安全概念(防火墙、更新服务器、代理等)。我建议您首先阅读如何保护公共服务器的安全。如果您对实施有具体问题,可以在此处提问。反向代理可能就是您正在寻找的。它使得“隐藏”其背后的任何基础设施(包括 IP 地址等)成为可能。但是,您仍然需要该反向代理的公共 IP 地址。因此,您要么必须为代理获得第二个公共IP,要么获得具有某种服务的代理服务器,例如通过托管在互联网上的虚拟机(我确信您可以使用各种服务)。
如果您确实需要立即上网,请设置 DMZ 并将您的公共服务器放在那里。这不会保护您的服务器,但至少您网络的其余部分不会受到损害。但以您对网络安全的假定知识,我不建议这样做。
请注意:正如grawity 所指出的,在一些/大多数终端消费者路由器中,内置 DMZ 功能实际上是“暴露主机”功能。请注意,“暴露主机”功能不会像适当的 DMZ 那样将 DMZ 与您的 LAN 隔离,从而使您的 LAN 网络面临各种安全问题。如果您使用路由器的内置功能,请确保您了解 DMZ 功能的工作原理。
正如其中一条评论所说:
您需要的是反向代理,它可以让您隐藏您的 IP 地址。
互联网上有一些服务,例如 ngrok(具有免费层的商业服务;用于一些实验),它们允许使用您的服务器连接到的服务器在互联网上发布 DNS 名称并建立端口隧道。使用某些虚拟机/容器托管解决方案的免费套餐,您可以创建完全拥有和设置的类似服务。
这样,来自互联网的访问者(通过 DNS)知道该多云实例的 IP 地址并通过名称访问它,并且数据包通过 SSH 隧道或类似的方式转发到您要使用的隐藏服务器 - 从您的家庭 LAN 发起。
我对此的一个用例是将 GitHub 和类似服务的网络钩子(有关新提交测试的通知)接收到在没有公共地址/NAT/...的企业 LAN 内运行的 CI 服务器中。
归档时间: |
|
查看次数: |
3599 次 |
最近记录: |