HTTP 服务器代理的 Postgresql 请求
Postgresql requests proxied by HTTP server
我正在使用直接连接到数据库实例 (Postgres) 的移动应用程序,因此,我必须为从互联网(4G,移动应用程序)生成的流量保持端口打开。
此移动应用程序(QFIELD,QGIS 的移动版本)直接连接到数据库,这就是为什么可以通过 public ip 从互联网访问数据库的原因,但这是一个关键问题为了数据的安全和可以发送到数据库的请求。
我想代理这些请求,以便数据库仅供本地计算机使用,而不是直接打开连接。
移动应用会将请求发送到 HTTP url,HTTP url 会将请求发送到本地 ip 和端口,这样我就可以避免将数据库暴露在互联网上。
理想情况下,我想从这个应用程序(它使用 postgres 连接字符串连接到服务器)转到在本地路由请求的 HTTP 服务器,例如:
- APP连接到https:///myproxy/postgres
- 请求被代理到本地服务器
我可以用 Apache2 做这个吗?有什么想法吗?
目前我无法编写一个中间件来代理从APP到本地postgres的请求。
如果您的应用程序希望直接连接到 PostgreSQL 数据库并且您不想更改它,那么您需要连接到“使用”PostgreSQL 客户端协议的东西。
您可以在它前面放置一个代理,例如 pgbouncer 或 pgpool,但它们本身并不能保证更高的安全性。这与任何代理的问题相同 - 它只是将请求和响应转发到您的实际服务器,因此任何漏洞仍然暴露。
您可以做的是:
- 限制代理点的连接数
- 限制哪些用户可以非本地连接到您的 PostgreSQL 集群
- 限制他们可以连接到您的代理的位置
- 限制这些用户在数据库中的权限
最后一点特别重要 - 假设您的应用程序的任何用户帐户都可能被恶意使用。限制帐户以防止大量更新或删除数据。还要特别注意限制对其他用户数据的访问。
如果我被迫允许这样的访问,我希望每个实际用户至少有一个 PostgreSQL 用户帐户。实际上,我不会用生产应用程序达到这一点。
我正在使用直接连接到数据库实例 (Postgres) 的移动应用程序,因此,我必须为从互联网(4G,移动应用程序)生成的流量保持端口打开。
此移动应用程序(QFIELD,QGIS 的移动版本)直接连接到数据库,这就是为什么可以通过 public ip 从互联网访问数据库的原因,但这是一个关键问题为了数据的安全和可以发送到数据库的请求。
我想代理这些请求,以便数据库仅供本地计算机使用,而不是直接打开连接。
移动应用会将请求发送到 HTTP url,HTTP url 会将请求发送到本地 ip 和端口,这样我就可以避免将数据库暴露在互联网上。
理想情况下,我想从这个应用程序(它使用 postgres 连接字符串连接到服务器)转到在本地路由请求的 HTTP 服务器,例如:
- APP连接到https:///myproxy/postgres
- 请求被代理到本地服务器
我可以用 Apache2 做这个吗?有什么想法吗?
目前我无法编写一个中间件来代理从APP到本地postgres的请求。
如果您的应用程序希望直接连接到 PostgreSQL 数据库并且您不想更改它,那么您需要连接到“使用”PostgreSQL 客户端协议的东西。
您可以在它前面放置一个代理,例如 pgbouncer 或 pgpool,但它们本身并不能保证更高的安全性。这与任何代理的问题相同 - 它只是将请求和响应转发到您的实际服务器,因此任何漏洞仍然暴露。
您可以做的是:
- 限制代理点的连接数
- 限制哪些用户可以非本地连接到您的 PostgreSQL 集群
- 限制他们可以连接到您的代理的位置
- 限制这些用户在数据库中的权限
最后一点特别重要 - 假设您的应用程序的任何用户帐户都可能被恶意使用。限制帐户以防止大量更新或删除数据。还要特别注意限制对其他用户数据的访问。
如果我被迫允许这样的访问,我希望每个实际用户至少有一个 PostgreSQL 用户帐户。实际上,我不会用生产应用程序达到这一点。