防火墙永远不够,它是最低限度的。那么拥有某种 IDS 是可取的。例如,如果你的 SSH 端口被暴露,你应该阻止暴力攻击,即使你有一个强密码。互联网上的典型服务器每天都会被探测、攻击数百、数千次。我知道,从我在一天内收到的所有警报中,只需阅读日志即可。顺便说一句,安全很容易成为全职工作。如果你有日志但从未阅读过它们,你可能会错过一些东西。
如果您要从头开始构建网站,我认为最大的危险来自您自己的代码。你最大的敌人就是你,如果你不知道自己在做什么。例如,如果您的代码允许 SQL 注入,那么 ufw 将无法保护您。使用框架应该可以帮助您避免一些新手错误,但不能保证代码的质量。您需要学习最佳实践以及如何编写安全代码。该框架不会教你。
既然您提到了 Python,我建议您使用 pylint来测试您的代码质量。还有其他工具,例如 Bandit 或 Mypy,可以进行更具体的检查。
WAF(Web 应用程序防火墙)也可能是有益的,但需要一些调整才能有效,但限制性太强。
您可以做很多事情来减少攻击面。谷歌:“Linux 强化”。如果我不得不推荐一本书,它会暴露在 Hacking上以获得全面的概述。
一件重要的事情是让您的系统保持最新。漏洞一直在被发现,有时甚至是 0days,因此您必须迅速做出反应才能下载升级或补丁(最近想到的一个例子是 Exim)。因此,我强烈建议订阅一些有关计算机安全的邮件列表、网站或博客,以了解最新消息。
Equifax 因几个月前已修补的漏洞而遭到黑客攻击。他们的拖延使他们付出了沉重的代价。不维护您的系统会大大增加风险。所需要的只是一个可利用的缺陷。
最后,我建议你自己测试一下。测试 SQL 注入 SQLmap 是一个很棒的工具。但是要获得最佳结果,您需要了解这些工具的工作原理,大多数情况下仅使用默认选项运行它们并不足以发现缺陷(除非该站点的代码非常糟糕)。有时,网站管理员会在他们的服务器上留下敏感文件,例如 SQL 备份,因为他们在恢复数据库后忘记删除文件。目录列表可能会显示不应该存在的文件的存在。
许多网站都有一个 phpmyadmin 目录,并且没有任何针对暴力攻击的保护。因此,黑客可以通过这种方式访问您的数据库。如果您真的想在服务器上拥有 phpmyadmin,至少不要使用可预测的目录名称,并限制访问,以免它暴露给整个词以实现零收益。