创建了一个公开的Postgres服务器的结果

这是什么?

作为一个初学者,我租了一个VPS并搭建了一个PostgreSQL服务器,并将其公开。在此过程中,我学到了很多东西,下面我将总结一下。在本文中,我将省略服务器搭建的步骤,只记录我个人意外的问题和研究不充分的方面。

这次使用的环境

VPS:KAGOYA VPS
操作系统:Ubuntu 22.04.1 LTS
数据库:PostgreSQL 15.1

引子

突然想要提升自己关于数据库的技能,却一直没有机会,感到不安。突然想到,如果自己无法创建能够产生流量的内容,那就让他人为我创造吧。于是决定立刻行动起来。

最终结果如何了?

针对PostgreSQL进行了大量的登录尝试。

大量的登录尝试日志产生,再次认识到pg_hba.conf配置的重要性。

发现防火墙的设置不恰当

由于ufw的默认设置不当,导致上述的登录尝试被允许。

尝试登录到PostgreSQL数据库

从12月31日晚上到元旦傍晚,在互联网的广阔海洋上有6239次登录失败的记录。
这都是对postgres角色即默认超级用户的访问。
从元旦傍晚开始,我们重新审查了pg_hba.conf的设置,并明确禁止了对来自远程的postgres角色的访问。
pg_hba.conf的设置如下所示。

#IPv4
host    all    all        127.0.0.1/32    trust
host    all    postgres   0.0.0.0/0       reject
#IPv6
host    all    all        ::1/128         trust
host    all    postgres   ::0/0           reject

未来,只允许从本地环境登录到PostgreSQL角色。
此外,还需要进行其他设置来实现公开访问。例如,如果只允许访问与角色名称相同的数据库,则需进行以下配置。

host    sameuser    all    0.0.0.0/0      scram-sha-256

用于ufw的默认设置不当

如果要公开服务器,那么防火墙应该是必需的,我使用了ufw来进行设置。
然而,由于将ufw default deny设置为ufw default allow,导致所有的通信都通过了。
在设置时,有些地方让我感到困惑,但没有深入考虑就进行了设置。
直到查看ufw的日志,才意识到这个错误。
真正需要的设置应该是以下步骤:

ufw default deny
ufw limit postgres

未来的挑战

你在说低吗?日志级别。

这次,尽管在ufw的默认日志级别下能够记录谁在认证失败或被阻止的记录,但无法从一开始就记录谁成功了。
为了阻止不受欢迎的访客,需要检测入侵的条件,而明显存在收集不足。
因此,应该将ufw的日志级别设置如下。

设置ufw日志级别

ufw logging medium

另外,通过以下的设置,PostgreSQL可以记录客户端认证的结果到日志中。

PostgreSQL日志级别的设置 (postgresql.conf)

logging_collector = true
log_connection = ture

另外,在PostgreSQL中,log_min_messages是默认值。

最后关于公开服务器

非常抱歉,這是我個人的主觀意見,但請查看以下有關公開PostgreSQL服務器的詳細資訊。

 

文献参考

PostgreSQL: 重新组织翻译转述思而不是仅仅汉字的忠实翻译将是最佳的做法。以下是一种用汉语表达的方式:

PostgreSQL:一个选项。

 

ufw (Uncomplicated Firewall)

 

bannerAds