Guía para montar un servidor VPS WEB HTTPS basado en Ubuntu, ligeramente seguro
Guía paso a paso para configurar un servidor VPS con Ubuntu, Apache, MySQL, certificado HTTPS y medidas de seguridad como Fail2Ban, ModSecurity y OWASP.
Los hosting compartidos o gratis no son la mejor solución para usted, ¡monte su máquina 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 admin@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) Última 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 quedó bien
https://www.ssllabs.com/ssltest/analyze.html?d=dominio.algo&latest
sudo certbot renew --dry-run
Eso así todo amigos, en la próxima guía continuamos con Hardening de WordPress