数据库是黑客眼中的“圣杯”,需要我们像对待“花朵”一样精心呵护它。本文主要介绍数据库保护的最佳实践。首先,从最常用的开源数据库PostgreSQL开始,我们将一一介绍诸位需要考虑的几个安全层级: PostgreSQL中网络层的安全 防火墙 理想情况下,PostgreSQL服务器应当是完全隔离,不允许任何入站申请、SSH或psql的。然而,PostgreSQL没有对这类网闸设置提供开箱即用的支持。 我们最多也只能通过设置防火墙,锁定数据库所在节点的端口级访问来提升数据库服务器的安全性。默认情况下,PostgreSQL监听TCP端口5432。而根据操作系统的不同,锁定其他端口的方式也会有所不同。以Linux最常用的防火墙为例,下面这几行代码就可轻松完成任务: # 确保已有连接不被drop iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许SSH. iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT # 允许PostgreSQL. iptables -A INPUT -p tcp -m state --state NEW --dport 5432 -j ACCEPT # 允许所有出站,drop所有入站 iptables -A OUTPUT -j ACCEPT iptables -A INPUT -j DROP iptables -A FORWARD -j DROP 在更新iptables的规则时,建议使用工具。这样,哪怕你不小心把自己也锁在外面了,它也能自动回滚更改。 这条PostgreSQL规则会允许所有人连接到端口5432上。当然,你也可以将其修改为只接受特定IP地址或子网让限制更加严格: # 仅允许本地子网访问PostgreSQL端口 iptables -A INPUT -p tcp -m state --state NEW --dport 5432 -s 192.168.1.0/24 -j ACCEPT 继续讨论我们的理想情况。想要完全限制到5432端口的所有入站连接需要一个某种类型的本地代理,由它维持一个到客户端节点的持久出站连接,并且能将流量代理到本地PostgreSQL实例。 这种代理被称作是“反向通道”。具体使用方法可以通过SSH远程端口转发的功能进行演示。运行下列指令可以在PostgreSQL数据库运行的节点上打开一个反向通道: ssh -f -N -T -R 5432:localhost:5432 user@<client-host> PostgreSQL的节点需要能访问<client-host>,其上的SSH守护进程(daemon)也要处于运行状态。下列指令会将数据库服务器上端口5432转发到客户端机器的端口5432上,这样你就可以通过这个通道连接数据库了: psql "host=localhost port=5432 user=postgres dbname=postgres" PostgreSQL监听地址 通过配置文件指令来限制服务器监听客户端连接的地址是个好习惯。如果运行PostgreSQL的节点上有多个网络接口,可以确保服务器只会监听客户端所连接的一个或多个接口: listen_addresses = 'localhost, 192.168.0.1' 如果连接到数据库的客户端总是驻留在同一节点上,或是与数据库共同驻留在同一个Kubernetes&nb
PostgreSQL安全最佳实践
最新推荐文章于 2025-07-30 14:30:03 发布
本文详述了保护PostgreSQL数据库的安全措施,包括网络层的防火墙配置,传输层的TLS加密,数据库层的角色权限管理和行级安全策略。通过设置严格的网络访问规则,使用TLS进行加密连接,以及利用PostgreSQL的用户权限系统,可以有效增强数据库的安全性。同时,文章提到了审计和日志记录的重要性,以及第三方工具如pgAudit和Teleport在数据库访问控制中的应用。

最低0.47元/天 解锁文章
453

被折叠的 条评论
为什么被折叠?



