Mòdul Professional 8 (UF3) - Hardening LAMP
Índex
1. Introducció i objectius
El concepte hardening fa referència a enfortir la seguretat d'un equip o servei, en el nostre cas un servidor web LAMP. Per això desglossarem la nostre actuació en els components d'aquest servidor: L Linux + A Apache + M MariaDB + P PHP. Adicionalment, i fora dels objectius d'aquest document, també caldria enfortir la pròpia WebApp instal·lada.
Intentarem donar una idea de com enfortir cada component pensant ja en un servidor real de producció, no tan sols una petita pràctica on es vegin de forma introductòria alguns punts (per exemple simplement afegir encriptació SSL/TLS a Apache). Així doncs, l'objectiu és aprendre a enfortir el servidor WEB vist com un conjunt i tenir una referència de què cal fer en un cas real de muntatge d'un servidor que ha d'estar expossat a Internet.
1.1. Pre-requisits
Partim de la base que tenim aquest sistema instal·lat in funcional.
- Debian 11.
- LAMP instal·lat (Linux Apache MariaDB i PHP).
Lògicament els conceptes, comandes i programes a utilitzar en altres sistemes GNU-Linux poden ser molt semblants o iguals, però sempre hi pot haver alguna diferència. Així mateix tingueu present que aquest manual pot quedar fàcilment des-actualitzat.
NOTA: Manual realitzat el 20-12-22.
2. Hardening a Linux
2.1. Actualització
apt update && apt upgrade -y
2.2. Usuaris, grups i contrasenyes
2.2.1. Contrasenyes
Sempre utilitzem contrasenyes robustes en els usuaris del sistema, tal com s'ha vist a M6.
2.2.2. Usuaris
És recomanable no utilitzar mai el compte root
i de fet des-habilitar-ho, i realitzar totes les tasques administratives utilitzant la comanda sudo
. Per fer-ho:
apt install sudo adduser admin usermod -aG sudo admin chsh root
En l'última comanda indiquem que no volem shell per a l'usuari root. Això és fa indicant com a shell /usr/sbin/nologin
.
A partir d'aquí haurem d'utilitzar l'usuari admin i sudo
per fer les tasques administratives.
2.2.3. Grups
El usuari que utilitza l'apache per executar-se i accedir al sistema de fitxers és www-data
,i com tot usuari també té associat un grup amb el mateix nom www-data
. Per tant és el grup ideal per englobar totes les aplicacions web que necessitin accés a l'estructura d'arxius de la web.
2.3. Sistema de fitxers i permissos
La carpeta on instal·larem l'aplicació web és /var/www/html
, per tant l'assignarem a l'usuari www-data
i al seu grup també, de manera que tan sols l'Apache o els programes que assignem dins del grup www-data
hi tinguin accés. Ambaixò guanyarem seguretat tant per que no tinguin accés coses foranes al procés de l'Apache com per si ens hackejen l'Apache (entren mitjançant la AppWeb) tan sols tinguin accés a aquestes carpetes.
sudo chown www-data /var/www/html -R sudo chgrp www-data /var/www/html -R
A nivell de permissos donarem permissos totals al propietari i al grup, i cap a la resta.
sudo chmod 770 /var/www/html -R
2.4. IDEA AppArmor
Per securitzar les aplicacions que corren en el sistema i afegir-ne limitacions. En el cas d'Apache i MariaDB, a part de limitar recursos, sobretot limitar els permissos i l'espai del sistema de fitxer. Potser es pot fer més simple amb un jail.
2.5. Altres serveis
Queda ja fora d'aquest document, però hem de tenir present en enfortir també els altres serveis, com per exemple l'accés per SSH, etc.
3. Hardening a Apache
3.1. Encriptació SSL/TLS
3.1.1. Activar MODSSL
sudo a2enmod ssl sudo systemctl restart apache2
3.1.2. Crear certificats
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
Al paràmetre Common Name
cal introduïr la IP o nom de domini que utilitzarem.
3.1.3. Configurar i activar el lloc SSL
Configurem /etc/apache2/sites-available/default-ssl.conf
modificant SSLCertificateFile
que apunti al arxiu .crt
generat i el SSLCertificateKeyFil
al .key
.
Finalment l'activem amb:
sudo a2ensite default-ssl.conf sudo systemctl reload apache2
3.1.4. Redirigir des del HTTP al HTTPS
Modifiquem el /etc/apache2/sites-available/000-default.conf
fent:
- Comentant la línia de
DocumentRoot
. - Afegint
Redirect / https://DOMINO_O_IP/
.
Un cop fet recarreguem la configuració.
sudo systemctl reload apache2
3.2. ModSecurity
Un WAF (Web Application Firewall) que es pot ampliar i configurar amb regles per detectar els últims atacs recollits a OWASP o per configurar els nostres pròpis, alhora que personalitzar les pàgines d'error, etc. En el nostre cas tan sols l'hi deixarem configurades les regles bàsiques que venen per defecte.
3.2.1. Instal·lació
sudo apt install libapache2-mod-security2 sudo a2enmod headers sudo systemctl restart apache2
3.2.2. Configuració bàsica
Copiem les configuracions recomanades:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Finalment modifiquem l'arxiu modsecurity.conf
, l'opció SecRuleEngine
a On
, per a que no tan sols detecti sinó que també aturi atacs.
De nou re-iniciar el Apache2
…. pot trigar una mica.
sudo systemctl restart apache2
3.2.3. IDEA Afegir regles / repositoris
3.2.4. IDEA Creació de regles pròpies
3.3. IDEA Fail2Ban
Per controlar els intents fallits de login, peticions extranyes de URLs, etc.
4. IDEA Hardening a PHP
5. IDEA Hardening a MariaDB
6. Hardening a la WebApp
Finalment caldría fer enfortiment de la pròpia aplicació web instal·lada (WordPress, Moodle, Prestashop, etc) i aquests passos ja són específics de cada aplicació, cosa que s'escapa dels objectius d'aquest document.
7. Webgrafía
- Linode: Part de ModSecurity.
- SecureCoding: Usuaris, ModSecurity, MySQL i altres.
- Cyberciti: Instal·lació de LAMP.
- DigitalOcean: Configuració de OpenSSL per aconseguir HTTPS.