Protege um servidor PostgreSQL voltado ao público contra abuso

2

Eu tenho um banco de dados do Postgres contendo informações públicas que gostaria de expor à Internet, para qualquer um usar. Que passos posso tomar para evitar:

  1. Consultas excessivamente caras que podem consumir recursos, impedindo o acesso de outras pessoas
  2. Consultas que retornam muitos dados, gastando muita largura de banda, causando danos ao proprietário do servidor.
  3. O próprio servidor sendo comprometido e usado para coisas ruins.

Eu não estou preocupado com quaisquer dados no servidor que está sendo exposto, e não estou especialmente preocupado com o travamento do servidor - é fácil reconstruí-lo.

É o PostgreSQL 9.1 com extensões PostGIS, contendo dados do OpenStreetMap e algumas outras coisas. Está atualmente sendo executado em uma VM Ubuntu (Quantal), na infraestrutura OpenStack.

O banco de dados está atualmente configurado para que a única conta que pode se conectar através de uma rede tenha acesso de leitura às tabelas necessárias e nada mais. Ele tem uma senha trivial e está sendo executado na porta padrão (5432) para simplificar o uso. O acesso ao shell é apenas por chave pública. Eu não estou usando um firewall, além daquele fornecido pela infraestrutura do OpenStack. (Todas essas decisões são justas para discussão ...)

    
por Steve Bennett 19.11.2013 / 01:16

1 resposta

1

Como você está usando o Linux, o iptables oferece algumas opções.

Se sua distro tiver o módulo de cota iptables, você poderá usá-lo para definir uma cota em solicitações. Certifique-se de definir sua regra de cota e, em seguida, uma regra de descarte logo após atingir o limite. Uma vez em vigor, talvez seja necessário que uma tarefa cron esvazie os contadores de bytes para redefinir a cota.

Além disso, o iptables e o tc em combinação podem alcançar o efeito desejado, seja para limitar usuários pesados ou para interrompê-los.

Dê uma olhada nessas ferramentas e veja se elas farão o que você precisa.

    
por 19.11.2013 / 13:09