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:

 

Ubuntu Home Server 16.04: Transmission-daemon acceso Http

¿Qué es transmission?

El cliente para Bitorrent, Transmission es uno de los más habituales y comunes programas de descarga, especialmente en Linux y OSX.

Objetivos

Instalar Transmission como servicio en linux sin la interface de gnome para poder acceder a él a través de un navegador o un gestor remoto.

El servidor

  1. Primero vamos a instalar una utilidad que nos permitirá añadir repositorios a apt-get, sin necesidad de editar el archivo /etc/apt/sources.list

$ sudo apt-get install python-software-properties

  1. Ahora añadimos el repositorio de transmission

$ sudo add-apt-repository ppa:transmissionbt/ppa

  1. En caso de tener instalada la versión de escritorio Gnome de Transmision podemos desinstalarla con

$ sudo apt-get remove transmission-gtk

  1. Actualizamos e instalamos transmission-daemon

$ sudo apt-get update

$ sudo apt-get install transmission-cli transmission-common transmission-daemon

  1. Ahora vamos a crear un árbol de directorios para los archivos de descarga de Transmission. En mi caso he dedicado un disco especialmente para ello, pero en este tutorial la ubicación del directorio está en el directorio home de vuestro ususario.

$ mkdir ~/downloads

$ mkdir ~/downloads/completos

$ mkdir ~/downloads/incompletos

  1. Unimos nuestro usuario al grupo debian-transmission y damos permisos a los directorios creados. Donde pone username, ponéis vuestro nombre de usuario.

$ sudo usermod -a -G debian-transmission username

$ sudo chgrp -R debian-transmission /home/username/Downloads

$ sudo chmod -R 775 /home/username/Downloads

  1. Muy importante: para editar el archivo de configuración de transmission, debemos parar el demonio.

$ sudo service transmission-daemon stop

  1. Editamos el archivo de configuración:

$ sudo nano /etc/transmission-daemon/settings.json

8a Activamos la lista de bloqueo de instituciones anti-p2p, y spam

"blocklist-enabled": true,

"blocklist-url": "http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz",

8b. Modificamos los directorios de descarga:

"download-dir": "/transmission/completos",

"incomplete-dir": "/transmission/incompletos",

"incomplete-dir-enabled": true,

8c. Cambiamos el usuario y la password del usuario remoto de Transmission, para aumentar la seguridad. Es importante que sea una password fuerte y un usuario distinto del habitual. Cuando arranquéis transmission de nuevo, si volvéis a edita estos archivos observareis que Transmission lo ha encriptado. Además, dejáis en la lista blanca todas las redes para poder acceder desde fuera de casa.

"rpc-password": "transmissionpassword",
"rpc-username": "transmissionuser",
"rpc-whitelist": "*",
"rpc-whitelist-enabled": true,

8d. Podéis también cambiar el puerto en que escucha Transmission para el navegador web. Si es así modificar:

"rpc-port": 9091,

  1. Iniciamos el demonio de transmission

$ sudo service transmission-daemon start

Nota: Si os arranca Transmission, se inicia la descarga y se interrumpe súbitamente, hay un problema de permisos que se soluciona fácilmente dando permisos 777.

$ sudo chmod -R 777 /home/username/Downloads

Paso 2. El cliente remoto:

Podéis descárgalo en Google Code en el siguiente enlace transmisson-remote-gui . Es un cliente multiplataforma, lo hay incluso para Android, y la configuración es muy sencilla. Simplemente hay que introducir la IP o nombre del servidor, el usuario y el password que hemos elegido. Por lo demás, las opciones son muy parecidas a las del cliente habitual de Transmission.

Paso 3. Acceder a las descargas:

A través de Samba, Netatalk, sshd, ftp,… o cualquier otro servidor de archivos (hay que configurarlo, claro). Os recomiendo que los archivos los borréis desde el cliente remoto de Transmission.

 

VirtualBox Server Ubuntu 16.04 :Virtualbox 5.1 headless + Phpvirtualbox 5.0

VirtualBox Server Ubuntu 16.04

Virtualbox headless + phpvirtualbox

Este post forma parte de la página Tutos Ubuntu 16.04 , y viene del anterior post, Asegurar Ubuntu 16.04 Home server y configuración básica..

Nota: Configuraremos un servidor básico para correr Virtualbox, y nunca accederemos a él desde Internet directamente, sino a través de una máquina virtual, para aumentar la seguridad del sistema. Por tanto, la configuración que proponemos es exclusivamente para un entorno doméstico al que de momento no accederemos directamente a través de Internet por el puerto 80.

Instalar virtualbox

Vamos a configurar /etc/apt/sources.list para incluir el repositorio de Oracle:

$ sudo nano /etc/apt/sources.list

Y añadimos la siguiente línea

deb http://download.virtualbox.org/virtualbox/debian xenial contrib

Después ejecutamos:

wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -

sudo apt-get update

sudo apt-get install linux-headers-$(uname -r) build-essential virtualbox-5.1 dkms

Instalamos el Oracle VM VirtualBox Extension Pack

cd /tmp
wget http://download.virtualbox.org/virtualbox/5.1.26/Oracle_VM_VirtualBox_Extension_Pack-5.1.26-117224.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.26-117224.vbox-extpack

Nota: cuando actulizéis Virtualbox es importante,

  • apagar todas las máquinas virtuales,
  • detener todos los servicios (desde la consola de webmin) que empiezan por vbox,
  • después ejecutar el apt-get -y distupgrade,
  • y después para actualizar el extension pack podéis usar el siguiente script:
#!/bin/bash
version=$(vboxmanage -v)
echo $version
var1=$(echo $version | cut -d 'r' -f 1)
echo $var1
var2=$(echo $version | cut -d 'r' -f 2)
echo $var2
file="Oracle_VM_VirtualBox_Extension_Pack-$var1-$var2.vbox-extpack"
echo $file
wget http://download.virtualbox.org/virtualbox/$var1/$file -O /tmp/$file
#sudo VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"
sudo VBoxManage extpack install /tmp/$file --replace

Para crearlo:

$ nano upvboxext.sh ## ( e copiais el código )

$ chmod +x upvboxext.sh ## para hacerlo ejecutable.

$ sudo ./upvboxext.sh

Añadir el usuario que utilizará virtualbox.

Como no vamos a entrar por Internet directamente configurar al usuario con permisos sudo (user1) para gestionar vuestras propias máquinas virtuales y darles acceso a todo los archivos. Para otras configuraciones, mirar el siguiente link.

Ejecutamos:

sudo adduser user1 vboxusers

sudo nano /etc/default/virtualbox

e introducimos las línea

VBOXWEB_USER=user1

Después:

systemctl enable vboxweb-service
systemctl start vboxweb-service

Instalación de Apache+PHP 7 con  requerimientos mínimos:

sudo apt-get -y install apache2 libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libapr1 php7.0-common php7.0-mysql php7.0-soap php-pear wget

Reiniciamos apache

sudo systemctl restart apache2.service

Instalar Phpvirtualbox

Vamos a instalar Phpvirtualbox como sitio por omisión de Apache, es decir, en el directorio /var/www/html .

Comprobamos que la última versión de Phpvirtualbox es la 5.0.5 y descargamos

cd /tmpwget https://kent.dl.sourceforge.net/project/phpvirtualbox/phpvirtualbox-5.0-5.zipunzip phpvirtualbox-5.0-5.zip
cd phpvirtualbox-5.0-5 sudo mv * /var/www/htmlsudo chown -R www-data:www-data /var/www/htmlcd /var/www/html/sudo cp config.php-example config.phpsudo nano config.php

Se abrirá el editor nano, y debemos introducir el usuario y el password del usuario de virtualbox:

[...]
/* Username / Password for system user that runs VirtualBox */
var $username = 'vbox';
var $password = 'secret';
[...]

Conviene un reinicio:

$ sudo reboot

Ya puedes abrir la página apuntando tu navegador a la dirección ip del servidor. http://192.168.1.X

El usuario es admin, y la password: admin. Entra el menú principal para cambiarlo.

Error de versión de phpvirtualbox.

Por si hace falta, para reiniciar vboxweb ( es un comando útil sobre todo cuando actualizamos) :

$ systemctl restart vboxweb-service

Se produce un error de versión de virtualbox 5.1, con phpvirtualbox 5.0. Para evitarlo, ya que no da ningún otro problema hay que editar el archivo endpoints/api.php (dentro de /var/www/html) y cambiar lo siguiente:

$ sudo nano /car/www/html/endpoints/api.php

// $response['data']['responseData']['phpvboxver'] = @constant('PHPVBOX_VER');
$response['data']['responseData']['phpvboxver'] = "5.1-0";

Reiniciamos los servicios:

sudo systemctl restart apache2.service

systemctl restart vboxweb-service

 

Seguimos próximamente con más posts.