Muy buenas!
Hoy traigo un post que puede ser muy útil que trata sobre cómo se puede hacer una nube privada para subir archivos (pequeños) y poder acceder des de cualquier lado.
ATENCIÓN para navegantes: Este post esta hecho sobre un entorno de laboratorio, te recomiendo que antes de hacer nada en producción hagas los test e implementación en un entorno de laboratorio controlado.
Recuerda también que lo he hecho sin SSL.
¿Qué necesitamos?
- Server con Ubuntu server 20.04
- 2 HDD para hacer el RAID 1
1.- Creación de RAID 1 en ubuntu server 20.04
Primero antes de nada, añadir los dos hdd al sistema. Una vez añadidos iniciamos el sistema.
Una vez iniciado el sistema y tengamos el instalador de ubuntu, en el apartado de seleccionar el disco duro, seleccionamos “Custom layout” para poder particionar correctamente los discos.
Esquema de particiones:
- Partition2 -> /boot
- Partition3 -> swap
- Partition4 -> /
Lo primero que haremos es ir al disco 1 y le daremos a la opción de add as boot device, en el disco 2 hacemos lo mismo. Luego hacemos lo siguiente, en el disco 1 -> add GPT partition -> 1GB sin formato (leave unformatted) y hacemos lo mismo en el disco 2 y veremos que se crea la partición 2.
Acto seguido haremos lo mismo con la partición 3 y 4.
Una vez tengamos las particiones individuales en cada disco, le daremos al botón de create MD. En el primero seleccionaremos las particiones2 y le daremos a crear.
Veremos que se crea el dispositivo RAID MD0 para la partición de /boot. Creamos los otros MD para las otras particiones.
Una vez tengamos los MD creados, vamos a cada MD y seleccionamos la partición que le tocaría.
Una vez acabado de particionar quedaría tal que así:
Una vez se ha particionado los discos, iniciar el sistema.
2.- Preparación entorno nextcloud
Instalación LAMP (Linux Apache MySQL PHP)
- En ubuntu server 20.04 lleva los repositorios con php 7.4 por defecto.
apt install apt install apache2 mariadb-server libapache2-mod-php php php-gmp php-bcmath php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip bzip2
Puesta a punto de la base de datos:
mysql_secure_installation
Una vez creada la contraseña para el usuario root de mysql.
Creación de usuario y garantizar permisos para base de datos nextcloud:
CREATE DATABASE nextclouddb;
GRANT ALL ON nextclouddb.* TO 'nextclouduser'@'localhost' IDENTIFIED BY 'CONTRASEÑA_SEGURA';
FLUSH PRIVILEGES;
EXIT;
Preparación directorio web:
cd /var/www/
mkdir nextcloud
Asignar permisos correctos a la carpeta.
chown www-data:www-data nextcloud/
Modificación virtualhost apache2:
nano /etc/apache2/sites-available/000-default.conf
Modificar la siguiente línea:
DocumentRoot /var/www/html/ por esto DocumentRoot /var/www/nextcloud
Descarga del instalador nextcloud.
wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
movemos el archivo descargado a la carpeta de nextcloud
mv setup-nextcloud.php /var/www/nextcloud
chown www-data:www-data nextcloud/setup-nextcloud.php
3.- Securización apache2 (Pendiente)
4.- Instalación nextcloud
Accedemos a http://IP_SERVIDOR/setup-nextcloud.php
Ponemos en que carpeta se instalará el entorno nextcloud, ojo que esta no es la carpeta de los datos.
Una vez se instale veremos un mensaje como este:
Una vez instalado pedirá el usuario y contraseña que le queremos asignar al usuario administrador, también pedirá el usuario y contraseña de la base de datos y muy importante, el directorio donde queremos que se almacenen los datos de nextcloud, en mi caso en la raíz / del sistema he creado la carpeta nextcloud y ahí se almacena todo.
Una vez nextcloud compruebe que todo esta correcto, empezará a instalar las aplicaciones en el caso de que lo hayamos marcado en el checkbox.
Y al fin! Nextcloud instalado 😀
Una vez instalado nextcloud ya podemos eliminar el instalador:
rm /var/www/nextcloud/setup-nextcloud.php
5.- Proteger nextcloud con SSL autofirmado
La verdad es que siempre esta bien usar SSL para cifrar los datos que viajan entre el cliente y el servidor, así que en este post no le haré un feo.
Al ser en entorno laboratorio y no disponer de otro dominio, tendré que hacerlo con certificados autofirmados. En el caso de que tengáis un certificado comprado el proceso siguiendo la teoría debe de ser el mismo y si no es un certificado comprado siempre lo podéis hacer con letsencrypt y al crear el certificado os pedirá si queréis redireccionar el sitio a HTTPS o no.
Para que apache pueda trabajar con SSL es necesario activar el módulo mod_ssl.
a2enmod ssl
service apache2 restart
Una vez que apache2 esta listo para trabajar con SSL tendremos que crear los certificados con el comando openssl.
Lo que hago siempre a la hora de escribir un post es irme a la documentación oficial de cada servicio/software, en este caso os facilito un acceso a la web de openssl para que podáis ver una ayuda sobre el comando openssl. Link aquí
Si quieres tener mas info sobre el comando para generar certificados ssl en este caso openssl req: Link aquí
Crear una clave privada y después generar un certificado a partir de ésta
Parámetros que se están usando en este comando:
- -out nombrearchivo -> Esto especifica en que archivo de salida se escribirá el contenido.
- 2048 -> bits de longitud de la clave.
openssl genrsa -out clave.pem 2048 #Generación del certificado
Parámetros que se están usando en este comando:
- -new -> Genera una nueva solicitud de certificado.
- -key -> Especifica el archivo des de el cual se leerá la clave privada.
openssl req -new -key key.pem -out req.pem #Generamos una solicitud de certificado a partir de la clave privada creada previamente.
Estos dos comandos los podemos mezclar y hacer sólo un comando:
- req -x509 -> Esta opción genera un certificado auto firmado en lugar de generar una solicitud de certificado.
openssl req -x509 -newkey rsa:2048 -keyout key.key -out req.crt
Al ejecutar el comando nos pedirá los siguientes datos:
- En caso de establecer una passphrase hay que tener en cuenta que si configuramos apache2 con este certificado cada vez que reiniciemos el servicio nos pedirá la passphrase.
Una vez tengamos creados los certificados, los movemos a la carpeta correspondiente.
mv nombrecertificado.crt /etc/ssl/certs/
mv nombrecertificado.key /etc/ssl/private/
Editar configuración de virtualhost de apache2 para configurar las nuevas claves/certificados:
nano /etc/apache2/sites-available/default-ssl.conf
SSLCertificateFile ruta_al_certificado.crt
SSLCertificateKeyFile ruta_al_certificado.pem
Reiniciar servicio apache2:
service apache2 restart
Si escribimos la dirección del servidor con HTTPS veremos que ya sale con el certificado autofirmado.
Ante esta advertencia, le damos a avanzado -> aceptar el riesgo y continuar.
Veremos que podemos acceder igualmente al sitio.
Redirección HTTP a HTTPS:
Por último configuraremos el redireccionamiento a https para todas las solicitudes entrantes por el puerto 80.
Habilitamos módulo rewrite de apache2
a2enmod rewrite
Se puede hacer a través de virtualhost o se puede hacer con el archivo .htaccess, como yo soy mas clásico lo haré vía virtualhost.
Redirect / https://IP_SERVIDOR/
Una vez hecho esto ya debería redireccionar correctamente hacía HTTPS.
Un saludo, espero que os sirva y gracias por ver el post!