保护面向公众的PostgreSQL服务器免受滥用

我有一个Postgres数据库,包含公开信息,我想公开给互联网,供任何人使用。 我可以采取什么措施来防止:

  1. 过于昂贵的查询可能会占用资源,阻止其他人访问
  2. 查询返回的数据太多,占用了太多的带宽,对服务器所有者造成了伤害。
  3. 服务器本身被破坏并被用于糟糕的事情。

我不担心服务器上的任何数据被暴露,我并不特别担心服务器崩溃 – 重build是微不足道的。

它是PostgreSQL 9.1的PostGIS扩展,包含OpenStreetMap数据和其他一些东西。 它目前在OpenStack基础架构上的Ubuntu(Quantal)虚拟机上运行。

数据库目前被configuration为只有通过networking连接的帐户才能读取必要的表格,仅此而已。 它有一个简单的密码,并运行在默认端口(5432),以简化使用。 shell访问只能通过公共密钥。 除了OpenStack基础架构提供的防火墙之外,我没有使用防火墙。 (所有这些决定都是公平的讨论…)

由于您使用的是Linux,因此iptables提供了一些选项。

如果您的发行版包含iptables配额模块,则可以使用它来根据请求设置配额。 一定要设置你的配额规则,然后在达到限制后立即执行放置规则。 一旦到位,您可能需要执行cron作业来刷新字​​节计数器以重置配额。

另外,iptables和tc结合起来可以达到你想要的效果,无论你是想限制大量的用户还是阻止他们在他们的轨道上。

看看这些工具,看看他们是否会做你所需要的。