GioBlog.info

Apuntes sobre GNU/Linux

SSH y re-direccionamiento de puertos desde máquinas virtuales (VirtualBox) hasta el host.

leave a comment »

Servidor Web Debian de pruebas bajo VirtualBox (Parte II)

En el post anterior hicimos un manual sobre la instalación de Debian 5.04. Esta instalación la hicimos sobre una máquina virtual de VirtualBox 3.2.4, en la cual dejamos un sistema muy básico para futuros proyectos.

En mi caso particular esta instalación la voy a utilizar para crear un servidor web de pruebas, así que no me interesa instalarle ninguna interfaz gráfica.

Lo primero que debemos hacer cuando tratamos de configurar un servidor es instalarle las herramientas necesarias para controlarlo remotamente.

Lo primero que vamos a hacer es autenticarnos en nuestro servidor y en seguida volvernos a autenticar pero como root.

Antes de instalar algo en nuestro sistema es importante actualizarlo mediante los siguiente comandos:

aptitude update

aptitude safe-upgrade

La primera de las instrucciones nos actualiza la lista de software disponible y la segunda actualiza los paquetes que se deban actualizar. En mi caso no hay paquetes por actualizar así que prosigo.

Instalación de SSH.

Para poder administrar el servidor de forma remota debemos instalar el paquete ssh. Dicha instalación la hacemos con el siguiente comando:

aptitude install ssh

Inmediatamente se nos muestra el listado de paquetes que se instalarán a lo cual debemos acceder escribiendo una y de yes.

Por seguridad es importante cambiar algunas cosas dentro de la configuración de ssh, por lo cual debemos editar su archivo de configuración. Esto lo podemos hacer con cualquier editor, pero en mi caso me gusta utilizar vim, y dado que no está instalado debo hacerlo con el siguiente comando:

aptitude install vim

De igual forma que con el paquete de ssh debo responder con una y.

Para configurar el ssh debo editar el archivo sshd_config ubicado en /etc/ssh/.

vim /etc/ssh/sshd_config

Una de las configuraciones que deberíamos cambiar por seguridad es el puerto por donde se escuchan las peticiones ssh que por defecto es el 22. En mi caso dado que es una máquina virtual no lo voy a cambiar, pero de querer hacerlo debo buscar la linea port 22 e ingresar el nuevo valor.

Algo que sí cambiaré será el tiempo necesario para autenticarse y la posibilidad de autenticarse como root. Para ello buscamos las lineas LoginGraceTime y PermitRootLogin.

Los valores que tienen por defecto los cambiamos por los que necesitemos, en mi caso el tiempo máximo para autenticarse lo cambié a 30 segundos, ya que son más que suficientes para escribir el usuario y la contraseña. Además en la opción para permitir conectarse como root cambio el yes por un no, de tal forma que no se permita conectarse remotamente como root, esto se hace como un método para mejorar la seguridad. El no permitir conectarse como root no quiere decir que cuando se haya creado la conexión no se pueda cambiar a usuario root, sino que la primera conexión que se crea entre una máquina remota y el servidor no se podrá llevar a cabo con el usuario root, inmediatamente después de haberme autenticado como otro usuario puedo autenticarme como root sin problemas.

Cuando hemos terminado de editar debemos guardar los cambios y reiniciar el servicio de ssh. En Debian para poder reiniciar este servicio debemos usar el siguiente comando:

/etc/init.d/ssh restart

Una vez configurado, el servidor ya estará listo para ser administrado remotamente. Para poder hacer esto se debe ingresar el comando:

ssh usuario@ip_equipo

En caso de haber cambiado el puerto por donde se escuchan las peticiones de ssh se debe usar este otro comando:

ssh -p puerto_nuevo usuario@ip_equipo

Como lo podrán comprobar esto se podrá realizar de forma fácil siempre y cuando estemos dentro de la misma red, pero cuando tratamos de conectarnos desde un lugar externo debemos lidiar con configuraciones en router para poder direccionar puertos, por ejemplo direccionar el puerto 22 de nuestro router al 22 de nuestro server. Desafortunadamente hay muchos tipos de router así que no puedo hacer un manual sobre esta configuración por lo que la dejaré por fuera.

En mi caso el problema va más allá, y posiblemente el de muchos también. En mi caso la instalación la he hecho en una máquina virtual, así que de entrada no tengo acceso a ella desde mi host o anfitrión.

Existen varias forma de solventar este problema, uno es configurar mi máquina virtual para que sea vista en la red como un equipo más, la otra es re-direccionar los puertos correspondientes de la máquina virtual a uno en mi host, de tal forma que cuando haga una petición al puerto de mi host este lo re-direccione al respectivo puerto en la máquina virtual y así pueda atender mi consulta. Precisamente he escogido este segundo método pues no me interesa que nadie más que el host pueda tener acceso a la máquina virtual.

Re-direccionar puertos de una máquina virtual (VirtualBox) al host.

Recapitulando sobre lo que deseo. Tengo el puerto 22 en una máquina virtual de VirtualBox llamada ServerTest que atiende peticiones ssh y necesito establecer una conexión de este tipo entre mi host y dicha máquina virtual, de tal forma que pueda administrar el servidor virtual desde el host o anfitrión.

Lo que necesito hacer para poder establecer este tipo de conexión es re-direccionar el puerto 22 de mi servidor virtual hacia el 2200 de mi host, de tal forma que al hacer peticiones al puerto 2200 de mi host el que responda sea el servidor virtual.

Pues bien, con todo claro manos a la obra.

Antes de hacer cualquier cosa se necesita tener claro lo siguiente, esta prueba se está realizando sobre Virtualbox 3.2.4 y como tal está probado para dicha versión. Para otras versiones se harán aclaraciones, pero no fueron probadas.

En dicha versión de VirtualBox se utiliza una máquina virtual con una única interfaz de red activada, la cual por defecto es de tipo Intel PRO/1000 MT Desktop. En otras versiones de VirtualBox el valor por defecto para las interfaces de red es de tipo PCnet para el cual se debe configurar de otra forma. Para verificar el tipo de tarjeta se debe ir en VirtualBox a la configuración de la máquina virtual a la obción Network seleccionar la tarjeta activa y en Advanced la opción Adapter Type.

Hecho este tipo de aclaraciones procederemos a la configuración.

Lo primero que debemos hacer es apagar nuestro servidor virtual con el comando:

shutdown -h now

En nuestro sistema host debemos abrir una terminal y escribir el siguiente comando:

VBoxManage setextradata “nombre_máquina” “VBoxInternal/Devices/tipo_tarjeta/numero_tarjeta/LUN#0/Config/nombre_redireccion/Protocol” TCP

VBoxManage setextradata “nombre_máquina” “VBoxInternal/Devices/tipo_tarjeta/numero_tarjeta/LUN#0/Config/nombre_redireccion/GuestPort” puerto_guest

VBoxManage setextradata “nombre_máquina” “VBoxInternal/Devices/tipo_tarjeta/numero_tarjeta/LUN#0/Config/nombre_redireccion/HostPort” puerto_host

Como podemos ver existen varios parámetros que debemos sustituir dependiendo de nuestra configuración particular. Dichos parámetros son:

nombre_máquina: este parámetro se debe sustituir por el nombre de la máquina virtual, en mi caso ServerTest.

tipo_tarjeta: este parámetros indicará el tipo de tarjeta de red que se está utilizando en la máquina virtual, en mi caso estoy utilizando una de tipo PRO/1000 así que debo sustituirla con e1000, para el caso de tarjeta tipo PCnet debemos utilizar pcnet.

numero_tarjeta: este indica el número de tarjeta que se va a utilizar. En mi caso como únicamente tengo activada una tarjeta y es precisamente la primero debo utilizar el valor 0 (Cero).

nombre_redirección: es un nombre que quiera darle a la regla de re-dicción que estoy creando, en mi caso utilizaré el nombre serverssh.

puerto_guest: este corresponde al puerto de la máquina virtual que quiero re-direccionar, en mi caso el 22.

puerto_host: este corresponde al puerto hacia donde voy a redireccionar, en mi caso 2200.

Una vez con todos estos datos aclarados las instrucciones que debo correr en mi caso para re-direccionar el puerto 22 de ServerTest al 2200 del host son:

Terminado este proceso ya tengo preparado el re-direccionamiento de los puerto así que procedo a iniciar la máquina virtual y a conectarme vía ssh desde mi host.

Cuando ha iniciado la máquina virtual debo abrir una terminal en mi host y escribir el siguiente comando

ssh -p 2200 gio@localhost

Recordemos que me debo conectar al puerto 2200 de mi host, el usuario gio corresponde al usuario con el que quiero conectarme en el servidor y el localhost me indica que efectivamente la conexión se hará a un puerto local. Nota: en vez de localhost puedo utilizar 127.0.0.1.

Cuando la conexión se crea se pregunta si se desea recordar al equipo con el que se está creando la conexión a lo cual respondemos yes.

En seguida se nos solicita la clave para el usuario.

Y se crea la conexión con la máquina ServerTest. De esta forma podemos administrar nuestra máquina virtual desde una terminal del host mediante una conexión ssh.

En próximos post administraré este servidor mediante ssh, y dado que lo usaré como un servidor web de pruebas también me tocará re-direccionar el puerto 80.

Nota importante

Mientras desarrollaba este manual me encontré con un inconveniente en mi máquina virtual, y es que como en un determinado momento tuve que cambiar de máquina virtual, pero por supuesto conservando el mismo disco duro virtual, al parecer en el cambio de hardware se me estropeo la interfaz de red eth0.

El error que me enviaba era casi imperceptible, pero de cualquier forma se podía mirar mientras se hacía la carga del sistema. El error era:

Erro:

SIOCSIFADDR No such device

eth0 error while getting interface flags

Seguidamente al cargar el sistema no se tenía acceso a internet y al ejecutar la instrucción ifconfig no se mostraba la interfaz eth0 sino únicamente lo. Para verificar si efectivamente el sistema tenía acceso a eth0, corrí el siguiente comando:

dmesg | grep eth

Y observé que entre las lineas que me mostraba estaba la siguiente:

Sale:

udev:renamed netmask interfaces eth0 to eth3

Por lo me di cuenta que el problema era que se había renombrado a la interfaz eth0 como eth3. Para corregir esto únicamente se debe editar el archivo /etc/network/interfaces y sustituir donde dice eth0 por eth3 y reiniciar el servicio de red.

Anuncios

Written by Gio

11 junio, 2010 a 11:16

Publicado en Debian, Linux, Manuales

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: