Назад | Перейти на главную страницу

Защита общедоступного сервера PostgreSQL от злоупотреблений

У меня есть база данных Postgres, содержащая общедоступную информацию, которую я хотел бы опубликовать в Интернете, чтобы любой мог использовать. Какие шаги я могу предпринять, чтобы предотвратить:

  1. Чрезмерно дорогие запросы, которые могут потреблять ресурсы, предотвращая доступ других
  2. Запросы, которые возвращают слишком много данных, используют слишком большую полосу пропускания и причиняют вред владельцу сервера.
  3. Сам сервер скомпрометирован и используется для плохих вещей.

Я не беспокоюсь о том, что какие-либо данные на сервере будут открыты, и меня не особенно беспокоит сбой сервера - его тривиально восстановить.

Это PostgreSQL 9.1 с расширениями PostGIS, содержащий данные OpenStreetMap и некоторые другие вещи. В настоящее время он работает на виртуальной машине Ubuntu (Quantal) в инфраструктуре OpenStack.

База данных в настоящее время настроена так, что единственная учетная запись, которая может подключаться по сети, имеет доступ для чтения к необходимым таблицам и не более того. Он имеет простой пароль и работает на порту по умолчанию (5432) для упрощения использования. Доступ к оболочке осуществляется только по публичному ключу. Я не использую брандмауэр, кроме предоставленного инфраструктурой OpenStack. (Все эти решения можно обсуждать ...)

Поскольку вы используете Linux, iptables дает вам несколько вариантов.

Если в вашем дистрибутиве есть модуль квот iptables, вы можете использовать его для установки квоты на запросы. Обязательно установите правило квоты, а затем правило отбрасывания сразу после достижения лимита. Как только это будет сделано, вам может потребоваться задание cron сбросить счетчики байтов, чтобы сбросить квоту.

Кроме того, комбинация iptables и tc может достичь желаемого эффекта, независимо от того, хотите ли вы ограничить количество активных пользователей или остановить их.

Взгляните на эти инструменты и посмотрите, сделают ли они то, что вам нужно.