Nextcloud 12 en Ubuntu Server 16.04 con Redis, APcu, HSTS, letsencrypt …

Nextcloud 12 en Ubuntu 16.04con  Redis, APcu, HSTS, letsencrypt … howto con todo ( o casi)

 

Abstract

El objetivo de este artículo es crear un servidor en una máquina virtual para la sincronización de archivos de equipos de escritorio en una nube personal con Nextcloud 12. El sistema operativo elegido es Ubuntu Server 16.04, por su compatibilidad con todas las exigencias de nextcloud. La plataforma de virtualización es Virtualbox.

La última versión de Nextcloud se ha desatado y ofrece muchas mejoras y nuevas características (incluyendo algunas mejoras importantes en la interfaz de usuario). Algunos de los cambios incluyen:

  • Advertencia de cuota
  • JSloader app (permite al administrador incluir JavaScript en todas las páginas Nextcloud)
  • Impersonate app (permite a los administradores  suplantar a otro usuario).
  • Tiempo real de acciones globales para usuarios
  • Guest app (una manera perfecta para dar un temporal y el acceso restringido a un cliente o un socio para datos compartidos)
  • Excludedirs app (habilita una carpeta específica patrón para ser excluidos del indexado)
  • Facilita el uso compartido de la carpeta actual
  • Capacidad para mover archivos a través del menú en lugar de arrastrar y soltar
  • Secure Drop (caída segura): único vínculo público que se comparte a varios usuarios (cada uno con su propia configuración, como los permisos, protección de contraseña y fecha de caducidad de la comunicación y colaboración

Configuración de la máquina virtualen VirtualBox 5.1

Instalación del servidor

  • Usuario y password: se recomienda un nombre de usuario y password fuerte. Obtenlo aquí.
  • Nombre de la máquina: se recomienda un fqdn (nombre de dominio). Puedes recurrir a https://www.noip.com/ (algunas opciones gratuitas) o https://dyn.com/dns/
  • Es necesario para solicitar el posterior certificado SSL, gratuito con https://letsencrypt.org/.
  • Configuramos una IP fija, que estará abierta en nuestro router a los puertos 80 y 443, (para http y https respectivamente). Los DNS 8.8.8.8 8.8.4.4 (servidores de Google, sin comas, sólo
    espacios. Ponemos servidores gratuitos que podemos encontrar en https://www.lifewire.com/free-and-public-dns-servers-2626062
  • Elparticionado : 1Gb de swap, 10Gb para “/”, y el resto a “/var/www/cloud_data/
  • En selección de programas seleccionamos únicamente OpenSSH Server.
  • Activamos actualizaciones automáticas.
  • Reiniciamos y actualizamos con :

sudo apt-get update && sudo apt-get –y dist-upgrade && sudo reboot

Configuración del servidor:

  • Ingresamos por ssh ( en linux o MacOS) : ssh user@fqdns
  • Nota: Para hosts hospedados en otros sitios (VPS), verificar locale y usuario sudo.
  • Seguimos las instrucciones del tuto https://www.pacorabadan.com/2017/08/ubuntu-16-04-home-server-virtualbox-headless/
  • Instalamos dependencias
sudo apt-get install apache2 mariadb-server libapache2-mod-php7.0 php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring php7.0-intl php7.0-mcrypt php-imagick php7.0-xml php7.0-zip unzip
  • Aseguramos MariaDB: introducimos la instrucción siguiente, y decimos a todo que si, incluyendo un password fuerte para el usuario root de MariaDB
mysql_secure_installation
  •  Creamos la base de datos (Nota: como el sitio va a dedicarse únicamente a Nextcloud, haremos que el root de MySQL coincida con el usuario de nextcloud)
mysql -u root -p

## When prompted, enter the MySQL root user password

CREATE DATABASE nextcloud;
GRANT ALL ON nextcloud.* to ‘root’@’localhost’
IDENTIFIED BY ‘PASSWORD’;
##Donde PASSWORD es el pasword del usuario root de MySQL
FLUSH PRIVILEGES;
exit;

 

Configurar Apache

Creamos el archivo /etc/apache2/sites-available/nextcloud.conf :

nano /etc/apache2/sites-available/nextcloud.conf

y pegamos el siguiente contenido:

Alias /nextcloud «/var/www/nextcloud/»

<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All

<IfModule mod_dav.c>
Dav off
</IfModule>

SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud

</Directory>

creamos un enlace simbólico:

sudo ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf

Activamos los módulos de apache que necesitamos

a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
a2enmod ssl
a2ensite default-ssl

reiniciamos apache

service apache2 restart

 

Instalando Nextcloud

Vamos al directrio /var/www y descargamos nextcloud (ir al sitio nextcloud.com para verificar la nueva version de nextcloud12), y damos permisos a apache

sudo su
cd /var/www
wget
https://download.nextcloud.com/server/releases/nextcloud-12.0.2.zip
unzip nextcloud-12.0.2.zip
rm nextcloud-12.0.2.zip
sudo chown -R www-data:www-data /var/www/cloud_data
sudo chown -R www-data:www-data /var/www/nextcloud

Iniciamos el instalador en el navegador, en la dirección http://ip_del_servidor/nextcloud/
NC setup

Lo primero entramos en Personal  y añadimos nuestra dirección de correo electrónico. Si entramos en administración podems ver algunos ajustes que nos quedan por hacer para mejorar la seguridad.
Avisos de seguridad NC

Instalamos el certificado SSL con lets encrypt:

Instalamos el cliente de python para letsencrypt

sudo apt install letsencrypt python-letsencrypt-apache

Creamos el certificado: sustitumos email y el dominio por el fqdn

sudo letsencrypt --apache --agree-tos --email your-email-address -d nextcloud.your-domain.com
Seleccionamos la opción Secure, para que todo el tráfico pase al https. Ahora, cuando vayas al sitio, serás recibido con la confirmación verde en la barra de URL confirmando que SSL está habilitado.
 Mientras estamos configurando Apache, vamos a editar los le-config y añadimos una línea al final del archivo después de la línea SSLCertificateKeyFile:
 
 nano /etc/apache2/sites-enabled/000-default-le-ssl.conf
<IfModule mod_headers.c>
     Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
 </IfModule>

Instalamos APCu, Redis

y algunos módulos php adicionales:

sudo apt install php-apcu redis-server php-redis && sudo apt install php-zip php-dompdf php-xml php-mbstring php-gd php-curl

reiniciamos apache

service apache2 restart

 Configuramos Redis

sudo systemctl start redis-server
sudo systemctl enable redis-server
php --ri redis
sudo systemctl restart apache2
sudo phpenmod redis

Editamos

sudo nano /var/www/nextcloud/config/config.php

Y añadimos las siguientes lineas de código, antes de la línea );

‘memcache.distributed’ => ‘\OC\Memcache\Redis’,

'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     ),

ubuntu-16.04-redis-cache-nextcloud

Editamos /etc/php/7.0/apache2/php.ini
con nano: /etc/php/7.0/apache2/php.ini
con webmin: modificamos la ruta del módulo… /php5/… por …/php/7.0/… y editamos ( es más difícil cometer errore)

Modificamos las líneas:

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

 

Conclusión:

Hemos pasado todas las directivas de seguridad de nextcloud y hemos reforzado el LAMP para aumentar la seguridad. Ya sólo nos queda descargar los clientes de nextcloud para nuestros equipos de escritorio y dispositivos.
nextcloudclientc

Gracias a:

 

Owncloud con soporte SSL Ubuntu 12.04

owncloud-logo1

Para seguir este howto primero debemos completar la instalación de Owncloud básica, que podéis encontrar en el siguiente post.

 

Primero activamos el módulo SSL de Apache

sudo a2enmod ssl
service apache2 restart

Editamos el archivo de configuración /etc/ssl/openssl.conf

nano /etc/ssl/openssl.cnf

Encontramos y cambiamos las siguientes líneas

dir = /root/SSLCertAuth
default_days = 3650 # 10 years
default_bits = 2048 # recommended by NSA until 2030
countryName_default = ES
0.organizationName_default = Ubuntu Contrib

Creamos el diretorio para guardar todos los archivos de la autoridad certificadora SSL, en nuestro caso lo llamaremos “SSLCertAuth”. Ejecutamos los siguientes comandos

mkdir /root/SSLCertAuth
chmod 700 /root/SSLCertAuth
cd /root/SSLCertAuth
mkdir certs private newcerts
echo 1000 > serial
touch index.txt

Creamos la autoridad certificadora (CA) con el siguiente comando:

openssl req -new -x509 -days 3650 -extensions v3_ca \
-keyout private/cakey.pem -out cacert.pem \
-config /etc/ssl/openssl.cnf

Nos pide:

Enter PEM pass phrase:introducimos una contraseña que usaremos después para firmar cualquier certificado (hay que recordarla). Vamos introduciendo todos los datos, y tenemos especial cuidado cuando nos pir el Common Name, que debe ser nuestro nombre de internet (fqdn: fully qualified domain name).

 

Ahora creamos la solicitud de firma del certificado del sitio:

openssl req -new -nodes \
 -out apache-req.pem \
 -keyout private/apache-key.pem \
 -config /etc/ssl/openssl.cnf

De nuevo introducimos todos los datos que nos pide, y en Common Name de nuevo metemos el fqdn. Los extra atributes… podemos dejarlos en blanco.

Y finalmente generamos el certificado para copiarlo después en el directorio /etc/ssl

openssl ca \
-config /etc/ssl/openssl.cnf \
-out apache-cert.pem \
-infiles apache-req.pem

Introducimos la password de la CA que creamos antes y despues le decimos a todo que si.

Ejecutamos:

mkdir /etc/ssl/crt
mkdir /etc/ssl/key
cp /root/SSLCertAuth/apache-cert.pem /etc/ssl/crt
cp /root/SSLCertAuth/private/apache-key.pem /etc/ssl/key

El paso final consiste en configurar apache para que el servicio por misión HTTPS, sea owncloud.

mkdir /var/www/logs
nano /etc/apache2/conf.d/owncloud5-ssl.conf

Copia y pega la siguiente configuración:

<VirtualHost *:443>
ServerName fqdn
SSLEngine on
SSLCertificateFile /etc/ssl/crt/apache-cert.pem
SSLCertificateKeyFile /etc/ssl/key/apache-key.pem
DocumentRoot /var/www/owncloud
CustomLog /var/www/logs/ssl-access_log combined
ErrorLog /var/www/logs/ssl-error_log
</VirtualHost>

Donde pone fqdn, ponemos nuestro nombre de internet o la ip de nuestro servidor. Damot Ctrl+x para cerrar y “y” para salvar.

Desde dentro de owncloud (Administración) podemos forzar el uso de SSL, lo que es muy recomendable a efectos de seguridad.

owncloud ssl

 

Gracias a:

http://ubuntuserverguide.com/2013/04/how-to-setup-owncloud-server-5-with-ssl-connection.html