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

Как разрешить удаленный доступ MySQL к одному статическому IP-адресу?

Я пытаюсь включить удаленный доступ к MySQL через порт 3306, но безуспешно. Мне предоставили root-доступ к производственной машине, чтобы я мог захватывать файлы и базы данных, работать с ними локально и возвращать измененные версии.

Мой доступ позволяет мне использовать SSH в коробке, и это позволяет FTP через SSH. Сейчас я пытаюсь получить доступ к MySQL через SSH. MySQL работает (прослушивает локально), доступен в командной строке и может получить к нему доступ без проблем.

Я понимаю, что могу просто сбросить базу данных, восстановить файл локально и внести изменения. Однако в будущем мне, вероятно, придется что-то изменить, и я бы предпочел не делать это в командной строке, так как это происходит быстрее через графический интерфейс. Или было бы, если бы я мог подключиться так, как хочу.

С помощью -s 192.168.100.0/24 означает, что вы разрешаете удаленный доступ к порту 3306 только для диапазонов IP-адресов, соответствующих 192.168.100.0/24, что является частной внутренней сетью. Это действительно то, что вы собираетесь делать? В противном случае это проблема, почему удаленные подключения с других IP-адресов не работают.

Вам также обычно не нужно исходящее правило.

Если это не помогает, предоставьте немного больше информации о том, откуда вы проводите тестирование, IP-адресах / интерфейсах машины, что происходит и, возможно, полный вывод iptables -vnL для нас?

Редактировать 1:
Основываясь на дополнительной информации, это показывает, что пример, использованный в качестве шаблона, был неправильно понят, вам необходимо удалить диапазон исходных IP-адресов (поскольку вы хотите разрешить всем удаленно). Просто введите это, и только это, и он должен работать:

iptables -A INPUT -i eth0 -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

Если вы хотите указать свой внешний IP-адрес, это должен быть IP-адрес назначения, например:

    iptables -A INPUT -i eth0 -p tcp -d xx.xx.xx.xx --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

-s, как и в источнике, используется только в том случае, если вы хотите ограничить доступ из определенных диапазонов IP-адресов.

Редактировать 2:
Кажется, это вообще не вопрос iptables, а скорее вопрос mySQL. Чтобы позволить mySQL вообще прослушивать удаленные соединения, обязательно настройте его для прослушивания вашего внешнего адреса. редактировать /etc/mysql/my.cnf и проверьте bind-address заявление и измените его на:

bind-address = xx.xxx.xx.xx

Либо вы решили заменить xx.xx.xx.xx своим внешним IP-адресом, либо можете настроить его на прослушивание 0.0.0.0 что означает, что он будет слушать все интерфейсы.

После этого для вас возникает вопрос, как в первую очередь настроить весь брандмауэр для вашего сервера. Либо вы вручную блокируете все определенные порты, к которым никто другой не должен получить доступ, либо вам нужно установить политику по умолчанию для отклонения трафика, а затем вручную открывать порт за портом (как указано в вашем первоначальном вопросе) для служб, которые вы хотите разрешить. Быть ОЧЕНЬ Однако будьте осторожны с этим, если это удаленная машина, очень легко заблокировать себя, если вы разместите вещи в неправильном порядке или неправильно.

РЕДАКТИРОВАТЬ: Для приведенных ниже инструкций, если вы используете Windows, следует помнить о двух вещах:

1) Изменить localhost к 127.0.0.1 поскольку в Windows это не настраивается автоматически в %SystemRoot%\system32\drivers\etc\hosts.

2) Можно использовать малоизвестные plink.exe инструмент командной строки из PuTTY набор инструментов; он использует тот же синтаксис для параметров, что и ssh команда, поэтому, если вы замените ssh в примерах ниже с plink.exe все должно работать.


Вы захотите использовать SSH-туннель для перенаправления локального порта вашего клиента на порт mysql на сервере. Вы можете сделать это с помощью:

% ssh -f -N -L3306:localhost:3306 username@remoteserver
% mysql -h remoteserver -u mysqluser -p

Возможности ssh значит:

-f Requests ssh to go to background just before command execution.
-N Do not execute a remote command.
-L [bind_address:]port:host:hostport
   Specifies that the given port on the local (client) host is to be 
   forwarded to the given host and port on the remote side.

С помощью -f -N также означает, что вы перевели процесс ssh в фоновый режим, а не оставались подключенными к удаленному хосту, как это обычно бывает при входе в удаленную оболочку. Если вы хотите разрушить туннель, вы можете убить процесс ssh на своем клиенте следующим образом:

% pgrep -fl ssh
11145 ssh -f -N -L3306:localhost:3306 username@remoteserver
% kill -9 11145

Конечно в этом случае 11145 - это PID процесса ssh, который будет изменяться каждый раз, когда вы запускаете новый процесс ssh для открытия туннеля.

Кроме того, предполагается, что вы делаете не пусть на вашем клиенте также работает сервер mysql. В таком случае вам нужно изменить локальный порт, к которому вы привязываете, вот так:

% ssh -f -N -L3333:localhost:3306 username@remoteserver
% mysql -P 3333 -h remoteserver -u mysqluser -p

Порт 3333 произвольно; вы можете выбрать любой свободный номер порта, который есть у вашего клиента.

В -A switch to iptables добавляет новые правила в конец цепочки. Вероятно, у вас есть более раннее правило, запрещающее доступ, и с iptables выигрывает первое совпадение. Попробуйте использовать -I переключатель, чтобы вставить правило в начало цепочки.

Если это не сработает, покажите нам результат iptables -L -v -n как редактирование вашего вопроса.

Политика по умолчанию для INPUT и OUTPUT - ACCEPT. Вы не определили никаких правил для отбрасывания или отклонения пакетов. Это означает, что ваш брандмауэр не блокирует никакие соединения.

Проблема в другом.

Использовать netstat -tan | grep LISTEN чтобы убедиться, что вы используете MySQL и слушает.

Если это сработает, возможно, где-то есть другой брандмауэр, который блокирует соединение.

Я нашел ответ на свой вопрос (надо было уточнить, что я использую Windows 7 локально, а Linux - удаленно).

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

В PuTTy настройте соединение SSH как обычно, но затем перейдите к настройкам туннелей, в разделе SSH выберите произвольный порт (я использовал 5555) локально для перенаправления на 127.0.0.1:3306

Откройте сеанс SSH и войдите в систему как обычно.

Затем в вашем клиенте MySQL установите адрес хоста на 127.0.0.1 и порт на выбранный вами (5555).

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

БОЛЬШОЕ ПРИМЕЧАНИЕ: У нас действительно была эта настройка, используя термин localhost (как и вы) вместо 127.0.0.1, где-то между PuTTy и клиентом MySQL, это не разрешилось - поэтому кажется, что вы должны использовать адрес обратной связи!

Спасибо вам большое! Я пробовал всякую чушь, чтобы иметь возможность использовать MySQL Workbench удаленно для работы с таблицами в моей реализации CentOS MySQL. По сути, единственным решением было открыть порт 3306 для всех (плохо для безопасности).

Мы уже используем Putty для безопасного доступа из командной строки к нашему серверу и понятия не имели, что можем настроить такой туннель. По сути, мы можем использовать существующее безопасное соединение SSH для подключения MySQL Workbench к нашему серверу. Спасибо ! ! !