Déploiement
Déploiement • Chapitre 11 : Configuration du serveur et mise en production

Configuration des ports et du pare-feu

Un serveur connecté à internet sans pare-feu est sondé par des hackers en moins de 15 minutes. Maîtrisez le pare-feu UFW sous Linux, limitez l'écoute des services aux adresses locales (localhost) et isolez vos bases de données.

🧱
Pare-feu UFW

Interface simple pour configurer Netfilter/iptables au niveau du noyau Linux.

🔒
Ports Publics Restreints

Seuls 3 ports doivent être ouverts au monde : 22 (SSH), 80 (HTTP) et 443 (HTTPS).

🏠
Bind sur 127.0.0.1

Forcer Node (3000) et MySQL (3306) à n'écouter que sur l'interface de boucle locale.

🛡️
Changement Port SSH

Déplacer le port 22 vers un port non-standard (ex: 2222) pour éliminer 95% des robots automatisés.

ufw-firewall-hardening.sh
# 1. Réinitialiser et définir la politique par défaut : bloquer tout ce qui entre !
$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing

# 2. TOUJOURS autoriser SSH en premier (sinon vous vous enfermez dehors !)
$ sudo ufw allow 22/tcp comment 'SSH Access'

# 3. Autoriser les flux web légitimes
$ sudo ufw allow 80/tcp comment 'HTTP Web'
$ sudo ufw allow 443/tcp comment 'HTTPS Web'

# 4. Activer le pare-feu
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

# 5. Vérifier les ports qui écoutent réellement sur la machine
$ sudo ss -tulpn | grep LISTEN
tcp  LISTEN  0  511      127.0.0.1:3000   0.0.0.0:*  users:(("node",pid=14820))
tcp  LISTEN  0  128        0.0.0.0:80     0.0.0.0:*  users:(("nginx",pid=1024))
tcp  LISTEN  0  128        0.0.0.0:443    0.0.0.0:*  users:(("nginx",pid=1024))
# ✅ Node écoute sur 127.0.0.1 : AUCUN attaquant ne peut l'attaquer directement !

Guide Approfondi & Architecture Système

1. L'Erreur Fatale du 0.0.0.0:3000

Dans votre code Node/Express :

Si vous écrivez app.listen(3000) sans préciser d'IP, Node écoute sur 0.0.0.0 (toutes les interfaces réseau). N'importe qui sur internet peut taper http://IP_DE_VOTRE_SERVEUR:3000 et contourner complètement Nginx, vos règles SSL et vos limites de débit !

La solution : écrivez toujours app.listen(3000, '127.0.0.1') pour que seule la machine locale (Nginx) puisse communiquer avec l'API.

2. Attention au Verrouillage SSH !

Avant de taper sudo ufw enable :
Avertissement critique : Si vous activez UFW sans avoir tapé sudo ufw allow 22/tcp au préalable, votre session SSH actuelle sera fermée et vous ne pourrez plus JAMAIS vous reconnecter à votre serveur à distance ! Il faudrait alors passer par la console KVM de secours chez votre hébergeur.

Tableau d'Attribution et de Sécurité des Ports Réseau

PortService AssociéVisibilité RecommandéeRègle UFW
22 (ou custom)SSH (Administration console)Public (protégé par clé SSH) ou restreint à votre IPufw allow 22/tcp
80HTTP (Redirection vers HTTPS)Public (mondial)ufw allow 80/tcp
443HTTPS (Trafic web sécurisé)Public (mondial)ufw allow 443/tcp
3000 / 8080API Node.js / Python / GoSTRICTEMENT INTERNE (127.0.0.1)BLOQUÉ PAR DÉFAUT
3306 / 5432Base MySQL / PostgreSQLSTRICTEMENT INTERNE (127.0.0.1)BLOQUÉ PAR DÉFAUT