Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Linux
  3. Sécurité du système
Extrait - Linux Administration système et exploitation des services réseau (5e édition)
Extraits du livre
Linux Administration système et exploitation des services réseau (5e édition)
1 avis
Revenir à la page d'achat du livre

Sécurité du système

Sécurité du système

Ce chapitre traite de différents aspects de la sécurité d’un système Linux en réseau : Filtrage et translation d’adresses via le routeur, sécurisation d’un s erveur FTP, gestion de SSH, tâches courantes de surveillance, mise en oeuvre d’un réseau virtuel privé VPN.

1. Configuration d’un routeur

L’objectif de cette section est de vous apprendre à :

  • 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...

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...

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 principaux logiciels serveurs 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 par ce dernier, via la connexion de commande....

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...

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...

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é...