Probando Let’s Encrypt sobre Lightsail de Amazon

Viejoven en Laredo, Cantabria
Viejoven en Laredo, Cantabria
Viejoven en Laredo, Cantabria

Para un usuario de Internet normal y corriente, tener su propio servidor en el que poder instalar todo lo que a uno le plazca, es algo que ni le va ni le viene. Pero para cualquier persona que intente profundizar en “las tripas” de la red de redes, llegará un momento en que tenga que plantearse hacer algún tipo de comunicación entre dos máquinas que controle y que pueda personalizar a su gusto.

Hasta el momento, tener un servidor en Internet encendido, disponible y conectado las 24 horas del día, estaba reservado a las empresas. Mantener un equipo así requería un centro de procesado de datos, alimentación eléctrica redundante, acceso a Internet de calidad, copias de seguridad, aire acondicionado, control de accesos, técnicos especializados de mantenimiento en manos remotas… Un considerable esfuerzo económico que estaba justificado para aquellos casos en los que el negocio dependía de alguna manera de tener en línea permanentemente algún servicio en Internet.

La alternativa barata a tener nuestros equipos en un CPD (centro de procesado de datos) era tenerlos en casa, con el consiguiente gasto en consumo eléctrico, espacio ocupado, pérdida de conectividad por problemas con nuestra conexión a Internet, mantenimiento del hardware… Bastaba (y sigue siendo suficiente) con un PC conectado a nuestro módem ADSL o cablemódem HFC, redirigir los puertos de nuestro equipo de acceso hacia nuestro servidor y listo. Durante un tiempo tuve este escenario en casa, con las consiguientes molestias del ruido del ventilador del PC dando la matraca.

Llega la nube, pero no nos mojamos

Con la llegada de la virtualización de servidores, se consiguió optimizar el uso de los recursos de un servidor, ejecutando sobre un mismo hardware múltiples instancias de sistemas operativos que compiten por los recursos hardware del anfitrión simultáneamente.

Es entonces cuando surge el concepto de “nube”. Las empresas se dan cuenta de que pueden tener ahorros y mejoras en la gestión de sus servidores si los migran a una plataforma virtual, que podrá estar funcionando en algún sitio de Internet. Si os fijáis, casi siempre que se representa Internet en un diagrama, se pone una nube y se escribe dentro “Internet”. Pues digo yo que de ahí sale el concepto nube.

Si la empresa tiene muchos servidores, puede plantearse tener su propia infraestructura de virtualización (nube privada). Si por el contrario gestiona un número bajo de máquinas, puede optar por la virtualización en una nube pública.

Los proveedores de servicios de Internet, Internet Service Providers (ISPs), han evolucionado hacia este tipo de soluciones virtualizadas. Sus centros de datos ahora contienen granjas de servidores de virtualización que están ejecutando instancias de sistemas operativos de múltiples clientes de cualquier parte del mundo.

Pero pronto grandes empresas, que aparentemente poco tienen que ver con este tipo de servicios, se han hecho con el liderazgo en el mercado. Un ejemplo claro es Amazon. Su necesidad de tener una potente base de servidores para atender las peticiones de su tienda online, les llevó a desarrollar una infraestructura y tecnología propias que han sabido convertir en uno de los mejores servicios de virtualización actuales.

En este artículo os quiero contar cómo se puede tener una web con Wordpress en nuestro propio servidor y además con el tráfico web cifrado.

El primer paso es hacernos con un servidor virtual.

Amazon Lightsail

El pasado octubre de 2016, Amazon lanzó Lightsail, un servicio destinado a cubrir un segmento de mercado que demandaba la posibilidad de tener máquinas virtuales a muy bajo precio. Por 5€ al mes, podemos tener nuestra propia máquina virtual con Linux.

Naturalmente es una máquina con capacidades limitadas de disco, memoria y CPU. También el tráfico de datos está limitado a 1 Tera byte mensual, pero es suficiente como para que podamos tener nuestra propia web o experimentar con cualquier software.

Crear una máquina virtual en LightSail es tan sencillo como darse de alta (tened vuestra tarjeta de crédito a mano), elegir la opción “Os Only” y seleccionar entre “Amazon Linux” o “Ubuntu”. Yo he elegido Ubuntu, por eso de que Debian siempre ha sido mi sistema operativo favorito y Ubuntu es su primo.

Creación de una máquina virtual Linux en Amazon LigthSail
Creación de una máquina virtual Linux en Amazon LigthSail
Creación de una máquina virtual Linux en Amazon LigthSail

La máquina virtual se crea en pocos segundos y nos aparecerá información parecida a esta:

Máquina virtual Ubuntu en Lightsail
Máquina virtual Ubuntu en Lightsail
Máquina virtual Ubuntu en Lightsail

Tenemos que apuntar la dirección IP pública que nos han asignado (34.193.1.64) y verificar que las reglas del cortafuegos que incluye la plataforma están abiertas para:

  • 80 TCP
  • 443 TCP
Reglas del firewall en LightSail
Reglas del firewall en LightSail
Reglas del firewall en LightSail

La gestión remota del servidor se realiza a través de SSH y Putty. El puerto 81 lo abrí para cacharrear con WS y Swagger, así que no es necesario tenerlo abierto.

Instalación de Wordpress

Descargaremos la versión en español de es.wordpress.org y seguimos los pasos de su famosa famosa Instalación en 5 minutos. Recuerda que como paso previo necesitas un usuario con permisos de lectura y escritura en tu base de datos Mysql.

Mysql, también

Así he instalado yo Mysql. Tras arrancar Putty y entrar en el servidor virtual con mi nombre de usuario y contraseña:

Durante el proceso nos pedirá la contraseña para el usuario “root”. Una vez introducida la contraseña, nos pedirá confirmación de la misma.

Solicitud password de root para la bbdd
Solicitud password de root para la bbdd
Solicitud password de root para la bbdd

Finalizada la instalación creamos la base de datos para nuestro Wordpress. Entramos a la administración de la base de datos con el usuario “root” y la contraseña que hemos escrito durante la instalación. Entiéndase bien: no es el usuario root de nuestro Linux sino otro “root” de la base de datos. No tienen nada que ver pero se llaman igual y ambos son los “superusuarios”. Qué lío, ¿eh?

Creamos la base de datos “wordpress”. Puede llamarse de cualquier manera, yo he elegido “wordpress” por comodidad.

Indicamos al servidor Mysql que tendremos un usuario con todos los permisos de lectura y escritura en las tablas que contenga la base de datos “wordpress”. He elegido llamar al usuario “wordpressuser” porque parece bastante fácil de recordar si no lo apuntas. Podéis poner la contraseña que queráis. He escrito “wordpresspassword” a modo de ejemplo.

El siguiente paso es configurar el servidor web Apache. Lo que tendremos que hacer es crear “VirtualHost”, es decir, hay que decirle al Apache que tiene que mostrar información diferente en función del dominio que se esté visitando.

One momento. Vale, ya la estamos liando. ¿Dominio? ¿No son ya muchas cosas (un servidor virtual, servidor web Apache, un dominio, una base de datos…)? Bueno, evidentemente tenéis soluciones de Hosting compartido muy económicas y que funcionan realmente bien en las que ya os lo dan todo prácticamente hecho. Pero como se trata de aprender lo mejor es meterse en las tripas del asunto: servidor propio y dominio propio.

Hay que tocar el DNS

Para estas pruebas usaré mi dominio orviz.net, pero con cuidado porque no quiero que mi blog deje de funcionar. Crearé una entrada en el interfaz de gestión del DNS que me ofrece mi empresa de Hosting Compartido (en mi caso Telecable) para no interferir con lo que hay funcionando.

¿Qué necesito? Pues elegir un nombre para mi sitio donde desplegaré Wordpress y obtener la IP pública de mi servidor virtual que se está ejecutando en LightSail.

Nombre: aws.orviz.net (Por eso de que es una máquina de Amazon Web Services)

IP: 34.193.1.64.

Desde el interfaz de gestión DNS que me ofrece Telecable añado la siguiente entrada:

Añadimos un registro A al DNS
Añadimos un registro A al DNS
Añadimos un registro A al DNS

Verificamos que el registro que hemos añadido se está propagando correctamente por Internet:

Le metemos mano al Apache

Volvemos con el tema del VirtualHost en Apache. En este artículo de The Geek Stuff se explica muy bien qué configuraciones admite el servidor web Apache. Puesto que nosotros solo tenemos una IP pública en el servidor (y no queremos pagar por más por IPs públicas adicionales porque no es necesario), configuraremos un VirtualHost basado en nombre. Es decir, Apache podrá mostrar contenidos diferentes si accedemos a “aws.orviz.net” o por ejemplo “blog.orviz.net” si lo configurásemos sobre el mismo servidor.

La filosofía de configuración en Apache se basa en tener un directorio con las configuraciones disponibles y otro directorio con las configuraciones habilitadas. Lo que he hecho ha sido copiar la configuración por defecto (000-default.conf) que se crea durante la instalación del apache y que esá en el directorio de “sitios disponibles” y ajustarla a mis necesidades.

El archivo 001-aws.orviz.net.conf contiene:

Solo he hecho dos ajustes básicos: indicar cuál es el directorio donde están los contenidos de Wordpress mediante la variable DocumentRoot y ajustar ServerName a aws.orviz.net.

El siguiente paso es crear el directorio que hemos registrado en DocumentRoot:

Creado el directorio habilitamos la configuración mediante el comando:

En este momento si accedemos a nuestro VirtualHost, en mi caso “aws.orviz.net” nos encontraremos con el directorio vacío:

Apache funcionando pero vacío
Apache funcionando pero vacío
Apache funcionando pero directorio vacío

La casa por el tejado

Sí, os lo ponía todo de color rosa: descargar Wordpress e instalar en cinco minutos, pero nos hemos tenido que currar alguna que otra cosilla entre medio. Ahora sí, vamos al directorio donde tendremos nuestro Wordpress, descargamos desde https://es.wordpress.org/ la versión en “tar.gz” y la descomprimimos:

Aquí tenemos un poco de lío porque al descomprimir el paquete comprimido que hemos descargado, nos ha creado un subdirectorio “wordpress” dentro de “wordpress”. Arrrg!

Toca borrar /var/ww/html/wordpress y descargar desde /var/www/html. No os doy las instrucciones para que os familiaricéis con los comandos “mv” y “rm”.

Arrancamos el instalador de Wordpress

Por fin llega el momento que estábamos esperando. Apuntamos con nuestro navegador favorito a “aws.orviz.net” (este es mi ejemplo, poned el vuestro) y nos aparece la pantalla de bienvenida con los requerimientos y siguientes pasos a realizar:

Inicio de la instalación de Wordpress
Inicio de la instalación de Wordpress
Inicio de la instalación de Wordpress

En la siguiente pantalla nos pedirá los datos para conectarnos a nuestra base de datos. ¿Te has acordado de apuntar el nombre de la base de datos, el usuario y la contraseña? Pues toca recuperarlos y escribirlos ahora:

Toca añadir la información para conectarse a la bbdd
Toca añadir la información para conectarse a la bbdd
Toca añadir la información para conectarse a la bbdd

Ups, ¿qué es este mensaje tan feo?

Mensaje feote
Mensaje feote
Mensaje feote

Vaya, parece que el instalador de Wordpress no ha podido escribir el archivo de configuración. Eso es debido a que el directorio en el que está no tiene los permisos necesarios. Hago lo siguiente: cambio el propietario del directorio al usuario con el que se ejecuta el Apache y creo a mano el archivo “wp-config.php” como me está indicando. Con esto consigo tener el archivo “wp-config.php” en modo lectura, pero propietario de root, para que no lo toque por error.

Y hago un “copy+paste” de lo que me indica el instalador.

El siguiente paso es introducir los ajustes iniciales del sitio.

Ajustes iniciales del sitio
Ajustes iniciales del sitio
Ajustes iniciales del sitio

¡Tachán! Ya tenemos nuestro Wordpress funcionando. Sí que han sido 5 minutos, pero los pasos previos han sido un poco más dolorosos, ¿verdad?

¡Tachán!
¡Tachán!
¡Tachán!

Let’s Encrypt

Bien, ya tenemos nuestro servidor funcionando de forma plenamente operativa. Ahora vamos a añadirle una capa de seguridad para que toda la información que se transfiera desde nuestro flamante Wordpress recién instalado hacia el navegador de los miles de visitantes que esperan impacientes nuestros contenidos, vaya cifrado. Pero ojo, queremos también que sea un cifrado robusto y que los navegadores no alarmen al usuario con avisos de seguridad ininteligibles y amedrantadores.

Para eso contamos con la iniciativa Let’s Encrypt, que nos facilita un mecanismo gratuito para generar un certificado firmado que se instalará en nuestro servidor. De esta manera, tendremos una comunicación segura y un certificado de seguridad instalado en nuestro servidor web, firmado por una autoridad certificadora que transmitirá confianza a nuestros lectores. Podríamos generar nuestro propio certificado y “autofirmarlo”, pero tendríamos avisos de seguridad en los navegadores. Let’s Encrypt es:

  • Gratuito.
  • Automático.
  • Seguro.
  • Transparente.
  • Abierto.
  • Cooperativo.

Pues como todo son ventajas, ¿qué menos que probarlo?

Lo primero que tenemos que hacer es leernos esto: https://letsencrypt.org/getting-started/ ¿Creéis que en Internet son todo vídeotutoriales? ¡Leed un poco! Farda mucho más decir “lo he configurado leyendo un artículo” que “lo he puesto en marcha siguiendo un videotutorial”.

Sigamos. Lo que nos indican inicialmente es que tenemos varias maneras de integrarnos con la infraestructura de generación y renovación de certificados. Como tenemos acceso “shell” a nuestro servidor, nos vamos a https://certbot.eff.org/ que es donde nos recomiendan empezar para instalar el software necesario si tenemos “shell”.

CertBot

En la web principal nos guían paso a paso. Nos solicitan el servidor web que tenemos (Apache) y la versión de nuestro sistema operativo para mostrarnos las instrucciones específicas. Para obgtener la versión de Ubuntu que tenemos corriendo en nuestro servidor virtual:

CertBot
CertBot
CertBot

Tras seleccionar el servidor y el sistema la web nos lleva a las instrucciones concretas para su instalación:

Instrucciones de instalación CertBot para Apache + Ubuntu 16.04.2
Instrucciones de instalación CertBot para Apache + Ubuntu 16.04.2
Instrucciones de instalación CertBot para Apache + Ubuntu 16.04.2

Tras instalar el software requerido, el último paso es dejar que CertBot se encargue de todo. Bueno, tenemos que ir respondiendo a algunas preguntas. Las he marcado en negrita y en rojo.

Funcionando feliz como una perdiz. Let’s Encrypt Rules!!!

Originally published at orviz.net.

Written by

Ciberseguridad TI y Protección de Datos en Grupo Euskaltel

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store