我想专门用一台低功耗的 Debian/Ubuntu 机器来设置个人 wiki(即 Instiki)。我想在其中存储的信息显然是非常机密的;除了我之外的任何人访问它都会是一场灾难。而且我的网络管理和安全技能相当薄弱。要求高,技能低;不是一个好的组合。
我知道,从本质上讲,设置监听应用程序并向外界开放端口会让我面临一定程度的危险。但我该如何将这种危险降到最低呢?
- 我的理解是,只要它在我的路由器后面运行,而路由器有内置防火墙,它默认就无法被外界访问;对吗?
- 而且,如果我确实明确地打开了机器的一个端口(在我的路由器配置中设置一个“虚拟服务器”条目),我基本上就只能依靠我的用户名/密码组合的强度了,理论上任何扫描开放端口的脚本小子都可以通过暴力破解来猜出。
在完全禁用外部访问和依赖端口/用户名/密码组合之间,是否存在任何切实可行的折衷方案?我可以只在家时访问我的 wiki,但这会很不方便。
我还有其他选择吗?SSH 隧道?密钥对身份验证?请提供意见。我尤其希望得到有关通过 SSH 设置隧道或 VPN 的进一步建议。
答案1
答案2
我会通过 HTTPS 进行 HTTP 身份验证,并将任何 HTTP 流量重定向到 HTTPS。如果您不需要从任何地方访问,请限制对特定 IP 地址或网络的访问。您可以使用 HTTPS 客户端证书,但您需要在需要访问的任何计算机上安装该证书。您可以使用某种 USB 设备来存储它,但您需要确保在完成后将其删除。根据您的偏执,您可能无法信任任何您无法控制的计算机,即使这样,它们有多安全?
您能付出的努力是有限的,获取访问权限会成为一件非常令人头疼的事情,但最终却发现您的安全被某人偷看您的屏幕所破坏。人们往往高估信息的价值和远程攻击的可能性,并低估安全失效的非技术方式。
答案3
如果我要控制用于访问家中资源的离网浏览器,我会使用 SSL 上的 X.509 客户端证书身份验证。这样,即使有人知道我的用户名和密码,Web 服务器也会拒绝与他们通信,因为他们没有我的客户端证书。
设置起来有点棘手,如果您使用内置于某些 wiki 产品中的瘦 Web 服务器,则可能是不可能的。我使用 nginx 作为我的 Web 服务器,我的 wiki (WikkaWiki) 在 php-fastcgi 上运行。
问题是,您可能需要访问多个网站,而由于 SSL 的工作方式,您不能在同一个 IP 和端口组合上拥有多个虚拟主机。您可以通过将所有网站放在一个主机下并为每个网站创建一个子目录来解决这个问题(https://my.domain.com/wiki,https://my.domain.com/blog)或拥有单独的域名并使用不同的端口。
在后一种情况下,您可能会遇到将流量从公司网络发送到运行 SSL 的任意端口的问题(它们会阻止除已知流量以外的所有流量,以防止人们使用 SSH 打开进入其网络的隧道)