¿Cómo lanzar un VPS?: 6 Tips Fundamentales

¿Qué es un VPS?

Primero y antes que nada debemos definir esta "variable". Bueno, un VPS es un Servidor Privado Virtual, básicamente es Infraestructura como Servicio (IaaS) que le rentas a una compañía o en palabras más simples, un servidor (computadora accesible desde Internet para fines variados) que alguien te presta y/o facilita mientras le pagues una cuota cada cierto tiempo, esta infraestructura es cuidada y mantenida en las instalaciones (datacenters) de la empresa y tu la puedes administrar de manera remota vía SSH y/o VNC por ejemplo.

¿Porqué querrías tener un VPS?


Si necesitas tener un servidor para lo que sea (hospedar un sitio web, usar una computadora remota a través de VNC, o bien hacer pruebas isoladas de software y configuraciones entre otras cosas) un VPS (Linux) es y siempre será tu mejor opción, sobretodo si eres Linuxero y has manejado antes alguna distro a través de la línea de comandos. A diferencia de un "hosting" que está muy capado en todos los sentidos (tanto de acceso como de capacidades) un VPS es potente, te da la libertad que quieras y no se mete en tus asuntos, además de que tiene más durabilidad y escalabilidad a largo plazo al ser básicamente "una computadora" que puede agrandar en capacidades con un sólo click. Algunas personas consideran que una de las variables a considerar para saber si ocupas un Hosting, un VPS o un Servidor dedicado son los hits únicos que recibe tu sitio web, y esta suele ser una métrica bastante adecuada... Sin embargo, mi consejo personal es SIEMPRE irse a por un VPS a menos que puedas montar (y realmente mantener) un servidor dedicado al 100%, no se aventuren con los hostings que simplemente no escalan y de todos modos les van a costar dinero. Vale mejor jugar a la segura. Ahora bien, si comparamos los VPS con los servidores dedicados, aún en esta parte yo apostaría por un VPS (o un mix de VPS + Dedicados, como lo que tengo acá montado para Xenode Systems) ya que un VPS te quita de encima todo tipo de costos tanto económicos como podrían ser los gastos en electricidad y/o internet y también los de manpower que serían los referentes a tener que estar manteniendo "el fierro" (hardware) y todo lo que éste conlleve diariamente (optimizaciones, cambios de piezas, implementaciones de seguridad y planes de contingencia etc) para tener tus sitios arriba, cosa que puede ser un tedio (y a veces pérdida de tiempo) si no estás acostumbrad@ y/o capacitado para ello. Todo eso se resume a que por algo así como $20 USD mensuales (hablando de un paquete que podría caber dentro de los ya potentes claro está) puedas rentar una máquina con las siguientes características:

  • 2GB RAM
  • 40GB SSD
  • Procesador Dual Core
  • 3TB de transferencia en banda ancha
  • ~1Gbps de conexión a internet simétrica

Entre otras cosas sin tener que preocuparte de la factura eléctrica, los achaques de la manutención (como el tener que cambiar una pieza si se quema en un pico de voltaje) o el costo de la conexión a Internet como tal. Cabe destacar que existen planes de VPS desde $5 USD al mes también (y como veremos más adelante, barato no significa "pequeño" per sé).

Encontrando al mejor proveedor


Hay varios provedores de VPS en el mundo, de los más conocidos están Amazon Web Services (AWS), DigitalOcean y Linode. Pero fuera de los "pesos pesados" la realidad es que hay decenas de ellos, todos con diferentes características y prestaciones. Yo personalmente he usado AWS y DigitalOcean, de los demás sólo conozco sus prestaciones y precios (aunque no los he usado directamente). Sin embargo les puedo decir que el mejor de todos (al menos para mi) es DigitalOcean, ya que sus VPS funcionan únicamente con SSD's, son súper asequibles en precio, la interfaz de usuario (dashboard) es bastante cómoda de manejar (además de sencilla sin perder potencia/utilidad) y presentan varias cosas interesantes (como máquinas potentes a excelentes precios para empezar) que explico a fondo en este artículo.

1) Lanzando tu primer VPS


Para esta parte del tutorial, vamos a necesitar crearnos una nueva cuenta en DigitalOcean. Para esto haz click aquí y cuando se te solicite entra los cupones ALLSSD10 y/o DODROPLET para obtener $10 USD completamente gratis, dicho saldo será abonado a tu cuenta para poder lanzar tu primer VPS en el servicio. Con este saldo, puedes elegir entre un VPS de $5 USD al mes (2 meses gratis con el cupón) que cuenta con las siguientes características:

  • 512MB  RAM/ 1 CPU
  • 20GB SSD DISK
  • 1TB TRANSFER

O bien, 1 mes gratis de un VPS un tanto más grande ($10 USD/mo) con las siguientes características:

  • 1GB RAM / 1 CPU
  • 30GB SSD DISK
  • 2TB TRANSFER

La ventaja de DigitalOcean es que no sólo acepta pagos con tarjeta de crédito y/o Paypal para mantener tus "droplets" (servidores) activos, sino que también provee estos cupones/sistema de referidos que puedes utilizar para alimentar con un tanto de saldo a tu cuenta de manera gratuita (cuestión bastante útil considerando la situación económica actual en muchos lugares). Por otro lado, no es que los VPS cuesten en sí eso que se muestra ahí en la lista al mes (cuestan menos generalmente por cuestiones de consumo real); Los precios de lista se basan en el límite normal establecido, si por alguna razón tu VPS no llegase a consumir lo que dicta su límite en USD al mes, dicho saldo a favor se queda en tu cuenta para futuros cobros (cosa que suele pasar en varios casos).

 Ahora bien, una vez activada nuestra cuenta (y con el saldo de regalo) lo que tenemos que hacer es generar nuestro primer "droplet" y/o VPS desde la interfaz de administración de DigitalOcean, cosa que es bastante sencilla: Rellenamos el nombre del Hostname, elegimos cuál plan de VPS queremos, en qué región lo queremos, qué distro/imagen va a usar y listo.

NOTA: En mi caso, yo elegí Ubuntu 14.04 de 32 bits limpio como distro y será la que use en mis ejemplos.



Una vez creado el droplet, los de DigitalOcean nos enviarán el login de root por e-mail al correo que hayamos elegido para abrir nuestra cuenta, tomamos nota de la contraseña y proseguimos.

2) Cambiar contraseña de Root

Tener la contraseña de root de un VPS en el correo electrónico no es buena idea, por lo tanto una vez creado nuestro droplet nos iremos a la pestaña de Access>Console Access, misma que nos dará acceso a una Terminal VNC del droplet para trabajar directamente con el sistema sin necesidad (aún) de conectarnos remotamente vía SSH:


Estando en la consola como root, simplemente corremos el siguiente comando:

sudo passwd

Escribimos nuestro nuevo password para root y listo.

3) Crear un nuevo usuario estándar

Ahora necesitamos crear un nuevo usuario estándar (sin privilegios administrativos) que sea el que pueda accesar por SSH al VPS, esto por cuestiones de seguridad. Crear un nuevo usuario es tan sencillo como correr (como root en la terminal VNC del VPS):

adduser usuario

Reemplazando la palabra usuario por el nombre de usuario que queramos manejar. Este comando nos pedirá entrar una nueva contraseña para dicho usuario y sus datos (tales como nombre, teléfono etc). Rellenamos todo y ya estamos listos para proseguir.

4) Tweaks de SSH

Ahora tenemos que configurar el acceso SSH de nuestro VPS, yo lo que siempre hago es lo siguiente:

  • Cambiar el puerto 22 por otro
  • Evitar el login vía SSH a Root
  • Configurar el acceso sólo a través de llaves RSA y no passwords

Esto se hace cambiando algunos settings en el archivo /etc/ssh/sshd_config de nuestro VPS con el siguiente comando (como root en consola):

sudo nano /etc/ssh/sshd_config

Y lo que queremos hacer en él es:

  • Cambiar la variable Port de 22 a algo de nuestra elección (y alto) como 8866
  • Cambiar la variable PermitRootLogin a no
  • Añadir la variable AllowUsers user (Reemplazando user por el username del usuario estándar que creamos hace rato)
  • Descomentar la variable PasswordAuthentication yes

Guardamos nuestros cambios en dicho archivo con Ctrl+O, ENTER y luego salimos con Ctrl+X. En un momento les daré un ejemplo de cómo queda dicho archivo (ya que nos falta un cambio).

5) Firewall

Ahora (siguiendo como root en consola) correremos los siguientes comandos:

1. sudo ufw reset
2. sudo ufw enable
3. sudo ufw default deny incoming
4. sudo ufw default allow outgoing
5. sudo ufw allow 8866/tcp

Esto lo que hace es:

  1. Resetea el firewall (borrando reglas existentes del proveedor)
  2. Lo vuelve a encender
  3. Bloquea las conexiones entrantes
  4. Acepta las conexiones salientes
  5. Nos habilita el acceso entrante a través del puerto 8866 TCP (el que configuramos para nuestro SSH en el paso previo)

Recuerda desbloquear todos los puertos que vayas a ocupar en tu VPS, ya sean el 80/tcp (HTTP) el 21/tcp (FTP) u otros (pueden ser UDP obviamente también); Bajo este setup todos quedan bloqueados a entrada excepto los que tu le digas al firewall explícitamente que desbloquee para tí. Puedes checar los puertos abiertos con sudo ufw status cuando quieras.

 6) Configurar acceso RSA

Para configurar el acceso RSA, (usando llaves SSH en lugar de contraseñas para entrar al VPS remotamente) ocupamos primero dentro del VPS correr los siguientes comandos:

1. sudo mkdir /home/usuario/.ssh
2. sudo touch /home/usuario/.ssh/authorized_keys
3. sudo touch /home/usuario/.ssh/known_hosts
4. sudo chown -R usuario:usuario /home/usuario/.ssh

(Reemplazando la palabra usuario en los comandos por el username del usuario estándar que creamos hace rato). Ahora necesitamos reiniciar nuestro VPS con sudo reboot para que las nuevas reglas del Firewall y de SSHD tomen efecto y mientras, en nuestra máquina cliente (desde donde queramos conectarnos al VPS vía SSH) crearemos un par de claves para usar como ID con los siguientes comandos (como tu usuario normal en una consola):

1. mkdir ~/.ssh
2. cd ~/.ssh
3. ssh-keygen -t rsa

El tercer comando nos hará una serie de preguntas como el nombre de la clave y si queremos que tenga alguna passphrase, mi recomendación es usar el nombre del host+key (por ejemplo si tu máquina se llama "Venus" tu clave idealmente se podría llamar venusKey) y por favor déjenlas sin passphrase (de otra manera pierde sentido la autenticación automática y segura sin contraseña que este método nos provee).

 NOTA: Recomiendo generar un par de claves por cada cliente que vayas a utilizar para gestionar tu VPS vía SSH según el caso.

Acto seguido debemos copiar la clave pública generada al VPS con el siguiente comando (estando dentro de nuestro directorio ".ssh" todavía en nuestra terminal de la máquina cliente):

cat hostKey.pub | ssh user@my.vps.ip -p 8866 "cat >> ~/.ssh/authorized_keys"

Cambiando:

  • hostKey.pub por el nombre de tu clave
  • user por el nombre de usuario estándar que generamos en el VPS
  • my.vps.ip por la dirección IP de tu VPS (que encontrarás en la pestaña de "Droplets" en DigitalOcean)
  • El puerto SSH por el que le hayas configurado a tu VPS previamente


Este último comando nos va a mostrar una advertencia parecida a la siguiente (misma a la que responderemos con yes si es necesario) y luego nos dejará loguearnos al VPS remotamente con nuestro acceso y/o login:

The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.

Verificamos que la clave haya sido agregada con éxito (en el VPS):

1. cd ~/.ssh
2. cat authorized_keys

(El último comando debe mostrarnos la clave); Y procedemos a editar de nuevo nuestro archivo de configuración de ssh con:

1. su -
2. nano /etc/ssh/sshd_config

Para cambiar la variable PasswordAuthentication a no; Una vez hecho esto, reiniciamos el VPS una vez más con sudo reboot y en la máquina cliente que utilizaremos para acceder al VPS (donde generamos nuestro KeyPair) corremos los siguientes comandos (como usuario normal desde nuestra carpeta personal):

1. touch ~/.ssh/config
2. nano ~/.ssh/config

Y en el archivo vacío que nos saldrá para editar, pondremos lo siguiente:

host my.vps.ip
  user usuario
  Port 8866
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  CheckHostIP no
  IdentityFile ~/.ssh/hostKey
  ServerAliveInterval 120

Cambiando los datos en negrilla de manera acorde a nuestro caso. Nótese que la hostKey que estoy usando es la privada del cliente y no la pública. Guardamos los cambios y salimos... Ahora hacemos (obviamente desde la máquina cliente) un:

ssh usuario@my.vps.ip

y ya nos debería dejar acceder sin contraseña usando nuestra clave privada como ID. Es importante recordar que a partir de ahora es VITAL guardar un backup de todos los directorios ".ssh" de tus clientes de gestión en algún lado, para evitar perder las claves y el archivo de configuración de c/u en caso de algún "desastre informático". Finalicemos con una copia de mi archivo sshd_config ya "terminado" para que corroboren que hicieron bien sus cambios:

sshd_config - Jmlevick's Gists

Extras

A) Google DNS: Seguridad y Velocidad

Cambiar los DNS de tu VPS por los de Google es algo importante que no solo lo protege de ciertos tipos de ataques sino que también puede ayudar en otros apartados como velocidad de respuesta y consumo de banda ancha. Afortunadamente aquí no hay nada que hacer ya que los VPS/Droplets de DigitalOcean ya vienen configurados para funcionar con dichos DNS en ipv4 e ipv6.

B) Cloudflare: Protección, Ahorros y Disponibilidad

Cloudflare es una plataforma de "optimización y protección" de servidores que más bien funciona a nivel dominio, pero es bastante útil porque entre las cosas que ofrece están la protección contra ataques DDoS en tiempo real, la reducción en el consumo de recursos por parte del VPS y también un sistema de mirroring que permite que tu contenido siga disponible aún si tu servidor llega a caerse entre otras cosas. Es un buen servicio y lo mejor es que incluso tienen un plan gratuito (es el que yo uso en mis dominios/VPS) que ofrece todo esto que les comento y otras cosas más. Conoce más sobre Cloudflare y cómo te beneficia usarlo si tienes un VPS por acá.

C) Ksplice: Actualizaciones en vivo (no downtime)

Ksplice es un gestor de actualizaciones de seguridad que aplica dichas actualizaciones (como las referentes al kernel y derivadas) en vivo sin necesidad de reiniciar. Es interesante porque para empezar evita el downtime en nuestros VPS y por otro lado se enfoca únicamente a actualizaciones críticas, evitando que de pronto actualicemos todo el sistema comiéndonos valioso espacio en disco. Más info sobre Ksplice en este tutorial.

D) Zswap/ZRAM: Mayor eficiencia en gestión de RAM/SWAP

Zswap es un sistema de compresión de paginado que está disponible desde el Kernel 3.11 en todas las distros GNU/Linux allá afuera, pero no viene activado por defecto. Sin importar cuánta RAM tenga tu VPS es una buena idea habilitarlo. Aprende más sobre Zswap y cómo activarlo checando este artículo para ello.

Por otro lado, zRAM es algo similar a Zswap pero funciona distinto: Es un sistema de compresión de paginado también pero además, este software nos crea una "swap virtual" en RAM para acelerar las tareas de swapping/paginado. si tu sistema no es compatible con Zswap (por su kernel, como pasa en Ubuntu 14.04) es recomendable entonces habilitar zRAM, pero no conviene dejar ambos activados en caso de tener la posibilidad. Para sistemas Ubuntu 14.04 (como el de nuestros ejemplos) puedes activar zRAM directamente instalando el paquete zram-config con:

sudo apt-get install zram-config

E) Añadir algo de swap

Y hablando de swapping, es común que varios proveedores entreguen sus VPS sin swap. Cuando tienes paca RAM o ésta está limitada de alguna forma dentro del VPS esto no es bueno, así que usar algo de swap es recomendable para equilibrar las cosas en cargas altas dentro de tu servidor.

Para verificar si tenemos swap habilitada en nuestro VPS, corremos el comando:

swapon -s

Si el comando no da ninguna ruta en su output (o retorna en blanco), quiere decir que no tenemos swap activa, para habilitarla entonces hacemos lo siguiente:

1. su -
2. sudo dd if=/dev/zero of=/swapfile bs=1024 count=768k
3. sudo mkswap /swapfile
4. sudo swapon -p 80 /swapfile

El valor de count se especifica en MiB y debe calcularse en base a la siguiente tabla (cortesía de Red Hat):


Los comandos de arriba habilitarán momentáneamente la swap recién creada (con tamaño de 768MB, en este caso). Cabe destacar que es recomendable crear swap extra aún si tu VPS ya tiene pero ésta es menor al tamaño recomendado según la tabla de arriba. Para hacer la activación permanente tras crear nuestro swapfile debemos correr:

su -
nano /etc/fstab

Y en el archivo que nos saldrá agregaremos la línea que se ve resaltada al final de esta captura:


Guardamos, salimos y listo. Ahora corremos:

1. su -
2. chown root:root /swapfile
3. chmod 0600 /swapfile

Reiniciamos y para verificar que nuestra swap está activa corremos:

swapon -s

que deberá listar nuestro /swapfile con prioridad 80 a partir de ahora disponible. Otra cosa que deberías revisar ya que estás en este paso son los Kernel VM Tunnings que tienen bastante peso en el óptimo funcionamiento de cualquier equipo/servidor Linux y van fuertemente ligados a la gestión de memoria (RAM y SWAP) del sistema. Más sobre ellos en este post.

F) ZSH: Un shell más completo

Z-Shell es un shell más completo que bash con un montón de goodies y/o comodidades añadidas, un buen aliado si manejas mucho el VPS por consola. Checa más de ZSH por acá.

G) Ranger: Gestión de archivos cómoda desde terminal

Ranger es un gestor de archivos por consola, otra herramienta interesante que además viene a probar otro punto que me encanta de DigitalOcean, sus tutoriales online a modo de soporte (¡Tienen uno para todo!). Checa el post que hicieron sobre Ranger en este enlace.

Y pues bueno, yo con esto me despido por ahora. Creo que no se me pasó nada de lo más importante y vital al momento de montar un VPS. A partir de aquí ya cada uno puede configurar su VPS como mejor le parezca para la función que desee, estando confiados en que se mantendrá funcional, eficiente y seguro.

   P.D. ¿Llegaste hasta acá y sólo leíste el artículo? ¡Qué esperas!

Lanza tu primer VPS ahorita mismo