Вот пример использования:
У меня есть система SaaS, которая была построена (среда разработки) на одном устройстве. Я переместил все в облачную среду под управлением Ubuntu 10.10. Один сервер запускает приложение, другой - базу данных. Основная идея заключается в том, что сервер, на котором работает база данных, должен быть доступен только для приложения и компьютера администратора, у которых есть правильные ключи RSA.
Мой вопрос:
Было бы лучше использовать брандмауэр для блокировки доступа ко ВСЕМ портам, кроме MySQL, или пропустить firewall / iptables и просто полностью отключить все другие службы / порты? Кроме того, должен ли я запускать MySQL на нестандартном порту? Эта база данных будет содержать довольно конфиденциальную информацию, и я хочу убедиться, что делаю все возможное, чтобы ее защитить.
Заранее спасибо. Я читал здесь некоторое время, но это первый вопрос, который я задал. На некоторые попробую ответить =)
В идеале для максимальной безопасности вам нужно несколько уровней.
Сюда входят такие вещи, как брандмауэр, блокирующий любой доступ к сетевым портам (shorewall довольно легко настроить), а также использование tcpwrappers (hosts.allow / hosts.deny) для ограничения доступа к различным демонам.
Если ваш сервер базы данных принимает соединения только от данного сервера (со статическим IP-адресом), то этот IP-адрес также можно использовать в сочетании со стандартными конфигурациями брандмауэра, методами аутентификации tcwrapper и mysql, чтобы дополнительно ограничить доступ только к этому одному серверу.
Какой-то безопасный туннель между серверами был бы идеальным, иначе блокировал бы любой доступ к серверу БД.
Если исключить это, я думаю, что будет отличной идеей использовать брандмауэр для фильтрации всего нежелательного и нежелательного, даже если это кажется избыточным (например, есть ли текущий демон, прослушивающий порт X или нет). Одна «хорошая» вещь в фильтрации всего (через DROP в netfilter) заключается в том, что она не делает простое сканирование TCP-портов быстрым и легким.
Я также не считаю плохой идеей менять порт по умолчанию для БД, если он должен быть открыт для Интернета. Просто никогда не питайте иллюзий по поводу этого, как «меры безопасности».
Эй, попробуйте с /etc/hosts.allowed и /etc/hosts.deny
Добавьте ВСЕ: ВСЕ к хостам запрещены, но ваш IP и mysqld к hosts.allowed. Подробнее на:
http://linux.about.com/od/commands/l/blcmdl5_hostsal.htm
Это самый простой способ.
Ваш конфиг будет выглядеть так:
/etc/hosts.allow ALL: (Ваш-Connecting-IP) и /etc/hosts.deny ALL: ALL
Добавление localhost в разрешенное может быть хорошей идеей.
Лучше всего отключить неиспользуемые службы и установить брандмауэр на свои ящики. Делая это, вы применяете принцип глубокой защиты. Вы можете изменить порт по умолчанию для mysql, поскольку это может помочь уменьшить шум в ваших журналах, но это не должно быть единственным, что вы делаете.
Если ваша база данных будет содержать конфиденциальную информацию, вам следует рассмотреть возможность использования шифрования для этих данных, хотя я недостаточно знаком с MySql, чтобы знать, что он поддерживает.
Вы также должны проверить вопрос "Повышение безопасности сервера MySql"на security.se.