2010-07-25 17 views
8

Estoy desarrollando un sitio web para mi escuela. En esa escuela autenticamos a los usuarios a través de LDAP, por lo que hubo una idea de hacer lo mismo a través de la escuela. En ese sitio, todo está funcionando perfectamente, pero durante el desarrollo, a menudo necesito probar si esa solución funciona o no. Para no comprometer mis cambios tan a menudo, quiero probar este sitio en mi computadora local, pero para conectarme con LDAP quiero usar el túnel ssh. En la red de la escuela tenemos un servidor a través del cual nos conectamos dentro de nuestra red escolar. Su dirección es phoenix.lo5.bielsko.pl. Dentro de esta red tenemos un servidor LDAP con puertos 389 y 636 abiertos. Su dirección es auth.lo5. No tengo acceso a auth.lo5 a través de SSH, solo me puedo conectar con él para obtener algunas entradas de LDAP. Por lo tanto, he tratado de ejecutar túnel SSH ejecutando:PHP conectar a través de túnel SSH a LDAP en otra red

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

Entonces, me he fijado en mi /etc/hosts que auth.lo5 está señalando a 127.0.0.1. Estoy conectando a LDAP en PHP de tal manera:

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

Pero estoy de error Can't contact LDAP server. Creo que ese problema podría estar en phoenix.lo5.bielsko.pl en su configuración de daemon SSH o en argumentos pasados ​​a la función ldap_connect(). ¿Puede decirme qué debo configurar en sshd_config o en los argumentos pasados ​​al ldap_connect para que funcione?

He publicado la misma pregunta en similar thread, pero nadie ha respondido a mi pregunta.

P.S. En mi /etc/ssh/sshd_config tengo línea de AllowTcpForwarding yes

+0

Si usa las herramientas de línea de comandos LDAP, ¿funcionan? Intenta usar 'ldapwhoami -H ldaps: // auth.lo5' primero - PHP no informa tantos mensajes útiles como las utilidades LDAP de la línea de comando. – Borealid

+0

@Borealid, nuestro servidor LDAP no permite enlazar de forma anónima, así que he escrito 'ldapwhoami -D cn = lo5-www, ou = servicios, dc = auth, dc = lo5 -W -H ldaps: // auth .lo5' y en la respuesta fénix es 'dn: cn = lo5-www, ou = servicios, dc = auth, dc = lo5', pero en mi escritorio es' ldap_sasl_bind (SIMPLE): No se puede contactar servidor LDAP (-1) ' – Hfaua

+1

Hasta que las herramientas de la línea de comandos funcionen, su túnel SSH no está activo. Dado que el comando que estás usando es puntual (y, sinceramente, estoy * impresionado *, sabes cómo hacerlo - ¡el túnel SSH es complicado!), Solo tengo una sugerencia más. Intente utilizar un puerto sin privilegios (superior a 1024) para el puerto local (como en, 'ssh -L 9999: auth.lo5.bielsko.pl: 636'). ¡También especifique un FQDN! Aún así, prueba con las herramientas de línea de comandos. ¡Y asegúrese de que funcionen desde phoenix.lo5 a auth.lo5! – Borealid

Respuesta

0

Trate de reemplazar todas las instancias de auth.lo5 con localhost:

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

Si eso no funciona, pruebe a desactivar SSL para ver si funciona:

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

+0

Ambas soluciones no funcionan. Creo que no debería ser localhost en los comandos ssh, porque el servidor LDAP es accesible para Phoenix no por 'localhost' sino 'auth.lo5'. 'localhost' apunta a Fénix. Tal vez tengo que poner algo a mi cliente o servidor ssh-configs? – Hfaua

1

Si lo tengo bien phoenix.lo5 y auth.lo5 son 2 máquinas diferentes. Si es así, debe crear un túnel para la máquina ssh y luego enviar las consultas ldap a la máquina correcta.

Su comando: ssh -L 636:auth.lo5:636 [email protected] es correcto si phoenix.lo5.bielsko.pl puede resolver auth.lo5 a través de DNS o/etc/hosts, si no necesita usar su dirección IP interna.

Además, si desea utilizar el puerto 636 en su PC, debe ejecutar el comando como superusuario (root o con sudo) lo que necesita para utilizar un puerto alto (más de 1024) según lo declarado por Borealid

Una vez que el túnel está listo, debe apuntar a localhost para hacer las consultas

+0

Por supuesto 'phoenix' y' auth' son máquinas diferentes y usamos nuestro DNS para resolver sus nombres. Creo que las direcciones no son un problema real aquí. He usado 'tcpdump' para comprobar si hay una conexión real a través del túnel y si' ldapwhoami' está enviando paquetes correctamente. El resultado fue confuso: 'local = [tunnel] => phoenix => auth (consulta de LDAP) => phoenix = [tunnel] => local', así que creo que' ldapwhoami' debería dar la respuesta correcta, pero obtengo un error 'ldap_sasl_bind (SIMPLE): No se puede contactar al servidor LDAP (-1)'. Tengo sudo en 'phoenix', así que los puertos de menos de 1024 no son un problema, creo. ¿No crees que es extraño? – Hfaua

+0

Estoy tropezando con este mismo problema. Mi pensamiento actual es que el apretón de manos de SSL está fallando. Intenté usar una entrada local de/etc/hosts para falsificar el nombre de host, pero eso aún no funcionó. –

1

Me encontré con este mismo problema. Correr con -d1 me mostró este error:

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

Podría ser que está golpeando a un problema similar.

que era capaz de fingir a cabo mediante la ejecución:

sudo hostname someserver.mydomain.com

que causó SSL para asumir que estaba hablando con el destino adecuado.

Cuestiones relacionadas