Как настроить доступ к БД только с определенного IP

12
P
На сайте с 17.02.2009
Offline
197
1579

Добрый день !

БД и Сайт на разных серверах. Не хотелось бы сейчас углубляться на тему почему так организовано, тому есть причины.

Для сайта заказал выделенный IP, проверяю, сайт именно на нем.

Дальше в панели VPS (где хостится база) задаю БД - пользователь - удаленный доступ - список IP - задаю этот IP и доступ к БД прекращается. Убираю IP все работает.

Подскажите пожалуйста, что я делаю не так.

M
На сайте с 24.10.2011
Offline
173
#1

Poljot, ип, на котором висит веб-сервер и ип, с которого он делает запросы вовне, могут отличаться

[umka]
На сайте с 25.05.2008
Offline
456
#2
Poljot:
Подскажите пожалуйста, что я делаю не так.

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

Poljot:
Для сайта заказал выделенный IP, проверяю, сайт именно на нем.
Дальше в панели VPS (где хостится база) задаю БД - пользователь - удаленный доступ - список IP - задаю этот IP и доступ к БД прекращается. Убираю IP все работает.

Где именно вы это задаёте? В какой именно панели? К какой БД?

Если речь о MySQL, то пользователи и базы данных заводятся в базе "mysql" в таблицах "user" и "db" соответственно.

Лог в помощь!
P
На сайте с 17.02.2009
Offline
197
#3
michaek:
Poljot, ип, на котором висит веб-сервер и ип, с которого он делает запросы вовне, могут отличаться

Извините за мою безграмотность, но я даже не понял вопрос.

Я так понимаю, что скрипт, который обращается к БД и имеет IP сайта.

Откуда возьмется другой IP ?

БД на VPS. Там все как я описал.

Скрипт сайта расположен на другом сервере на виртуальном хостинге, где для сайта закуплен статичный IP, который я и пытаюсь задавать для БД.

---------- Добавлено 05.01.2013 в 15:48 ----------

michaek:
Poljot, ип, на котором висит веб-сервер и ип, с которого он делает запросы вовне, могут отличаться

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

А какой выход, может Хостер это сможет сделать, если попросить, или при виртуалке это в принципе не возможно ?

Что делать, то же брать VPS для скрипта сайта ?

Только при VPS, IP на котором висит скрипт и IP для запросов во вне не будут отличаться ?

[umka]
На сайте с 25.05.2008
Offline
456
#4

Вам нужно узнать основной IP сервера, на котором расположен сайт, и открыть доступ к БД именно с этого IP.

Сделать это можно, например, если запросить скриптом с этого сайта (CURL-ом) какую-нибудь страницу, а потом посмотреть в логе, с какого IP был запрос.

ValdisRu
На сайте с 02.10.2006
Offline
139
#5
Poljot:
Что делать, то же брать VPS для скрипта сайта ?

Только при VPS, IP на котором висит скрипт и IP для запросов во вне не будут отличаться ?

а почему нельзя скрипт разместить на том же впс что и бд? по моему это был бы самый оптимальный вариант как не крути

если надо хоть в лоб расшибиться но чтоб у сайта (скрипта) был другой ип чем у бд - то вполне возможно сделать у впс два ип (на одном апач сидит, на другом бд)- хотя опять же по моему это лишняя головоломка т.к. бд вообще не рекомендуеися делать открытой из вне, скрипты к ней через локалхост (ип 127.0.0.1 как раз точно совсем другой чем у сайта))) обращаются

Обалденный заработок на социальных сетях (https://goo.gl/Qtsq6M)
P
На сайте с 17.02.2009
Offline
197
#6
'[umka:
;11283261']Вам нужно узнать основной IP сервера, на котором расположен сайт, и открыть доступ к БД именно с этого IP.
Сделать это можно, например, если запросить скриптом с этого сайта (CURL-ом) какую-нибудь страницу, а потом посмотреть в логе, с какого IP был запрос.

Скажите, а нельзя посмотреть IP с которого скрипт обращается к базе по логам в VPS, где она хостится ?

H
На сайте с 24.12.2012
Offline
0
#7
Poljot:
Скажите, а нельзя посмотреть IP с которого скрипт обращается к базе по логам в VPS, где она хостится ?

Если включен лог запросов - соответственно в нем и можно посмотреть.

Можно так же другими методами -

например посмотреть вывод tcpdump по порту мускуля

или посмотреть текущие запросы при помощи mysqladmin

M
На сайте с 24.10.2011
Offline
173
#8

Poljot, а что мешает посмотреть это в выводе команд status или show processlist?

[Удален]
#9

Вам действительно необходимо выяснить IP с которого идет соединение к серверу с БД. т.к. к примеру он может подключатся через внутреннюю сеть хостинг-провайдера...

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

P
На сайте с 17.02.2009
Offline
197
#10

Частично разобрался, вот такой ответ от хостера:

Приобрести услугу выделенного ip можно, стоимость 140 рублей в месяц, но для использования этого адреса в качестве исходящего требуется специальным образом настроить скрипты

1. Использовать функцию socket_bind:

<?php

// Создаем новый сокет:

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// Ваш выделенный IP-адрес:

$sourceip = 'xxx.xxx.xxx.xxx';

// Используем этот IP-адрес:

socket_bind($sock, $sourceip);

// Соединяемся с удаленным сервером:

socket_connect($sock, 'xmlsearch.yandex.ru', 80);

// Делаем запрос:

$request = 'GET /xmlsearch?query=' . $search . ' HTTP/1.0' ."\r\n" .'Host: xmlsearch.yandex.ru ' . "\r\n\r\n";

socket_write($sock, $request);

// Получаем и выводим ответ:

while(!socket_last_error($sock)){

if($buffer=socket_read($sock,512,PHP_NORMAL_READ)){

echo $buffer;

} }

// Закрываем сокет:

socket_close($sock);

?>

Здесь переменная $search обозначает только сам поисковый запрос, как это описано на сайте Яндекса, то, что написано после выражения «query=». При использовании PHP-интерпретатора как модуля Apache (по умолчанию на виртуальном хостинге именно так) работа с сокетами запрещена, поэтому следует использовать свой PHP-интерпретатор, собрать который можно по инструкции при конфигурировании обязательно указав ключ –enable-sockets.

2. C помощью curl_setopt:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_NOBODY, false);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_INTERFACE, "xxx.xxx.xxx.xxx");

curl_setopt($ch, CURLOPT_URL, $search);

$xml_data=curl_exec($ch);

curl_close($ch);

?>

Но куда вставлять это код, подскажите пожалуйста ?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий