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

iptables - таймаут доступа к порту 3306

Я не могу подключиться к 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) прошла успешно. Это наводит меня на мысль, что есть проблема с общим сервером, с которого я пытаюсь запросить.

Проблема в порядке правил.

Ввод команд в таком порядке будет таким:

  1. Если порт 3306 УДАЛИТЬ
  2. Если порт 3306 и исходный IP-адрес 1.2.3.4 ПРИНЯТЬ

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

Вы можете решить эту проблему следующим образом:

  • Изменение -I на -A (добавить) + Очистить СТАРЫЕ цепочки / правила
  • ИЛИ измените порядок ввода команд.

После промывки iptables, Я использовал iptraf для отображения списка подключений к порту 3306 в реальном времени.

Запрашивающий сервер был сервером общего хостинга, и IP-адрес, связанный с запросом, отличался от IP-адреса веб-приложения, инициирующего запрос. Это было иначе И изменилось.

Единственным решением было переместить приложение на VPS, который не использует прямой прокси, или на сервер, содержащий базу данных.

Особая благодарность @Jnrprimo за то, что посмотрели на это вместе со мной.