Sécurité du système
Prérequis et objectifs
1. Prérequis
Les connaissances nécessaires à la certification LPIC-1 :
Commandes de suivi des processus.
Édition de fichiers.
Commandes de gestion de répertoires et de fichiers.
Commandes de gestion des comptes utilisateurs et du contrôle d’accès.
Les connaissances acquises dans les précédents chapitres, notamment :
Gestion du réseau local.
Gestion des services.
2. Objectifs
À la fin de ce chapitre, vous serez en mesure de :
Configurer un système Linux en tant que routeur.
Activer et configurer le pare-feu du noyau avec iptables.
Mettre en place des règles de gestion des paquets réseau par iptables.
Gérer la traduction d’adresses (NAT).
Configurer différents logiciels serveurs FTP en mode sécurisé.
Configurer et sécuriser un serveur SSH.
Gérer les alertes de sécurité de diverses sources.
Configurer et exécuter des systèmes de détection d’intrusion.
Configurer un VPN (réseau privé virtuel) avec OpenVPN.
Sécurité du système
Ce sujet est divisé en cinq parties de poids différents.
1. Configuration d’un routeur
Poids |
3 |
Objectifs |
Configurer un système pour transférer des paquets IP, effectuer de la traduction d’adresse réseau (NAT, IP masquerading) et comprendre leur importance dans la protection d’un réseau. Configurer la redirection de ports, la gestion des règles de filtrage et la prévention des attaques. |
a. Compétences principales
-
Fichiers, outils et utilitaires de configuration iptables et ip6tables.
-
Fichiers, outils et utilitaires de gestion des tables de routage.
-
Plages d’adresses privées IPv4, adresses locales uniques (Unique Local Addresses) et adresses de lien local (Link Local Addresses) IPv6.
-
Redirection de ports et transmission IP (IP forwarding).
-
Lister et écrire des règles et des filtres basés sur le protocole, l’adresse ou les ports source ou destination, pour accepter ou bloquer des paquets IP.
-
Enregistrer et recharger les configurations de filtrage.
b. Éléments mis en œuvre
-
/proc/sys/net/ipv4/
-
/proc/sys/net/ipv6/
-
/etc/services
-
iptables
-
ip6tables
2. Gestion des serveurs FTP
Poids |
2 |
Objectifs |
Configurer un serveur FTP pour le téléchargement et le chargement en mode anonyme. Cet objectif inclut les précautions à prendre dans le cas où les chargements anonymes sont autorisés et pour configurer des accès utilisateurs. |
a. Compétences principales
-
Fichiers, outils et utilitaires de configuration de Pure-FTPd et vsftpd.
-
Connaissance de base de ProFTPd.
-
Comprendre les différences entre les connexions FTP passives et actives....
Configuration d’un routeur
Un routeur IP est un équipement participant à plusieurs réseaux/sous-réseaux IP et pouvant transférer (forwarding) des datagrammes entre ces réseaux/sous-réseaux.
La fonction de routage est intégrée directement dans le noyau Linux, mais, par défaut, elle n’est pas activée.
Le routeur faisant l’intermédiaire entre différents réseaux/sous-réseaux, il peut être utilisé pour contrôler et filtrer le trafic entre ces réseaux (firewall), ou pour masquer les adresses internes vis-à-vis de l’extérieur (IP masquerading ou NAT, Network Address Translation).
1. Configuration d’un serveur Linux en tant que routeur
Pour qu’un système Linux puisse router des messages entre les réseaux/sous-réseaux IP auxquels il participe, il suffit d’activer la fonction de routage au niveau du noyau. Il peut être aussi nécessaire de configurer des routes statiques dans la table de routage du système, pour spécifier vers quel routeur transférer les messages selon les réseaux destinataires.
Par défaut, Linux est un routeur statique IP, il n’échange pas ses informations de routage avec les autres routeurs de l’inter-réseau, via un protocole de routage (RIP, OSPF…). Pour qu’il puisse le faire, il faut installer un logiciel de routage dynamique, comme Quagga, Bird ou Zebra.
a. Activation du routage
L’activation du routage peut se faire dynamiquement, en utilisant le système de fichiers virtuel monté sur /proc. Le contenu du fichier /proc/sys/net/ipv4/ip_forward, 1 ou 0, détermine si le noyau courant gère ou non le routage IPv4.
Exemple
Activation du routage :
echo 1 > /proc/sys/net/ipv4/ip_forward
Désactivation du routage :
echo 0 > /proc/sys/net/ipv4/ip_forward
On peut également utiliser la commande sysctl, qui permet de modifier tout paramètre dynamique du noyau accessible à partir de /proc/sys. L’avantage est que la commande vérifie que le paramètre à écrire est valide.
Exemple
Activation du routage :
sysctl net.ipv4.ip_forward=1
Désactivation du routage :
sysctl net.ipv4.ip_forward=0
Pour pérenniser ce paramétrage dynamique à chaque démarrage...
Gestion des serveurs FTP
1. Le protocole FTP
FTP (File Transfer Protocol) est un protocole client-serveur de transfert de fichiers. Défini par la RFC 114 de 1971, remplacée par la RFC 959 de 1985, c’est l’un des protocoles les plus anciens de la famille TCP/IP.
Implémenté par de nombreux logiciels sur l’ensemble des systèmes d’exploitation, et particulièrement Linux, il reste très utilisé. Cependant, il nécessite une configuration attentive côté serveur, pour assurer une sécurité suffisante.
Les trois logiciels serveurs à connaître pour la certification LPIC-2 sont Pure-FTPd, vsftpd et, dans une moindre mesure, ProFTPd.
a. Principes de fonctionnement
Le protocole applicatif FTP s’appuie sur TCP et utilise le port bien connu 21 pour la transmission des commandes entre le client et le serveur. Les données s’échangent via une connexion TCP avec le port 20.
FTP peut fonctionner en mode anonyme ou avec authentification des clients. Dans ce dernier cas, le client doit fournir un compte utilisateur et un mot de passe valides pour le système du serveur. Cependant, le protocole FTP utilise des échanges en clair entre le client et le serveur, ce qui pose un problème de sécurité concernant le mot de passe.
En mode anonyme, les serveurs FTP associent à toutes les connexions des clients un compte unique du système, aux droits limités au strict minimum nécessaire.
Le protocole FTP tend à être remplacé par SFTP (SSH File Transfer Protocol), qui utilise des communications chiffrées.
b. Modes FTP actif et FTP passif
Historiquement, les clients FTP utilisent le mode actif : le client envoie une demande de connexion au serveur, sur le port TCP 21. Pour transférer les données, le serveur ouvre une connexion depuis le port TCP 20, vers un port TCP du client, établi dynamiquement.
Ce type de fonctionnement pose un problème si un pare-feu sépare le serveur du client, car la demande de connexion du serveur vers un port dynamique du client risque d’être bloquée.
En mode passif, c’est le client qui effectue les deux demandes de connexion, sur les ports TCP 21 (pour les échanges de commandes) et sur un port dynamique du serveur, spécifié au client...
Shell sécurisé (SSH)
Le protocole SSH (Secured SHell) s’appuie sur des services d’authentification et de confidentialité pour assurer des échanges entre clients et serveur à travers un transport sécurisé de données. On peut l’utiliser pour se connecter en tant que terminal sur un serveur SSH pour une session en mode ligne de commande (comme une sorte de Telnet sécurisé), mais il peut également assurer des fonctionnalités de type transfert de fichiers sécurisé (SFTP, SCP) ainsi que le transport sécurisé pour d’autres protocoles applicatifs.
1. Utilisations de OpenSSH
Le protocole Telnet a longtemps été utilisé pour permettre à des clients de se connecter en mode terminal sur des systèmes distants, à travers des réseaux TCP/IP. Mais ce protocole n’est pas sécurisé : tous les échanges entre le client et le serveur passent en clair sur le réseau, y compris le mot de passe de l’utilisateur demandant la connexion.
Le protocole SSH, plus récent, utilise une communication cryptée entre le client et le serveur, et procède à une authentification entre le client et le serveur, garantissant la confidentialité des échanges.
OpenSSH est une implémentation open source du protocole SSH, très utilisée en environnement Linux et BSD.
a. Configuration du serveur OpenSSH
Le fichier de configuration par défaut du serveur est /etc/ssh/sshd_config. Il contient une série de directives de la forme :
Directive Valeur,...,Valeur
Les directives usuelles sont les suivantes :
Protocol |
Version du protocole (le plus souvent 2). |
ListenAddress |
Adresses sur lesquelles le serveur SSH attend les demandes de connexion (par défaut : toutes les adresses locales). |
Port |
Numéro de port sur lequel le serveur attend les demandes de connexion (par défaut : 22). |
PermitRootLogin |
Autorise ou non un client à se connecter avec le compte super-utilisateur (défaut : yes). |
AllowUsers |
Liste des utilisateurs autorisés. Les autres sont interdits. |
DenyUsers |
Liste des utilisateurs interdits. Les autres sont autorisés. |
PasswordAuthentication |
Autorise ou non la connexion en fournissant le mot de passe de l’utilisateur (défaut : yes). |
PubkeyAuthentication... |
Tâches de sécurité
Avec l’interconnexion de plus en plus grande des réseaux privés et publics, la sécurité est devenue une préoccupation majeure des administrateurs système. Différents outils leur permettent de suivre et diagnostiquer les alertes de sécurité.
1. Commandes de test et de surveillance
Différentes commandes permettent d’effectuer des tests d’accessibilité des serveurs réseau, pour déceler d’éventuelles failles de sécurité.
Ces commandes sont détaillées dans le chapitre Configuration du réseau de cet ouvrage.
a. La commande nc
La commande ncat ou nc (netcat) est un outil multi-usage, permettant d’établir des communications via des sockets, locaux ou réseau, en TCP et en UDP, au-dessus d’IPv4 ou d’IPv6, en client ou en serveur, en spécifiant le port à utiliser.
Avec ses très nombreuses options, cette commande permet de tester les différents types de communication, en particulier à travers le réseau.
La commande nc remplace la commande traditionnelle telnet. Celle-ci n’est généralement plus fournie avec les distributions récentes, pour dissuader son utilisation en liaison avec un serveur telnet, qui pose des problèmes de sécurité (mot de passe du compte utilisateur transmis en clair).
b. La commande nmap
La commande nmap (Network Mapper), fournie avec le paquet nmap, est un outil puissant d’exploration d’un réseau et d’audit de sécurité. Elle permet de déterminer les machines actives sur le réseau et les services réseau disponibles sur ces machines.
La commande peut fournir en particulier une table des ports de chaque machine cible, avec leur état (ouvert, fermé, filtré par un pare-feu). Elle peut éventuellement rechercher et afficher des informations plus détaillées : système d’exploitation, logiciel en écoute sur chaque port ouvert, y compris les numéros de version.
L’utilisation de cette commande doit se faire...
OpenVPN
OpenVPN est un logiciel open source de gestion de réseaux virtuels privés (VPN, Virtual Private Network). En s’appuyant sur SSL, il permet de créer un canal de communication sécurisé à travers un inter-réseau IP. Il est fourni par le paquet logiciel openvpn.
1. Les principes d’OpenVPN
OpenVPN fournit des services d’authentification et de confidentialité. Il permet de relier des hôtes ou des réseaux, en leur fournissant un canal sécurisé (tunnel) à travers des réseaux IP.
a. Authentification
Les extrémités du tunnel sécurisé, c’est-à-dire les deux systèmes assurant le chiffrement des flux sortants et le déchiffrement des flux entrants, doivent s’authentifier mutuellement.
OpenVPN gère différents modes d’authentification, les deux plus utilisés sont l’authentification par clé partagée et celle par certificats numériques X.509. La première technique est plus simple à mettre en œuvre, mais elle est moins sécurisée.
b. Confidentialité
La confidentialité des communications est assurée par la bibliothèque OpenSSL. Le chiffrement des échanges utilise par défaut l’algorithme Blowfish, mais accepte également des algorithmes symétriques (AES notamment).
c. Types de fonctionnement réseau
OpenVPN propose différents types de connexion entre systèmes et réseaux :
-
Le mode point-à-point : le VPN relie uniquement deux machines.
-
Le mode site-à-site : le VPN est utilisé pour relier deux réseaux entre eux. Deux serveurs OpenVPN assurent la mise en place du tunnel, mais les extrémités de trafic sont les deux réseaux reliés. Les serveurs OpenVPN ont une fonction de routage sécurisé entre les deux réseaux.
-
Le mode accès distant : le VPN permet de relier une machine à un réseau.
-
Le mode bridge : le VPN relie deux réseaux distants au niveau physique.
2. Création d’un tunnel point-à-point
Le tunnel point-à-point relie deux machines à travers un inter-réseau.
a. Authentification par clé partagée
Le fichier de clé peut être généré...
Validation des acquis : questions/réponses
Répondez à ces questions ouvertes, comparables à celles qui pourront vous être posées lors de la certification, mais ces dernières seront sous forme de QCM ou demandant une réponse courte saisie au clavier.
1. Questions
1 Comment activer le routage IPv4 sur un système Linux ?
2 Comment afficher les chaînes de règles de la table nat d’iptables ?
3 Quelle chaîne iptables s’applique aux opérations de routage du système ?
4 Quel est le principal problème de sécurité posé par le protocole FTP ?
5 Pourquoi le mode actif FTP peut-il poser problème ?
6 Quel est l’avantage d’une connexion par SSH au lieu de Telnet ?
7 Qu’est-ce qu’un tunnel SSH ?
8 Quelle ligne de commande permet de copier de façon sécurisée un fichier d’un système distant sur le système local ?
9 Quel est le rôle de ssh-agent ?
10 Que signifie IDS ?
11 Des règles iptables apparaissent parfois automatiquement dans la configuration dynamique. Pourquoi ?
12 Quelle commande permet de scanner les ports d’un système distant ?
13 Quelle est la différence entre un tunnel VPN site-à-site et point-à-point ?
14 OpenVPN peut-il connecter deux machines distantes sans routage entre elles ?
2. Résultat
Référez-vous...
Travaux pratiques
Ces travaux pratiques proposent un atelier mettant en œuvre certains des points abordés dans ce chapitre. Pour chaque étape est donné un exemple commenté de réalisation, à adapter suivant la configuration de vos systèmes.
1. Configuration d’un pare-feu Linux
On décide de mettre en œuvre un pare-feu IPv4 sur un serveur Linux Debian 10. Il devra filtrer tout trafic entrant ou sortant, autre que celui concernant SSH, HTTP, HTTPS et DNS.
Commandes et fichiers utiles
-
iptables
-
wget
-
ping
-
host
-
iptables-save
-
/etc/iptables/rules.v4
Manipulations
1. |
Sur le serveur srvdebian, vérifiez que la commande iptables est disponible et affichez les règles de filtrage courantes. |
2. |
Configurez le pare-feu pour qu’il accepte les connexions entrantes et sortantes SSH. |
3. |
Configurez le pare-feu pour que, par défaut, il refuse tout trafic réseau. Testez la bonne application des règles. |
4. |
Configurez le pare-feu pour autoriser le trafic entrant et sortant HTTP, HTTPS et DNS. Testez la bonne application des règles. |
5. |
Configurez le serveur pour que les règles du pare-feu soient activées automatiquement au démarrage du réseau. Testez la bonne application des règles après redémarrage. |
Résumé des commandes et résultat à l’écran
1. |
Sur le serveur srvdebian, vérifiez que la commande iptables est disponible et affichez les règles de filtrage courantes. |
Le paquet logiciel est-il installé ?
root@srvdebian:~# apt list iptables
En train de lister... Fait
iptables/stable,now 1.8.7-1 amd64 [installé, automatique]
Les règles iptables en cours :
root@srvdebian:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination ...