PostgreSQL安全最佳实践

本文详述了保护PostgreSQL数据库的安全措施,包括网络层的防火墙配置,传输层的TLS加密,数据库层的角色权限管理和行级安全策略。通过设置严格的网络访问规则,使用TLS进行加密连接,以及利用PostgreSQL的用户权限系统,可以有效增强数据库的安全性。同时,文章提到了审计和日志记录的重要性,以及第三方工具如pgAudit和Teleport在数据库访问控制中的应用。
数据库是黑客眼中的“圣杯”,需要我们像对待“花朵”一样精心呵护它。本文主要介绍数据库保护的最佳实践。首先,从最常用的开源数据库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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值