Vestacp: Instalación y configuración

VestaCP es uno de los hostings libres y gratuitos mejor valorados del momento. La interfaz que utiliza es muy intuitiva y da bastantes opciones para configurar. Es verdad que no está a la altura de CPanel o Plesk pero para las funciones del día a día vale de sobra. Se pueden hacer backups, configurar quotas, configurar DNS, manejar las cuentas de correo, firewall, tareas… Y luego hay scripts hechos para añadir funciones extras como la de utilizar certificados de letsencrypt.

Instalación

Instalar curl y git

apt install curl git

Descargar el script de instalación

curl -O http://vestacp.com/pub/vst-install.sh

Dar permisos de ejecución

chmod +x vst-install.sh

Ejecutar script

bash vst-install.sh --apache yes --nginx no --vsftpd yes --mysql yes --exim yes --dovecot yes --clamav yes --spamassassin yes --iptables yes --fail2ban yes --quota yes --lang es --named no --proftpd no --postgresql no

Una vez hecho esto, no preguntará el nombre del host y el correo y configurará todo. Mandará un correo con las credenciales y las sacará por la terminal también. Para acceder, hay que ir a la URL:

https://<Dominio | IP >:8083

Letsencrypt

Ir a la carpeta /usr/local/

cd /usr/local

Clonar los repositorios necesarios

git clone https://github.com/certbot/certbot.git
git clone https://github.com/interbrite/letsencrypt-vesta.git

Crear la carpeta webroot que es donde letsencrypt comprobará los dominios

mkdir -p /etc/letsencrypt/webroot

Crear enlaces simbólicos para poder ejecutar los scripts

ln -s /usr/local/certbot/certbot-auto /usr/local/bin/certbot-auto
ln -s /usr/local/letsencrypt-vesta/letsencrypt-vesta /usr/local/bin/letsencrypt-vesta

Apache

Crear el archivo de configuración de letsencrypt para cuando se vayan a crear los certificados, apache se pare

ln -s /usr/local/letsencrypt-vesta/letsencrypt.conf /etc/apache2/conf-enabled/lesencrypt.conf
ln -s /usr/local/letsencrypt-vesta/letsencrypt.conf /etc/apache2/conf.d/lesencrypt.conf

Reiniciar apache

systemctl restart apache2

Ahora, es necesario instalar at para poder actualizar los certificados automáticamente

apt install at

Y habilitar para el inicio de sistema e iniciarlo

systemctl enable atd
systemctl start atd

Por último, para crear un certificado hay que lanzarlo de la siguiente manera. Lo voy a lanzar con at para que se cree una tarea que cada 60 días actualice el certificado automáticamente.
Nota: cuidado con los Alias que si no tienen un DNS apuntando fallará.

letsencrypt-vesta -a 60 ichasco blog.ichasco.com

Y con esto ya estarían los certificados. La primera vez que se lanza tardará un poco mas ya que instala todos los paquetes necesarios

Si se quiere actualizar el script, hay que ir a la carpeta /usr/local/letsencrypt-vesta y ejecutar:

git pull origin master

Nginx

En nginx es un poco diferente, porque hay que habilitarlo directamente desde las plantillas. Y si se ha creado ya el site, hay que habilitarlo en la configuración de estos.

Editar las plantillas

vim /usr/local/vesta/data/templates/web/nginx/default.stpl

vim /usr/local/vesta/data/templates/web/nginx/default.tpl

Y añadir esto en las 2 plantillas

 location /.well-known/acme-challenge {
 default_type text/plain;
 root /etc/letsencrypt/webroot;
 }

Por último reiniciar nginx

systemctl restart nginx.service

En nginx hay un apartado en el site SSL que autocrea los certificados letsencryp. Por lo tanto lo de abajo no haría falta.

Forzar que apache vaya por HTTPS

Una vez conseguidos los certificados, lo ideal es forzar a apache para que todo el trafico vaya por HTTPS. Para ello hay que habilitar el módulo rewrite y editar la plantilla.

Apache

Habilitar el modulo rewrite

a2enmod rewrite

Editar la plantilla

vim /usr/local/vesta/data/templates/web/apache2/default.tpl

Y añadir

Redirect permanent / https://%domain_idn%/

Por último, reiniciar apache

systemctl restart apache2

Luego es interesante hacer un hardening del servidor web. Para esto, hay un tutorial aquí

Nginx

Editar el archivo de configuración de nginx de los sites

vim /etc/nginx/sites-available/default

Y añadir

server {
...
    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
...
}

Reiniciar nginx

systemctl restart nginx.service

Migración de un site

Servidor antiguo

Ir al directorio de scripts de vesta

cd /usr/local/vesta/bin

Hacer un backup de la configuración actual del usuario que se quiere migrar

./v-backup-user usuario

Servidor nuevo

Pasar el backup desde la máquina antigua a la nueva
Nota: crear la carpeta /backup si no estuviese creada ya

scp root@servidorantiguo:/backup/usuario.fechas.tar /backup/

Ir a la carpeta de los scripts de vesta

cd /usr/local/vesta/bin

Restaurar el backup

./v-restore-user usuario usuario.fecha.tar

Si se quiere restaurar el backup con otro usuario, hay que cambiar el nombre

mv /backup/usuarioantiguo.fecha.tar /backup/usuarionuevo.fecha.tar

Y realizar la restauración

./v-restore-user usuarionuevo usuarionuevo.fecha.tar

 Cambiar los certificados de Vesta

Cuando se instala vesta, por defecto añade unos certificados propios al mail y al panel de control. Para cambiar esto hay que generar unos nuevos certificados y hacer lo siguiente.

Generar certificados mail

Generar los certificados para el correo y rellenar con los campos correctos
Nota: Los certificados deben alojarse en: /usr/local/vesta/ssl/

/usr/bin/openssl req -x509 -sha256 -days 9000 -nodes -newkey rsa:4096 -keyout /usr/local/vesta/ssl/mail.key -out /usr/local/vesta/ssl/mail.crt

Cambiar los permisos de los certificados

chown root:mail /usr/local/vesta/ssl/mail.*
chmod 660/usr/local/vesta/ssl/mail.*

Editar el archivo de configuración de exim4  y cambiar los certificados por los nuevos

vim /etc/exim4/exim4.conf.template
tls_certificate = /usr/local/vesta/ssl/mail.crt
tls_privatekey = /usr/local/vesta/ssl/mail.key

Reiniciar exim4

/etc/init.d/exim4 restart

Editar el archivo de configuración de dovecot y cambiar los certificados por los nuevos

vim etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </usr/local/vesta/ssl/mail.crt
ssl_key = </usr/local/vesta/ssl/mail.key

Reiniciar dovecot

/etc/init.d/dovecot restart

 

 

 

14 comments

  1. Hola, gracias por el tutorial. He realizado todos los pasos excepto nginx, pero cuando entro a mi sitio con https:// me sale este mensaje:

    “Ha ocurrido un error durante una conexión a compraoutlet.co. SSL ha recibido un registro que excedía la longitud máxima permitida. Código de error: SSL_ERROR_RX_RECORD_TOO_LONG”

    Me hace falta algo?

    Gracias

    1. Buenas, imagino que lo habrás hecho con el scritp de vesta-letsencrypt. A mi me ha dado algún que otro problema y he vuelto a utilizar letsencrypt normal. Hazlo con este post https://blog.ichasco.com/lets-encrypt-guia-completa/

      Lo único que hay que hacer es:
      – Parar apache
      – Lanzar letsencrypt: ./letsencrypt-auto certonly –standalone -d
      – Cambiar el sapache2.conf para que busque los certificados en: /etc/letsencrypt/live (también es recomendable cambiar la plantilla de vesta para que cuando quieras un site con SSL la ruta la ponga automaticamente)
      – Iniciar apache
      – Poner el cron para que lo actualice cuando quieras

      Cuando tenga tiempo editaré el Post con estos pasos.

      Cualquier duda me comentas 😉

  2. creerìa que ahì esta bien. Lo otro que no entiendo es la de forzar la conecciòn por https; En què parte encuentro el archivo del sitio que escuche por el puerto 80, teniendo en cuenta que uso vesta panel para pegar esto:

    RewriteEngine on

    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

    Gracias por la ayuda.

  3. se comió una parte del comentario.

    como yo uso vesta panel añadi en este archivo los certificados nano /home/admin/conf/web/apache2.conf porque en la ruta que tu pones no encuentro nada.

    los pegue debajo de

    Espero que este bien.

    1. Buenas,
      En el post, lo que pongo es para cambiar la plantilla de apache del puerto 80 poniendo un redirect hacia https para que cuando se cree el site (lo he actualizado), se cree con la configuración adecuada. Pero si ya está creada, como tu bien dices, hay que editar el site de la página creada y añadir lo siguiente:
      Redirect permanent / https://midominio.com/
      Si no también valdría hacer un redirect como pones tu pero la sintaxis correcta sería:
      RewriteEngine on
      RewriteCond %{HTTPS} !^on$ [NC]
      RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L]

      Como recomendación, te diría que no utilizaras admin para crear las páginas. Es preferible crear un usuario para los diferentes dominios.
      Luego quedaría reiniciar apache

      Espero que te valga de ayuda, cualquier cosa me dices

  4. Hola, volví a seguir el tutorial de esta página y no la otra, agregando esta linea Redirect permanent / https://%domain_idn%/ en la plantilla default de apache y ahí no redirecciona a https, pero en esta ruta si lo hace /home/admin/conf/web/apache2.conf. Adicionalmente agregué la ruta de los certificados, pero cuando entro al sitio me trae una página con esta información:

    No se puede acceder a este sitio web

    sitio.co ha cerrado la conexión de forma inesperada.
    Prueba a:
    Comprobar la conexión
    Comprobar el proxy y el cortafuegos
    Ejecutar Diagnósticos de red de Windows
    ERR_CONNECTION_CLOSED

    Qué será?

    Gracias nuevamente…

    1. Vale, creo que ya se por donde van los tiros. Te cuento un poco lo que creo que está pasando. Vesta utiliza 2 archivos de configuración para cada dominio, apache.conf y sapache.conf. En el primero, trae la configuración sin SSL y en el segundo trae la configuración del SSL. Por lo tanto, para que el redirect al SSL te funcione, tienes que añadir solo en el apache.conf el redirect permanent. El redirect permanent que estás utilizando, solo se puede poner en la plantilla de vesta porque lo que utiliza es una variable. Para usarlo en tu conf, tienes que poner lo siguiente: Redirect permanent / https://midominio.com/. Y en el sapache.conf, tiene que estar la conf del SSL pero sin el redirect que aquí no lo necesitas porque cuando se acceder a esto ya se accede por https.

      Resumiendo pasos:
      1 – editar: /home/admin/conf/web/apache2.conf
      2 – añadir solo el redirect: Redirect permanent / https://midominio.com/
      3 – editar: /home/admin/conf/web/sapache2.conf (en caso de que no esté, puedes pegar los certificados el crt el key y el chain en el panel de control de vesta y te lo creará)
      4 – Es recomendable cambiar la ruta de los certificados, vesta por defecto te los crea en la home del usuario, habría que apuntarlos al live de letsencrypt como lo tienes tu puesto 😉

      A ver si con esto consigues solucionar tu problema,

      Un saludo

    1. En el archivo apache.conf cambia lo siguiente:
      – Redirect permanent / https://compraoutlet.co:8443/
      – Borra las siguientes lineas
      · SSLEngine
      · SSLCertificateFile
      · SSLCertificateKeyFile
      · SSLCertificateChainFile

      En el archivo sapache.conf parece estar bien. Lo único, que ignoro cuando intervienen puertos no well-known como hay que ponerlo exactamente, creo que te lo he puesto bien. Porque utilizas el 8080 y el 8443 para los virtualhosts? De hecho he intentado hacer un telnet al puerto 8443 de tu host y no está abierto… Así que creo que tienes que cambiar en el apache.conf 8080 por 80 y en el sapache.conf 8443 por 443. Y el redirect porner: Redirect permanent / https://compraoutlet.co/

      Si quieres utilizar el 8080 y 8443 tienes que editar el ports de apache para que escuche por ellos y abrir en iptables si están cerrados

  5. Hola, los puertos que 8080 y 8443 son los que pone vesta panel cuando se agrega un dominio. Está raro, porque los puertos aparentemente están abiertos. De todos modos hice lo que me dijiste y al entrar por https me envía a la pagina de apache con http.
    .
    https://i.imgbox.com/jlilpYdK.jpg

  6. En ports. conf está así. Debería cambiarlo por puerto 80?

    # Powered by vesta

    Listen 162.243.111.211:443
    Listen 127.0.0.1:443

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *