我的 Web 服务器和数据库服务器是分开的。我为确保 Web 服务器的安全所做的所有工作都被使用,ufw
并且除了端口 22、80 和 443 之外,其他端口均被拒绝。还需要做什么呢?
在我的数据库服务器上,我只允许来自端口 22 和数据库 (mysql) 监听的端口。这让我很纳闷。通常我只是允许所有流量。对于数据库,我通常会设置严格的“用户”,并就软件而言说“只允许 user@internal_ip_address 访问数据库”。但这应该是防火墙的问题吗?还是两者都有?似乎如果防火墙只允许从我的 Web 服务器的内部 IP 地址到端口 22 和 3306 的流量,那就足够了?您是否只是出于“良好做法”而同时做这两件事?
我应该为这些设置哪些其他通用防火墙规则?
答案1
这比很多人好多了!
此时需要关注以下几点:
- 应用程序安全。SQL 注入、跨站点脚本、目录遍历等。取决于您正在运行什么,如果不是您的代码,您就无法采取非常主动的措施,但这可能是您最大的影响范围。
- 那个 MySQL 监听器:它真的需要对互联网开放吗?既然您已将用户限制在特定地址,那么您可以只允许这些地址吗?如果您不允许任何用户从 登录,那么您拥有的这个方法很好,
%
但阻止监听器会更好;某些攻击只需要向监听套接字发送一个精心设计的数据包而无需进行身份验证。您可以通过 SSH 访问进行所需的管理吗?让我想到: - SSH。尽可能使用公钥身份验证。如果不可能,则使用
limit
in 模式ufw
而不是直接模式allow
,以帮助防止暴力破解。将侦听器地址更改为高端口是某些人的标准做法,但这种模糊性的实际安全价值可以忽略不计。
答案2
简短回答:
是的。利用所有可用的保护方法是好的,而“纵深防御”这个短语描述的是具有多层重叠的保护。
简短答案:
一般情况下,创建防火墙规则时需要牢记三件事:
- 观众
- 目的港
- 协议
我们的意思是,对于 MySQL 服务器来说,仅仅限制传入连接是不够的到端口 3306/tcp,但我们必须还限制来自 MySQL 客户端的访问。理想情况下,每个端口的客户端列表应该尽可能小,但实际上有时可能会更大。因此,请考虑每个端口、SSH 和 Web,并确定谁实际上需要访问这些。
如果你的应用程序包含自己的限制范围的机制,那么也可以使用它们,请参阅简短答案以上。这将包括问题中提到的对 MySQL 的访问限制user@internal_ip_address
,以及在您的 Web 服务器中设置 htaccess(或类似)文件。当然,请花时间权衡使用这些额外步骤的安全优势与实施和维护这些步骤的管理开销。