作为一名软件开发人员,我非常习惯在开发机器上安装典型的堆栈(java、mysql 和 tomcat/apache)。但是设置和保护生产机器并不是我自信能做到的事情。有没有针对新手的 AZ 指南来指导如何设置和保护生产服务器?这个过程是否因平台(Windows 或 Linux)的不同而有很大差异?是否有一些通用规则可以应用于不同的平台(和应用程序堆栈)?
答案1
是否有一份针对新手如何设置和保护生产服务器的 AZ 指南?
不。软件、代码、平台、硬件等的组合实在太多了,不可能实现这一点。但是,如果你分解堆栈,你会发现每个级别都有很好的信息(例如强化操作系统、Web 应用程序安全最佳实践等)。
该过程是否根据平台(Windows 或 Linux)而有很大差异?
这过程强化的方法相同,但实施细节不同。
是否存在一些可应用于不同平台(和应用程序堆栈)的通用规则?
是的。您应该创建应用程序的配置文件:记录应用程序的依赖项(需要运行的任何服务;需要打开(进出)的任何网络端口/协议;任何第三方库/组件),以建立应用程序运行的基本要求。系统地删除/禁用您不需要的任何服务、应用程序和端口;以最低权限运行服务和应用程序。测试每一步;您将要打破某物。
投资适当的防火墙并启用出口过滤(如果您的机器被拥有,请不要让它建立直接 TCP 连接);使用白名单代理仅允许出站 HTTP 到所需更新(windowsupdate.com 等,Linux 存储库)。设置警报和适当的日志记录:登录尝试失败、服务启动/停止、正在安装、权限提升等时发出警报。补丁管理很重要;设计一个合理的维护窗口并坚持下去。不要让更新累积太久。
如果这是一个 Web 应用程序,请查看您的入口点、您的 HTTP 动词到 URI 的映射并将您的 POST 或 GET 参数列入白名单、清理您的表单(不要信任任何输入)、转义您的 SQL(或使用第三方库为您执行此操作)、记录所有 SQL 查询,等等。
答案2
使用像 iptables 这样的防火墙,并花一些时间规划哪些连接是可能的和需要的。限制传入甚至传出的流量。
答案3
有许多适用于所有类型服务器的一般规则,例如:
删除未使用的软件并关闭未使用的端口/服务。它们浪费资源,并且可能造成漏洞。
不断应用补丁和升级,尤其是在发现一些错误或弱点时。
尽可能更改所有默认密码和/或禁用访客/默认帐户。
使用强密码。
在适用且适当的情况下使用 SSL 来保护您的交易。
此外,每项具体服务都可以有一些确保其安全的技巧。
答案4
关于 tomcat 的一个特别提示:将其端口绑定到 localhost 并使用适当的 web 服务器(例如 apache httpd)作为前端。许多最新的 tomcat 漏洞只有在您有权访问管理器应用程序时才可能被利用。
因此,如果您的应用程序已启动并正在运行,最好也删除管理器应用程序。禁用自动部署。
充分利用不同的角色 - Web 服务器 httpd 不需要在操作系统级别访问 tomcat 提供的文件,反之亦然。因此,如果有人利用 httpd 的弱点并进入命令行,请确保他无法写入任何重要内容。
看看 ISO 27001 - 还有一个专门讨论安全。