Stephane Rolland Asked: 2012-08-19 13:54:06 +0800 CST2012-08-19 13:54:06 +0800 CST 2012-08-19 13:54:06 +0800 CST 出于安全原因更改 postgresql 服务器的端口 772 出于安全原因,更改 Microsoft Sql Server 的端口是很常见的。该主题在更改 SQL Server 端口真的那么安全吗? 我的问题是:这是否也适用于 PostgreSQL?还是无关的? postgresql security 3 个回答 Voted Best Answer Craig Ringer 2012-08-20T18:00:32+08:002012-08-20T18:00:32+08:00 意见各不相同,但在我看来,在不供一般公众使用的任何 Internet 公开服务上使用非默认端口稍微有用。更改端口并不安全。它绝对不会在正常操作中增加任何安全性,并且只有在您的安全性已经因发现可远程利用的安全漏洞而受到威胁时才有用。充其量它是一个延迟和缓解选项,让您有更高的机会在蠕虫利用它之前修补安全漏洞。 使用非默认端口不会保护您免受漏洞利用或任何类型的有针对性的攻击。它可能有助于减少简单的蠕虫病毒或随意的广泛扫描尝试利用您的服务中的安全漏洞的机会,但它不会减慢任何对您的系统感兴趣的人的速度,特别是为了心跳。 请注意,PostgreSQL 没有像 MS SQL Server 那样的严重的远程可利用安全漏洞历史记录。这并不意味着它永远不会有可远程利用的漏洞,也不会存在像 Kerberos 这样的插件身份验证机制,因此您应该随时准备好应对这种可能性。 对于实际的安全性,您需要考虑: 限制与受信任机器的连接。如果您的数据库位于仅包含其自身和应用程序服务器的 VLAN 上,则没有必要使用端口。同样,如果您不需要将数据库暴露在 Internet 上,请确保它不在公共主机上运行,或者至少将其设置为仅绑定到内部 IP 地址,并通过防火墙将其关闭。 禁止明文身份验证。至少使用 SSL,如果不是 Kerberos 或其他中等强度的协议。 强身份验证或多因素身份验证;没有任何用户名与密码相同的业务。 确保您的应用程序从不使用超级用户角色,并且它们在与之交互的数据库对象上只具有最低要求的权限。除非绝对必要,否则您的应用不应与拥有数据库或其表的用户/角色连接。GRANT他们所需的最低权利。 不允许超级用户角色远程连接pg_hba.conf IP 连接限制。如果机器的所有客户端都使用特定的 ISP,请使用防火墙来断开来自您知道可能使用的 IP 网络块之外的连接。你也可以这样做pg_hba.conf,但如果你在防火墙中这样做,你甚至会阻止他们与 Pg 握手。 ... 还有更多。网上有很多关于锁定和保护 Pg 的内容。例如,请参阅Depesz 的文章、Bruce Momjian 的演示文稿和这篇 DeveloperWorks 文章。 出于类似的原因,我更改了所有机器上的公共 SSH 端口。它不会阻止任何人,但它可能会稍微减慢自动攻击和蠕虫的速度。更重要的是,它减少了我系统日志中大量扫描垃圾邮件的数量,使日志再次变得有用。 Jack Douglas 2012-08-31T02:22:37+08:002012-08-31T02:22:37+08:00 我会说不,当然这与其说是一个原则,不如说是一个答案。主要结果可能是一种额外安全感的错觉。 你需要问的问题是“我想保护自己免受什么伤害?”。 一般来说,在暴露于公共互联网的数据库上,您根本不会打开数据库的端口——世界只会看到您的应用程序层。 在仅需要由 LAN(和 VPN)上的用户访问的数据库上,通常您确实需要直接访问数据库,这可能是您想到的情况?LAN 上的安全性是便利性和保护性的平衡,我认为您必须选择是否: 相信你的客户 不要相信你的客户 在第一种情况下不需要更改端口号,在第二种情况下,更改端口号是不够的。 Chris Travers 2012-08-31T00:56:13+08:002012-08-31T00:56:13+08:00 就个人而言,我只会在所有其他选项之后才看这个。例如防火墙,适当地锁定 pg_hba.conf 等。它可能有用,但它在有用工具列表中排得很远,我担心它会分散其他工具的注意力。
意见各不相同,但在我看来,在不供一般公众使用的任何 Internet 公开服务上使用非默认端口稍微有用。更改端口并不安全。它绝对不会在正常操作中增加任何安全性,并且只有在您的安全性已经因发现可远程利用的安全漏洞而受到威胁时才有用。充其量它是一个延迟和缓解选项,让您有更高的机会在蠕虫利用它之前修补安全漏洞。
使用非默认端口不会保护您免受漏洞利用或任何类型的有针对性的攻击。它可能有助于减少简单的蠕虫病毒或随意的广泛扫描尝试利用您的服务中的安全漏洞的机会,但它不会减慢任何对您的系统感兴趣的人的速度,特别是为了心跳。
请注意,PostgreSQL 没有像 MS SQL Server 那样的严重的远程可利用安全漏洞历史记录。这并不意味着它永远不会有可远程利用的漏洞,也不会存在像 Kerberos 这样的插件身份验证机制,因此您应该随时准备好应对这种可能性。
对于实际的安全性,您需要考虑:
限制与受信任机器的连接。如果您的数据库位于仅包含其自身和应用程序服务器的 VLAN 上,则没有必要使用端口。同样,如果您不需要将数据库暴露在 Internet 上,请确保它不在公共主机上运行,或者至少将其设置为仅绑定到内部 IP 地址,并通过防火墙将其关闭。
禁止明文身份验证。至少使用 SSL,如果不是 Kerberos 或其他中等强度的协议。
强身份验证或多因素身份验证;没有任何用户名与密码相同的业务。
确保您的应用程序从不使用超级用户角色,并且它们在与之交互的数据库对象上只具有最低要求的权限。除非绝对必要,否则您的应用不应与拥有数据库或其表的用户/角色连接。
GRANT
他们所需的最低权利。不允许超级用户角色远程连接
pg_hba.conf
IP 连接限制。如果机器的所有客户端都使用特定的 ISP,请使用防火墙来断开来自您知道可能使用的 IP 网络块之外的连接。你也可以这样做
pg_hba.conf
,但如果你在防火墙中这样做,你甚至会阻止他们与 Pg 握手。... 还有更多。网上有很多关于锁定和保护 Pg 的内容。例如,请参阅Depesz 的文章、Bruce Momjian 的演示文稿和这篇 DeveloperWorks 文章。
出于类似的原因,我更改了所有机器上的公共 SSH 端口。它不会阻止任何人,但它可能会稍微减慢自动攻击和蠕虫的速度。更重要的是,它减少了我系统日志中大量扫描垃圾邮件的数量,使日志再次变得有用。
我会说不,当然这与其说是一个原则,不如说是一个答案。主要结果可能是一种额外安全感的错觉。
你需要问的问题是“我想保护自己免受什么伤害?”。
一般来说,在暴露于公共互联网的数据库上,您根本不会打开数据库的端口——世界只会看到您的应用程序层。
在仅需要由 LAN(和 VPN)上的用户访问的数据库上,通常您确实需要直接访问数据库,这可能是您想到的情况?LAN 上的安全性是便利性和保护性的平衡,我认为您必须选择是否:
在第一种情况下不需要更改端口号,在第二种情况下,更改端口号是不够的。
就个人而言,我只会在所有其他选项之后才看这个。例如防火墙,适当地锁定 pg_hba.conf 等。它可能有用,但它在有用工具列表中排得很远,我担心它会分散其他工具的注意力。