Я не могу подключиться к mysql с удаленного сервера. у меня есть bind-address
закомментировано, но когда я добавляю правила в iptables для блокировки других подключений, время ожидания соединения запрашивающего сервера истекает.
Я попытался это предложение:
iptables -I INPUT 1 -p tcp -s 1.2.3.4 --dport 3306 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 3306 -j DROP
Но мое соединение все еще разрывается. Неважно, в каком порядке я ввожу эти две строки. Я повторяю IP-адрес удаленного сервера, когда пытаюсь подключиться, и это действительно IP-адрес, который я использую в своих iptables. Без DROP
в строке, соединение работает нормально, как и когда ничего нет в моих iptables.
Распечатка из echo -e "target prot opt source destination\n$(iptables -L INPUT -n | grep 3306)"
:
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:3306
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
(выше я заменил фактический ip на 1.2.3.4)
Попытка подключения с другого сервера (VPS) прошла успешно. Это наводит меня на мысль, что есть проблема с общим сервером, с которого я пытаюсь запросить.
Проблема в порядке правил.
Ввод команд в таком порядке будет таким:
Проблема в том, что вы разрываете соединение до проверки исходного IP-адреса. Это связано с тем, что введенные вами команды предшествуют, а не добавляют правила, поэтому последняя введенная команда становится первым правилом.
Вы можете решить эту проблему следующим образом:
После промывки iptables
, Я использовал iptraf
для отображения списка подключений к порту 3306 в реальном времени.
Запрашивающий сервер был сервером общего хостинга, и IP-адрес, связанный с запросом, отличался от IP-адреса веб-приложения, инициирующего запрос. Это было иначе И изменилось.
Единственным решением было переместить приложение на VPS, который не использует прямой прокси, или на сервер, содержащий базу данных.
Особая благодарность @Jnrprimo за то, что посмотрели на это вместе со мной.