PHP подключается через туннель SSH к LDAP в другой сети

Я разрабатываю веб-сайт для моей школы. В этой школе мы аутентифицируем пользователей через LDAP, поэтому возникла идея сделать то же самое через сайт школы. На этом сайте все работает отлично, но во время разработки мне очень часто приходится проверять, работает ли такое решение или нет. Чтобы не так часто вносить свои изменения, я хочу протестировать этот сайт на своем локальном компьютере, но для соединения с LDAP я хочу использовать ssh-туннель. В школьной сети у нас есть один сервер, через который мы подключаемся внутри нашей школьной сети. Его адрес phoenix.lo5.bielsko.pl. Внутри этой сети у нас есть сервер LDAP с открытыми портами 389 и 636. Его адрес auth.lo5. У меня нет доступа к auth.lo5 через SSH, я могу подключиться к нему только для получения некоторых записей LDAP. Итак, я попытался запустить SSH-туннель, запустив:

ssh -L 636:auth.lo5:636 [email protected]

Затем я установил в своем /etc/hosts, что auth.lo5 указывает на 127.0.0.1. Я подключаюсь к LDAP в PHP таким образом:

ldap_connect('ldaps://auth.lo5', 636);

Но я получаю ошибку Can't contact LDAP server. Я думаю, что проблема может заключаться в phoenix.lo5.bielsko.pl в его конфигурации демона SSH или в аргументах, переданных функции ldap_connect(). Можете ли вы сказать мне, что я должен установить в sshd_config или в аргументах, переданных в ldap_connect, чтобы он заработал?

Я разместил тот же вопрос в похожей теме, но никто не ответил на мой вопрос.

P.S. В моем /etc/ssh/sshd_config у меня есть строка AllowTcpForwarding yes


person Hfaua    schedule 25.07.2010    source источник
comment
Если вы используете инструменты командной строки LDAP, они работают? Попробуйте сначала использовать ldapwhoami -H ldaps://auth.lo5 — PHP не выдает столько полезных сообщений, сколько утилиты LDAP из командной строки.   -  person Borealid    schedule 25.07.2010
comment
@Borealid, наш сервер LDAP не позволяет выполнять анонимную привязку, поэтому я набрал ldapwhoami -D cn=lo5-www,ou=services,dc=auth,dc=lo5 -W -H ldaps://auth.lo5, и на phoenix ответ dn:cn=lo5-www,ou=services,dc=auth,dc=lo5, но на моем рабочем столе это ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)   -  person Hfaua    schedule 25.07.2010
comment
Пока не заработают инструменты командной строки, ваш туннель SSH не заработает. Так как команда, которую вы используете, точна (и, честно говоря, я впечатлен, что вы знаете, как это сделать — туннелирование SSH сложно!), у меня есть только одно предложение. Попробуйте использовать непривилегированный порт (выше 1024) в качестве локального порта (например, ssh -L 9999:auth.lo5.bielsko.pl:636). Также укажите полное доменное имя! Тем не менее, проверьте с помощью инструментов командной строки. И убедитесь, что они работают от phoenix.lo5 до auth.lo5!   -  person Borealid    schedule 26.07.2010


Ответы (4)


Если я правильно понял, phoenix.lo5 и auth.lo5 — это две разные машины. Если это так, вам нужно создать туннель к машине ssh, а затем отправить запросы ldap на нужную машину.

Ваша команда: ssh -L 636:auth.lo5:636 [email protected] верна, если phoenix.lo5.bielsko.pl может разрешить auth.lo5 через DNS или /etc/hosts, если нет, вам нужно использовать его внутренний IP-адрес.

Кроме того, если вы хотите использовать порт 636 на своем компьютере, вам нужно запустить свою команду от имени суперпользователя (root или с помощью sudo), иначе вам нужно использовать высокий порт (выше 1024), как указано Borealid.

После того, как туннель запущен, вы должны указать на локальный хост для выполнения запросов.

person Manuel    schedule 26.07.2010
comment
Конечно, phoenix и auth — это разные машины, и мы используем наш DNS для разрешения их имен. Я думаю, адреса здесь не проблема. Я использовал tcpdump, чтобы проверить, есть ли реальное соединение через туннель и правильно ли ldapwhoami отправляет пакеты. Результат смутил: local =[tunnel]=> phoenix => auth (LDAP querying) => phoenix =[tunnel]=> local, поэтому я думаю, что ldapwhoami должен дать правильный ответ, но получаю ошибку ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1). У меня есть sudo на phoenix, поэтому я думаю, что порты под 1024 не проблема. Вам не кажется это странным? - person Hfaua; 27.07.2010
comment
Я натыкаюсь на эту же проблему. Моя текущая мысль заключается в том, что рукопожатие SSL не работает. Я пытался использовать локальную запись /etc/hosts для подделки имени хоста, но это пока не сработало. - person Mat Schaffer; 14.01.2015

Я столкнулся с этой же проблемой. Запуск с -d1 показал мне эту ошибку:

TLS: hostname (mylaptop.local) does not match common name in certificate (*.mydomain.com). TLS reverse lookup of 'localhost' is 'mylaptop.local', checking if that matches the certificate common name

Может быть, вы столкнулись с похожей проблемой.

Я смог подделать это, запустив:

sudo hostname someserver.mydomain.com

что заставило SSL предположить, что он разговаривает с правильным хостом.

person Mat Schaffer    schedule 13.01.2015

Я также получал ошибку hostname (mylaptop.local) does not match common name in certificate (*.mydomain.com). Однако я не хотел редактировать имя хоста моей машины, чтобы оно совпадало с именем сервера LDAP. Вместо этого я отредактировал файл hosts (etc/hosts в Linux), добавив строку, которая будет перехватывать запросы к серверу LDAP, например:

127.0.0.1 ldap.server.com

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

person Austin    schedule 16.09.2019

Попробуйте заменить все экземпляры auth.lo5 на localhost:

ssh -L 636:localhost:636 [email protected] и ldap_connect('ldaps://localhost', 636);

Если это не работает, попробуйте отключить SSL, чтобы проверить, работает ли это:

ssh -L 389:localhost:389 [email protected] и ldap_connect('localhost', 389);

person Charles    schedule 25.07.2010
comment
Оба решения не работают. Я думаю, что это не должно быть localhost в командах ssh, потому что сервер LDAP доступен для phoenix не по «localhost», а по «auth.lo5». «localhost» указывает на phoenix. Может быть, мне нужно что-то добавить в мои клиентские или серверные ssh-configs? - person Hfaua; 25.07.2010