Aquest document recull les pràctiques clau per augmentar la seguretat de l'accés remot (SSH) al vostre servidor, protegint-lo contra atacs de força bruta i accessos no desitjats.
- 1. Ús d'Usuaris Estàndard amb
sudo - 2. Deshabilitar l'Accés Directe com a
rootper SSH (Seguretat Mínima) - 3. Ús de Claus SSH (Seguretat Òptima)
- 4. Instal·lació de Fail2Ban (Protecció contra Atacs de Força Bruta)
És una pràctica de seguretat fonamental no utilitzar mai l'usuari root per a tasques diàries ni per a la instal·lació d'aplicacions com Django-Aula.
- Risc: L'usuari
rootté permisos absoluts. Si es compromet, l'atacant obté el control total del servidor. - Recomanació: Totes les tasques d'instal·lació i manteniment s'han de fer amb un usuari estàndard amb permisos
sudo(com l'usuaridjaucreat al document usuari_sudo).
Per evitar que un atacant pugui intentar iniciar sessió directament com a root mitjançant força bruta, deshabilitarem aquesta opció a la configuració d'SSH del servidor.
-
Editeu el fitxer de configuració del servei SSH:
sudo nano /etc/ssh/sshd_config
-
Busqueu el paràmetre
PermitRootLogin. Si està comentat (prefixat amb#), elimineu el símbol i ajusteu el valor:# Assegureu-vos que tingui aquest valor: PermitRootLogin no -
Guardeu i tanqueu el fitxer.
- Reinicia el servei SSH:
sudo systemctl restart sshd
A partir d'aquest moment, només podreu accedir mitjançant SSH utilitzant els usuaris que hàgiu creat (com ara djau). Sempre podeu fer servir el usuari root si escriviu sudo su i exit per tornar al usuari original.
L'accés mitjançant contrasenya (encara que sigui amb un usuari amb sudo) no és el més segur. El mètode més segur és utilitzar un parell de claus SSH (una clau privada en el vostre ordinador i la clau pública al servidor).
Aquest mètode garanteix que només els ordinadors que posseeixin la clau privada (amb la seva contrasenya de seguretat per a més seguretat, o passphrase) puguin accedir al servidor.
Tot i que l'explicació detallada de la generació de claus es pot trobar en molts recursos en línia, el procés bàsic és:
-
Generar la Clau (al client): Des del vostre ordinador local, genereu una clau RSA de 4096 bits i assigneu-li un nom, com ara
djau_vps:ssh-keygen -f ~/.ssh/djau_vps -t rsa -b 4096- Molt important: Introduïu una contrasenya (passphrase) per protegir la clau privada.
-
Copiar la Clau Pública (al servidor): Copieu la clau pública al nou usuari del servidor. Substituïu
djau@hostper l'usuari i la IP/Domini del servidor:ssh-copy-id -i ~/.ssh/djau_vps djau@host
Si el servidor no disposa d'un terminal de consola d'emergència (com el que solen oferir els VPS), i perdeu la clau privada, no podreu entrar al servidor de cap manera.
- Recomanació: Feu sempre una còpia de seguretat de la clau privada generada en un lloc segur (fora de línia o xifrat), per si l'ordinador local es perd o es fa malbé.
Fail2Ban és un servei essencial que monitoritza els registres del sistema i bloqueja temporalment les adreces IP que intenten accedir repetidament al servidor (p. ex., provant milers de contrasenyes en SSH).
L'script d'instal·lació automatitzada de Django-Aula ja s'encarrega d'instal·lar i configurar el jail (filtre) per a SSH, però és important saber-ne el funcionament.
| Acció | Comanda |
|---|---|
| Comprovar l'estat general: | sudo fail2ban-client status |
| Comprovar l'estat del filtre SSH i les IPs bloquejades: | sudo fail2ban-client status sshd |
| Desbloquejar una IP manualment: | sudo fail2ban-client set sshd unbanip 1.2.3.4 |
| Veure el log de fail2ban: | sudo less /var/log/fail2ban.log |
| Obtenir un llistat amb el nombre de vegades que una IP ha estat bloquejada: | `sudo zgrep -h "Ban " /var/log/fail2ban.log* |
Per a la protecció del servidor web contra atacs de web scraping i escanejos de vulnerabilitats, es recomana configurar filtres per a Apache.
Es poden crear filtres específics que detectin patrons d'atac i bloquegin aquestes IP automàticament tot i que encara no es troben implementats en el procés automàtic d'instal·lació de l'aplicatiu.
➡️ Consulteu recursos avançats, si n'esteu interessats, com la pàgina https://www.andresmorenostudio.com/blog/fail2ban-apache-server per crear filtres de Fail2Ban per a Virtual Hosts concrets o per a errors comuns d'Apache.