Navegar desde un ordenador que lo tiene prohibido
Introducción
Imagínatelo, te dan un servidor en housing, pero por políticas de seguridad no te dejan acceder a Internet desde el. Solo puedes acceder a través de ssh. Necesitas actualizar el sistema. Como te lo curras?
La idea
Una de las funcionalidades de ssh es el túnel inverso. Podemos hacer que todo el tráfico que vaya a un puerto del servidor se redirija a otra maquina, a través de nuestra propia conexión a Internet.
Primera prueba
Establecemos una conexión ssh al servidor, creando el túnel inverso que redirija todo el tráfico desde el puerto 1234 del servidor al puerto 80 (http) de nuestro repositorio de Debian preferido:
ssh -R 1234:ftp.fr.debian.org:80 root@servidor
Una vez en el servidor editamos el fichero /etc/apt/sources.list
para
decirle como llegar al repositorio. Comentamos todas las líneas de los
repositorios que utilizamos y ponemos la siguiente:
deb http://localhost:1234/debian/ lenny main contrib non-free
Ahora podemos utilizar el aptitude normalmente:
web:~# aptitude update
Des:1 http://localhost lenny Release.gpg [189B]
Des:2 http://localhost lenny/main Translation-es [679kB]
Ign http://localhost lenny/contrib Translation-es
Ign http://localhost lenny/non-free Translation-es
Des:3 http://localhost lenny Release [74,5kB]
Des:4 http://localhost lenny/main Packages [6978kB]
Des:5 http://localhost lenny/contrib Packages [97,1kB]
Des:6 http://localhost lenny/non-free Packages [122kB]
Descargados 7951kB en 2min1s (65,6kB/s).
Leyendo lista de paquetes... Hecho
Current status: 123 actualizados [+123], 1 nuevo [+1].
Sin embargo esta solución es incompleta, porque solo nos permite utilizar un repositorio, lo que nos impide realizar las actualizaciones de seguridad además de las actualizaciones ordinarias, por ejemplo.
Segundo intento: Help me PROXY!
Necesitamos un proxy que nos de acceso a todo internet. Instalaremos Squid para que haga de proxy-cache en un ordenador que se pueda conectar a Internet (la nuestra, por ejemplo); para saber como buscar algún manual en Internet, esta muy documentado.
Seguidamente creamos el túnel inverso (desde el ordenador donde este el proxy cache):
ssh -R 1234:localhost:3128 servidor
Una vez en el servidor editamos el fichero /etc/apt/apt.conf (si no existe lo creamos) y especificamos el proxy:
Acquire {
Retries "0";
HTTP {
Proxy "http://localhost:1234";
};
};
Ahora ya podemos actualizar nuestro sistema, con todos los repositorios que queramos:
web:~# aptitude update
Des:1 http://ftp.fr.debian.org lenny Release.gpg [189B]
Des:2 http://ftp.fr.debian.org lenny/main Translation-es [679kB]
Obj http://security.debian.org lenny/updates Release.gpg
[...]
Des:46 http://ftp.fr.debian.org lenny/non-free 2008-10-14-0840.35.pdiff [784B]
Descargados 7749kB en 1min50s (70,2kB/s).
Leyendo lista de paquetes... Hecho
Current status: 123 actualizados [+80], 16 nuevos [-54].
There are 2 newly obsolete packages: libdb4.3, libdb4.4
El proxy no solo vale para el apt...
Un momento! Y si necesito navegar para descargar algo con otro sistema que no sea apt? Necesito navegar!
Solución general
Para las aplicaciones de consola suele bastar con definir el proxy en la
variable http_proxy
:
web:~# export http_proxy=http://localhost:1234
web:~# wget http://www.google.es
--2008-10-21 00:29:46-- http://www.google.es/
Resolviendo localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:1234... conectado.
Peticin Proxy enviada, esperando respuesta... 200 OK
Longitud: no especificado [text/html]
Saving to: `index.html'
[ <=> ] 6.415 --.-K/s in 0,1s
2008-10-21 00:29:46 (56,5 KB/s) - `index.html' saved [6415]
También vale para navegar con el w3m y para la librería urllib2 que usa buildout, por ejemplo.
Subversion
Hay que editar el fichero ~/.subversion/servers. En la sección [global]
:
[global]
http-proxy-host = localhost
http-proxy-port = 1234
Con esto es suficiente para poder obtener copias de trabajo del subversion. Si también queremos enviar modificaciones, habrá que asegurarse que el proxy-cache soporta los métodos PROPFIND, REPORT, MERGE, MKACTIVITY y CHECKOUT. En el FAQ de subversion explican esto con más detalle. http://subversion.tigris.org/faq.html#proxy