作为一个对网络安全了解有限的人,我想知道:在标准家庭局域网中运行 (1) MySQL 服务器、(2) 一些具有任意服务的 docker 容器和 (3) apache 或 nginx 作为反向 DNS,并将它们暴露给互联网,这是否“安全”?我的网络设置非常简单:一个路由器连接到互联网,家里的所有设备都直接连接到该路由器。我可以使用端口转发和 DDNS 让局域网中的任何设备成为服务器。目前没有配置 DMZ,也没有使用物理防火墙。
将 80 等端口转发到此类 LAN 中的设备是否安全,或者我是否应该避免在 DDNS 上注册路由器的公共 IP?换句话说:所述设置 (1) 是否会使端口转发的设备易受攻击(恶意软件注入、数据盗窃等),甚至 (2) 是否会使 LAN 上与服务器无关的其他设备易受攻击?
当然,这不是生产环境。我只是经常同时处理多个项目,我想从家外访问这些项目,而且我不想为 AWS、GCP 等支付大量费用。因此,我希望 MySQL、Mongo、Neo4J 等服务器始终处于运行状态,并部署一些 Web 应用程序用于个人演示和测试目的。
答案1
[...] 所描述的设置是否会(1)使端口转发的设备变得脆弱(恶意软件注入,数据盗窃......)或者甚至(2)使 LAN 上与服务器无关的其他设备变得脆弱?
是的,是的。
它安全吗?
这可能是个人观点,取决于你如何定义“安全”。但实际上,可能有两件事需要考虑:
现代服务器不断地在一系列自动漏洞脚本的攻击下(这通常是大多数攻击者针对受害者的方式)。
大多数这些威胁可以通过定期的软件更新、最少的预防措施和一些适当的安全设置(您可以合理研究)来缓解。
最重要的是,如果您选择这种方式,您将扮演网络的业余系统管理员(可能阅读日志、检查软件更新等)。如果您不介意承担这个角色,那么使用家庭设置相对安全。否则,传统的第三方服务可能更适合您。
我的网络设置非常简单:一个路由器,连接到互联网,家里的所有设备都直接连接到该路由器。
只要防火墙设置正确,这就可以相对安全。话虽如此,你可能需要专门使用一台便宜的 PC(旧电脑,甚至是 Raspberry Pi)来执行防火墙任务,例如普福斯。
将 80 之类的端口转发到这样的 LAN 中的设备是否安全,或者我是否应该避免在 DDNS 上注册路由器的公共 IP?
这无疑是轶事,但多年来,我一直使用极其相似的设置进行测试和个人使用,从未遇到过安全问题。
关于 Apache/Nginx 和 MySQL,以下是一些小知识:
确保 Apache/Nginx 不会充当开放代理(这很容易被滥用,并使您的服务器成为目标)。通常可以通过一些简单的配置命令(例如此处针对 Apache 的详细介绍)。
对于 Apache,我建议禁用 .htaccess 文件。
对于 MySQL,一个大问题是使用基于浏览器的管理工具,例如 phpMyAdmin。与 WordPress 一样,在查看日志时,这是我见过的受攻击最严重的软件之一(可能是因为 SQL 注入可能非常强大)。任何连接到数据库的 Web 应用程序都应该得到妥善保护,但运行此类工具(可能)会带来麻烦。
请注意,上述内容与限制数据库服务器访问仅限于选定的本地计算机和有限的数据库权限密切相关。
Web 应用程序防火墙 (WAF) 有助于缓解 SQL 注入攻击。CloudFlare 等第三方服务提供此类服务(目前每月 20 美元,还有其他功能) 寻求“设置并忘记”解决方案。但是,通过 Apache 或 Nginx 使用以下模块自行添加此类功能相当容易,例如ModSecurity。
最后,保护您的 Web 服务器和 MySQL 的基本知识都有很好的记录,通常很容易研究,例如“如何在 Linux 上保护 Apache”或“如何防止 SQL 注入攻击”。这两者都提供了一些常见的技巧,可以防止大多数恶意用户破坏您的系统。
当然,您可以发挥想象力,尝试添加额外的安全性(例如真正的 DMZ),但这可能会增加很多工作。