Guía para montar un servidor VPS WEB HTTPS basado en ubuntu, ligeramente seguro
Los hosting compartidos o gratis no son la mejor solución para usted, ¡monte su maquina personalizada!, la nube hoy oferta mucho más.
1)Instalar Linux como servidor
Dependiendo si tenemos como proveedor Amazon-AWS,Heroku,RackSpace,Digital Ocean o una solución interna, el primer paso siempre es montar un servidor Ubuntu.
El paso que personalmente recomiendo es una vez que comenzamos a securizar un servicio, es actualizar a una versión que el fabricante recomienda como la necesaria.
sudo apt update && sudo apt upgrade
2) Procedemos a instalar Apache
sudo apt install apache2
3) Configuramos el virtual host, para esto copiamos la configuración por defecto a un «MIDOMINIO.ALGO.conf»
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/midominio.algo.conf
sudo nano /etc/apache2/sites-available/midominio.algo.conf
4) Configuración correcta de virtualhost
<VirtualHost *:80>
ServerAdmin [email protected]midominio.algo
ServerName midominio.algo
ServerAlias midominio.algo
DocumentRoot /var/www/midominio.algo/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
5) Creamos la carpeta de logs
sudo mkdir -p /var/www/html/midominio.algo/{public_html,logs}
6) Agregamos la configuración para activar el sitio
cd /etc/apache2/sites-available/ sudo a2ensite midominio.algo.conf
7) Reiniciamos servicio Web Apache
sudo systemctl reload apache2
8) Instalamos MYSQL SERVER y PHPmyAdmin
sudo apt install mysql-server sudo apt-get install phpmyadmin php-mbstring php-gettext sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql sudo apt-get install php-cli sudo ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin
9) Reiniciar
sudo service apache2 restart
10) Apliquemos Seguridad
mysql_secure_installation
sudo apt-get install ufw sudo ufw enable sudo ufw allow 22 sudo ufw allow 443 sudo systemctl stop dovecot.service sudo systemctl disable dovecot.service sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
11) Editamos Fail2Ban
sudo nano /etc/fail2ban/jail.local
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 600
12) Reiniciamos el servicio FAIL2BAN
sudo systemctl restart fail2ban.service
13) Activamos las cabeceras de seguridad
sudo a2enmod headers
service apache2 restart
14) Instalamos ModSecure
sudo apt-get install libapache2-modsecurity sudo a2enmod security2 sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
15) Editar Modsecurity
sudo nano /etc/modsecurity/modsecurity.conf
SecRuleEngine On SecResponseBodyAccess Off SecRequestBodyLimit 8388608 SecRequestBodyNoFilesLimit 131072 SecRequestBodyInMemoryLimit 262144
16) Instalar OWASP modesecurityConf
sudo rm -rf /usr/share/modsecurity-crs sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/share/modsecurity-crs cd /usr/share/modsecurity-crs sudo mv crs-setup.conf.example crs-setup.conf
17) Ultima edición del modsecurity
sudo nano /etc/apache2/mods-enabled/security2.conf SecDataDir /var/cache/modsecurity IncludeOptional /etc/modsecurity/*.conf IncludeOptional "/usr/share/modsecurity-crs/*.conf" IncludeOptional "/usr/share/modsecurity-crs/rules/*.conf sudo systemctl restart apache2.service
18) Instalar y activar mod_evasive
sudo apt-get install libapache2-mod-evasive sudo nano /etc/apache2/mods-enabled/evasive.conf
DOSPageCount 5 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 600 DOSLogDir "/var/log/mod_evasive" sudo mkdir /var/log/mod_evasive sudo chown -R www-data: /var/log/mod_evasive sudo systemctl restart apache2.service
19) Asignamos los permisos correspondientes para el servicio web
sudo chown -R www-data /var/www/html/dominio.algo/public_html
sudo chmod 0775 /var/www/html/dominio.algo
sudo chown -R www-data /var/www/html/dominio.algo/
umask 0002 /var/www/html/dominio.algo/ -R
usermod -a -G www-data web
sudo chmod 777 -R /var/www
20) Complementos de php necesarios
apt-get install php-curl sudo /etc/init.d/apache2 restart sudo apt-get install php-zip sudo apt-get install php-soap sudo apt-get install php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc sudo apt-get install php-intl
21) Procedemos a instalar certificado para tener HTTPS
Agregamos el repositorio
sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install python-certbot-apache sudo certbot --apache -d dominio.algo sudo certbot --apache -d dominio.algo -d www.dominio.algo
22) Verificar que quedo bien
https://www.ssllabs.com/ssltest/analyze.html?d=dominio.algo&latest
sudo certbot renew –dry-run