Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Fermer les ports, appliquer les correctifs

Après cette leçon: Je peux trouver ce qu'un serveur écoute, fermer ce qui est inutile et vérifier les mises à jour.

Leçon de 55 min12 commandesLab d’administration Linux : utilisateurs, droits, cron et systemd dans le navigateur

Le serveur de test resté allumé

Un développeur a ouvert un port pour tester une page, puis il est parti en vacances. Le port est resté ouvert trois mois, et le programme derrière n'a jamais été mis à jour.

Un port dont personne n'a besoin est une porte que personne ne surveille. La fermer ne coûte rien.

À la fin de cette leçon

Remarque

Je peux trouver ce qu'un serveur écoute, fermer ce qui est inutile et vérifier les mises à jour.

Mots clés

MotCe que ça veut direExemple
Portune porte numérotée d'une machine, où un programme écoute22
Écouterattendre à un port que quelqu'un se connecte
Bouclagel'adresse 127.0.0.1, que seule la même machine peut atteindre
Refus par défautrefuser tout ce qu'aucune règle n'autorise
Correctifune mise à jour qui répare une faille connue
Surface d'attaquetout ce qu'un attaquant peut atteindre et essayer

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Ce qui écoute peut être attaqué

Chaque programme qui écoute à un port est une entrée possible. Moins il y en a, moins l'attaquant a d'essais.

Le premier travail est de regarder. Vous lancez deux petits serveurs web à vous depuis un dossier vide, l'un ouvert au réseau et l'autre seulement à cette machine.

Lister ce qui écoute maintenant

Commande
ss -ltn

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer un dossier vide à servir

Commande
mkdir -p site-vide

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer un serveur ouvert au réseau sur 8088

Commande
(timeout 120 python3 -m http.server 8088 --bind 0.0.0.0 --directory site-vide >/dev/null 2>&1 &)

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer un serveur de bouclage sur 8089

Commande
(timeout 120 python3 -m http.server 8089 --bind 127.0.0.1 --directory site-vide >/dev/null 2>&1 &)

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Comparer les deux

Commande
ss -ltn | grep -E ':808[89]'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire la colonne Local Address

Le dernier Run a écrit deux lignes. L'une contient 0.0.0.0:8088 et l'autre 127.0.0.1:8089.

L'adresse 0.0.0.0 veut dire tous les réseaux où se trouve la machine. L'adresse 127.0.0.1 veut dire cette machine seule. Le second serveur ne peut pas être attaqué de l'extérieur, et il n'a besoin d'aucune règle de pare-feu.

Les deux serveurs s'arrêtent seuls au bout de deux minutes.

Une règle peut refuser un port

Parfois un programme doit écouter largement mais ne doit pas être atteint. Une règle de pare-feu sur la machine peut le refuser.

Vous ajoutez maintenant une règle pour le seul port 8088, dans une table à vous appelée entrainement. Votre terminal n'est pas touché, et rien n'est sauvegardé. Si un Run dit nft: command not found, installez-le avec sudo apt-get install -y nftables.

Refuser le port 8088 avec une règle

Commande
sudo nft 'add table inet entrainement; add chain inet entrainement garde { type filter hook input priority 0 ; policy accept ; }; add rule inet entrainement garde tcp dport 8088 reject with tcp reset'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Interroger maintenant le port 8088

Commande
curl -sS -m 3 http://127.0.0.1:8088/ 2>&1 | head -n 1

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Interroger le port 8089, que rien ne touche

Commande
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8089/

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ce que disent les deux réponses

Le premier curl a écrit curl: (7) Failed to connect to 127.0.0.1 port 8088, suivi d'une note sur le temps. La règle a refusé la connexion aussitôt. Le second a écrit 200 : le port 8089 répond toujours.

Un vrai pare-feu part dans l'autre sens. Sa politique est le refus par défaut, et une règle autorise chaque port nécessaire.

Exemple : refus par défaut pour un serveur web

PortUsageRègle
22SSH pour l'administrateurAutoriser, depuis l'adresse du bureau seulement
443Le site webAutoriser, depuis partout
8088Une page de test oubliéeAucune règle, donc refusé

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Supprimer la table d'entraînement

Commande
sudo nft delete table inet entrainement

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Arrêter les deux serveurs jetables

Commande
pkill -f 'http.server 808'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Les correctifs ferment des failles déjà trouvées

La plupart des attaques utilisent une faille qui a déjà un correctif. Un serveur en retard sur ses mises à jour est facile à attaquer.

Vous pouvez regarder sans rien changer. Le mot -s veut dire simuler : la commande écrit ce qu'elle ferait et ne fait rien. Les nombres dépendent du jour, donc aucun n'est donné ici.

Une version plus récente d'openssl est-elle proposée ?

Commande
apt-cache policy openssl | head -n 3

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Combien de mises à jour seraient installées ?

Commande
sudo apt-get -s upgrade | grep -c '^Inst'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup de gens pensent qu'un port est sûr parce que personne ne sait qu'il existe. Les scanners essaient tous les ports en quelques minutes. Un port est sûr quand aucun programme n'y écoute, ou qu'une règle le refuse. Être inconnu n'est pas un contrôle.

Aller plus loin : un calendrier de correctifs

Lancez ls /etc/apt/apt.conf.d et cherchez un fichier dont le nom contient auto-upgrades. S'il existe, lisez-le avec cat. Il dit si la machine installe seule les mises à jour de sécurité.

Écrivez deux phrases. Une raison de laisser un serveur se mettre à jour seul. Une raison pour laquelle une école voudrait d'abord tester les mises à jour.

À propos de ce labo et de sa source: Lab d’administration Linux : utilisateurs, droits, cron et systemd dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.