Как лучше всего разрешить MySQL на одном сервере прослушивать запросы от двух других серверов? - PullRequest
1 голос
/ 04 января 2009

У меня есть сервер базы данных MySQL на сервере 1. Я хочу, чтобы мои приложения Rails были на двух других серверах - скажем, A и B, чтобы иметь возможность подключиться к этому серверу 1. Какой лучший способ сделать это?

В файле my.cnf, по-видимому, я могу использовать bind-адрес для привязки к одному и только одному IP-адресу. Я не могу указать IP-адреса A и B в my.cnf.

С другой стороны, если я прокомментирую пропустить сеть, ворота широко открыты.

Есть ли золотая середина? Что вы, ребята, делаете, чтобы сервер БД мог прослушивать запросы от нескольких серверов приложений и при этом оставаться в безопасности?

Ответы [ 5 ]

5 голосов
/ 04 января 2009

Если MySQL работает в Linux:

Я очень склонен к использованию iptables (a.k.a. netfilter, брандмауэр Linux) для контроля входящего трафика на различные порты. Он прост в использовании и очень надежен.

iptables -A INPUT -p tcp -s server1address/32 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp -s server2address/32 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
2 голосов
/ 04 января 2009

Адрес привязки - это локальный IP-адрес сервера , а не допустимые клиентские адреса. В вашей ситуации вы можете указать статический адрес вашего сервера (вместо localhost) или, если ваш IP может измениться, просто закомментировать его.

Опять же, поясним: bind-address - это адрес, по которому сервер прослушивает клиентские соединения (у вас может быть несколько сетевых карт или несколько IP-адресов и т. Д.). Также можно изменить port, который вы хотите прослушать в MySQL.

Вы захотите убедиться, что настроили пароль root, если вы этого еще не сделали:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourpassword');

Затем вы могли бы использовать другие средства, чтобы ограничить доступ к MySql чем-то вроде локальной сети (то есть вашего брандмауэра).

1 голос
/ 05 января 2009

Больше информации о iptables:

Вышеприведенные команды iptables должны быть либо вставлены в существующие таблицы iptables, либо вы должны удалить существующий материал и начать все с нуля с помощью приведенных выше команд.

Вставка несложная, но она немного зависит от используемого вами дистрибутива Linux, поэтому я не уверен, что порекомендовать.

Чтобы начать с нуля, сначала необходимо очистить и запустить существующие таблицы:

iptables -F
iptables -X

Затем вставьте необходимые правила брандмауэра iptables, следуя модели, указанной в моем предыдущем ответе.

Затем сохраните правила iptables. Это снова зависит от распределения. На большинстве производных Red Hat (Red Hat, Fedora, CentOS) достаточно запустить:

service iptables save

Вуаля, ваши пользовательские правила сохранены. Если служба iptables включена (проверьте с помощью "chkconfig --list iptables", это должно быть ": on" на уровнях выполнения 3 и 5, в зависимости от вашей ситуации, но ее можно безопасно установить ": on" на 3 и 5 в любом случае) тогда ваши правила переживут перезагрузку.

В любое время вы можете проверить текущие действующие правила iptables. Вот несколько команд, которые делают это, с различными уровнями детализации:

iptables -L
iptables -L -n
iptables -L -n -v

Без -n он попытается найти доменные имена и отобразить их вместо IP-адресов - это может быть нежелательно, если DNS не работает на 100% идеально. Вот почему я почти всегда использую -n.

-v означает "многословный", его немного сложнее читать, но он дает больше информации.

ПРИМЕЧАНИЕ. Если вы начинаете с нуля, другие службы, работающие на этой машине, могут больше не защищаться iptables. Потратьте некоторое время и выясните, как вставить правила MySQL в существующие таблицы. Это лучше для безопасности вашей системы.

0 голосов
/ 04 января 2009

В дополнение к правильному адресу привязки вам необходимо открыть правильный порт, создать или настроить пользователей и некоторые другие детали. Это объясняет это довольно ясно.

0 голосов
/ 04 января 2009

Сервер БД будет прослушивать неограниченное количество клиентов.

Каждое клиентское приложение Rails идентифицирует сервер БД.

Сервер БД терпеливо ждет соединений. Он не знает, сколько клиентов или откуда происходят соединения.

Редактировать

«Как вы безопасно настраиваете БД, с каких серверов принимать запросы?»

Для этого нужны сети, брандмауэры и маршрутизаторы.

Именно поэтому для базы данных требуются учетные данные из приложений Rail.

...