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
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
lo volvi a hacer y saca este error
Error: SSL=no doesn’t exist
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 😉
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.
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.
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
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…
Buenas, si lo añades en la plantilla solo cogerá efecto cuando crees un site nuevo. Los certificados donde los has añadido? en el sapache2.conf? si accedes directamente https://sitio.com accedes a la página?
Los certificados los añadi como se ve en la imagen.
https://i.imgbox.com/39cjnMeX.png
Cuando ingreso al sitio por https me saca el error que te escribí en el comentario anterior y como coloqué la redireccion ya no carga por http.
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
Hola, gracias por tu pronta respuesta y disculpa por tanta molestadera.
Esto es lo que tengo en mis archivos apache.conf y sapache.conf
https://i.imgbox.com/mvfZTIWw.jpg
https://i.imgbox.com/m7rOBFWS.jpg
En el sapache.conf cambie la ruta de los certificados, no se si es ahì donde tù dices que hay que hacerlo.
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
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
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