En algunas ocasiones necesitamos acceder a algún servicio o aplicación que usa un puerto diferente al que por defecto tenemos permitido.
Esta mañana en el trabajo me he encontrado con la siguiente situación. Deseaba agregar el repositorio UbuntuGis para instalar algunos paquetes del mismo (Grass y Quantum GIS entre otros), pero al añadirlo:
sudo add-apt-repository ppa:ubuntugis/ppa
Me he encontrado con el siguiente problema:
Executing: gpg –ignore-time-conflict –no-options –no-default-keyring –secret-keyring /etc/apt/secring.gpg –trustdb-name /etc/apt/trustdb.gpg –keyring /etc/apt/trusted.gpg –primary-keyring /etc/apt/trusted.gpg –keyserver keyserver.ubuntu.com –recv 6B827C12C2D425E227EDCA75089EBE08314DF160gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.comgpgkeys: HTTP fetch error 7: couldn’t connect to hostgpg: no valid OpenPGP data found.gpg: Total number processed: 0Executing: gpg –ignore-time-conflict –no-options –no-default-keyring –secret-keyring /etc/apt/secring.gpg –trustdb-name /etc/apt/trustdb.gpg –keyring /etc/apt/trusted.gpg –primary-keyring /etc/apt/trusted.gpg –keyserver keyserver.ubuntu.com –recv 6B827C12C2D425E227EDCA75089EBE08314DF160gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.comgpgkeys: HTTP fetch error 7: couldn’t connect to hostgpg: no valid OpenPGP data found.gpg: Total number processed: 0
Esto sucede porque existe un firewall (el de mi trabajo) y está capando el puerto 11371, el que usa el servidor de claves en la dirección: keyserver.ubuntu.com
Existen dos formas básicas de solucionarlo, la primera sería hablar con el departamento de informática para que no bloqueran por el puerto especificado, pero evidentemente esto es inviable y, sobre todo, lento. La segunda es usar el maravilloso SSH para crear un tunel sobre un servidor externo y evitar el firewall, usando nuestra máquina como servidor local y redireccionando todas las salidas sobre el puerto especificado, es bastante sencillo y nos saltaremos el cortafuegos gustosamente:
ahornero@asubuntu:~$ sudo add-apt-repository ppa:ubuntugis/ppa
[sudo] password for ahornero:
Executing: gpg –ignore-time-conflict –no-options –no-default-keyring –secret
keyring /etc/apt/secring.gpg –trustdb-name /etc/apt/trustdb.gpg –keyring
/etc/apt/trusted.gpg –primary-keyring /etc/apt/trusted.gpg –keyserver
keyserver.ubuntu.com –recv
6B827C12C2D425E227EDCA75089EBE08314DF160
gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com
gpg: key 314DF160: “Launchpad ubuntugis-stable” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
¡Y listo!, el uso que hagáis de lo que os he explicado es vuestra responsabilidad, evidentemente se pueden hacer otras muchas cosas, pero lo que trato de mostraros aquí es una sencilla forma de evitar un cortafuegos para un uso concreto, en este caso agregar un repositorio.
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
¡Impresionante! Muy buena información. Muchas gracias.
Saludos.
Un tutorial fantástico.
Gracias Alberto.
Esta bien, pequeño saltamontes, pero ¿que ocurre si desde tu trabajo tampoco puedes acceder al puerto 22 del ordenador externo?
No sufráis, que si vivís en un entorno corporativo con proxy fascista que solo abre la mano para los puertos 80, 443 y 21, sigue habiendo salvación. El ordenador de casa encendido y esperando cumplir vuestras órdenes. Mas información aquí..
http://crysol.org/es/node/42
http://crysol.org/es/node/1355
Muy muy interesante, ¡tomo nota!
Tengo una duda que no me ha quedado clara. Después de crear el tunel con el servidor con servicio SSH, ¿donde ejecutas la orden para agregar el repositorio? ¿en tu máquina del trabajo o en el servidor de la universidad?
Que yo sepa para usar el servidor de claves no es necesario abrir ningún puerto.
Yo los tengo todos cerrados y el comando add-apt-repository me funciona bien, a excepción de cuando el puñetero keyserver.ubuntu.com está caído o no disponible, lo cual es muy a menudo.
Así que he cambiado, en el fichero /usr/share/pyshared/softwareproperties/ppa.py, la siguiente línea:
#res = subprocess.call(
# ["apt-key", "adv", "--keyserver", "keyserver.ubuntu.com",
# "--recv", signing_key_fingerprint[0]])
res = subprocess.call(
["apt-key", "adv", "--keyserver", "wwwkeys.fr.pgp.net",
"--recv", signing_key_fingerprint[0]])
Así en lugar de usar el saturado servidor de claves de ubuntu, uso uno más cercano a mi país y que funciona muchísimo mejor. Hasta ahora no me ha fallado nunca.
Perdón, puse el que no es, el servidor de claves que uso y que he comprobado que va bien y rápido es: "wwwkeys.de.pgp.net".
@Fernando: Está claro, si no podemos salir por el puerto 22 la cosa se complica un poco, pero nada más lejos de la realidad. Muchos administradores de sistemas consideran que una red está protegida al restringir la comunicación por cierto puertos, y se equivocan. Muchas gracias por añadir este dato.
@Gon: Habría que hacerlo desde tu máquina local. Toda salida que se realice atendiendo a la dirección keyserver.ubuntu.com saldría se iría a localhost y saldría por la red de la universidad, al haber establecido ese tunel. Si tienes alguna otra duda coméntala.
@Simón: Básicamente el problema viene de la comunicación que se establece con esa URI, que no es a través de http, ni 443 ni 8080, si no por el puerto que indico en la entrada y que nos podemos encontrar capado en muchas redes.
Genial Alberto. El tema de "cerrar" puertos tiene más sentidos de fuera hacia dentro que de dentro hacia fuera como tú haces. Pero entiende que para el 99% de los casos es un método útil para tener una buena seguridad perimetral en la red del centro.
Excelente información "ahornero", pero todavía tengo una duda y es la siguiente:
Segun entiendo existen dos maquinas en este diagrama:
1) La primer maquina esta en una red del trabajo( en este caso se llamara LOCAL ), donde imaginaremos que solo tiene abiertos estos puertos de salida "22,80,DNS" y por lo tanto no puede salir utilizando el puerto "11371".
2) La segunda maquina esta en una red de casa( en este caso se llamara REMOTE ), donde tiene en ejecución un servidor SSH por el puerto 22 y no tiene restricciones de salida. Además es visible desde internet utilizando esta dirección "ts.uco.es".
Entonces ejecutas el siguiente comando:
ssh nombre_usuario@ts.uco.es -L 11371:keyserver.ubuntu.com:11371
Mi duda es la siguiente, si se conecta con el servidor remoto utilizando SSH, las ordenes que se envíen atraves de esta "secure shell" se ejecutaran en la maquina REMOTE. Entonces el repositorio agregado, se agregara en la maquina remota y no el maquina LOCAL. ¿Es esto correcto?
¿Que es lo que permite "-L" en el comando ssh?
Soy un poco preguntón :-)
Saludos!!