Sécuriser son serveur Linux Online

Formation

En Ligne

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En ligne

Nous vous proposons des cours ouverts pour se former autrement, pour devenir acteur de votre vie. Nous vous aidons à prendre votre envol, mais ça ne s'arrête pas là. Notre volonté est de vous accompagner tout au long de votre vie, dans votre parcours professionnel.Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Ce guide va vous apprendre à sécuriser un serveur et donc vous initier aux thématiques de la sécurité informatique. En quoi est-ce important ? Par définition, un serveur est ouvert sur le monde, un minimum de sécurité est donc intéressant afin de se prémunir des attaques les plus simplistes.

La marche à suivre sera donc la suivante :

  • présentation des failles ;

  • présentation des outils pour y pallier.

Bien entendu, je ne fais pas un cours complet de sécurité informatique, ce tutoriel est une initiation. Pour faire simple, c'est un peu comme fermer les volets la nuit.

Point de vue matériel, voilà ce qu'il vous faudra :

  • un serveur embarquant une distribution xBuntu ou Debian (pour les autres distribs, le principe sera le même, mais les commandes risquent d'être différentes) ;

  • un accès root (en ssh par exemple) et une console.

Tout le tutoriel se passe en ligne de commande afin de pouvoir être accessible à tous. Comme il faudra éditer des fichiers, veuillez vous assurer d'avoir un éditeur de fichier en ligne de commande (j'utiliserai personnellement nano qui est très simple).

C’est parti !

Filtrer le trafic via le firewallPrésentation

Le firewall (pare-feu en français) est l’élément indispensable pour sécuriser son serveur. Il va en effet filtrer tout le trafic en n’autorisant que les échanges permis par l’administrateur. Sans firewall correctement réglé, tous les trafics sont plus ou moins permis (c’est-à-dire qu’un attaquant peut faire ce qu’il veut chez vous) et ce genre de faille est détectable par un simple scan de ports.

Or, le noyau Linux offre déjà un pare-feu à l’utilisateur, qu’il est possible de configurer via le logiciel iptables (normalement contenu dans /sbin/iptables). S’il n’est pas installé :

apt-get install iptables

Nous allons maintenant détailler le fonctionnement d’un firewall - relativement simple. Un firewall analyse tout le trafic et vérifie si chaque paquet échangé respecte bien ses règles (critères de filtrage). Donc, il suffit de spécifier de bonnes règles pour interdire tout trafic superflu.

Les critères peuvent être divers (filtrer les ports, les protocoles, les adresses IP, etc). De base, nous allons spécifier nos règles sur les ports. Bien entendu, il faut être le plus strict possible quant au choix des règles ; c’est pourquoi, par défaut, tout firewall se règle en premier lieu en bloquant tout, absolument tout. Ensuite, nous allons « ouvrir » (autoriser le trafic) certains ports que nous voulons utiliser (par exemple pour un serveur web, nous allons ouvrir le port 80 afin que le site web soit accessible).

Pour plus de souplesse, nous allons écrire nos règles sous forme de script bash. Petite mesure de prudence si vous êtes loggué sur votre machine à distance (ssh), soyez bien sûr de ne pas vous bloquer l’accès ou - le cas échéant - de pouvoir rebooter la machine. Sinon, j’ai bien peur que récupérer votre serveur sera compliqué !

Déclaration des règlesFiltrage intégral

Notez que la commande iptables -L -v vous permettra de consulter les règles courantes.

Suit la marche à suivre pour créer les règles :

1. Créons le script :

nano /etc/init.d/firewall

Et on y écrit : #!/bin/sh

2. On efface les règles précédentes pour partir sur de bonnes bases :

iptables -t filter -F iptables -t filter -X

3. On bloque par défaut tout le trafic (si vous êtes en ssh, bien entendu, n’exécutez pas encore le script !) :

iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP

4. On ne ferme pas les connexions déjà établies :

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Nous indiquons avec les paramètres -m et --state de ne pas fermer les connexions qui sont déjà établies.

5. On autorise le loopback (on ne va pas se bloquer nous-mêmes !)

iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A OUTPUT -o lo -j ACCEPT

Note : lo signifie localhost (le serveur lui-même).

Tout est bloqué, il ne nous reste plus qu’à ouvrir les ports utilisés.

Ouvrir les ports utilisés

À partir de maintenant, observons plus en détail les paramètres de iptables :

  • -t : vaudra par défaut « filter » ;

  • -A : servira à indiquer le sens du trafic : INPUT (entrant) ou OUTPUT (sortant) ;

  • -p : indique le protocole (TCP ou UDP en principe) ;

  • --dport et --sport : respectivement port destination et port source (comme nous sommes le serveur, nous utiliserons principalement dport) ;

  • -j : comment traiter le paquet (nous nous servirons d'ACCEPT et de DROP pour respectivement accepter et refuser le paquet).

Plus nous serons précis, plus nous serons sécurisés. Renseigner ces quelques options est donc le minimum.

Ainsi, une règle simple aura la forme suivante :

iptables -t filter -A INPUT/OUTPUT -p protocole --dport port_a_ouvrir -j ACCEPT

Notez enfin que si vous voulez un échange, il faut toujours ouvrir le port dans les deux sens (INPUT et OUTPUT)... logique.

Exemple si l’on a un serveur web (port 80) :

iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

Vous pourriez me dire qu’il suffirait de n’écrire qu’une seule fois la ligne sans préciser l’argument -A... mais suivant notre politique de précision, ce serait une erreur car il existe d’autres valeurs que INPUT et OUTPUT pour lesquelles nous ne voulons pas permettre le trafic (FORWARD par exemple).

Il ne vous reste qu’à spécifier toutes les règles nécessaires. Voici un petit tableau pour vous aider (il s’agit de données par défaut) :

service

port d’écoute

protocole

ssh

22

tcp

web/HTTP

80

tcp

FTP

20 et 21

tcp

mail/SMTP

25

tcp

mail/POP3

110

tcp

mail/IMAP

143

tcp

DNS

53

tcp et udp

Cas particulier du ping
Le ping est basé sur un protocole particulier (ICMP) qui n’a pas de port prédéfini. Mais il faut absolument autoriser le ping car c’est la méthode la plus couramment utilisée pour savoir si votre serveur est en vie. Voici donc les règles :

iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j ACCEPTDémarrage du firewall

Enfin, nous allons lancer notre firewall :

chmod +x /etc/init.d/firewall /etc/init.d/firewall

Tester abondamment que tout se passe bien. Vous pouvez notamment utiliser l’utilitaire nmap pour vérifier qu’il n’y a pas plus de ports ouverts que voulu (cf partie 5).

Il est important de charger ce script au démarrage de la machine afin qu’un simple reboot ne vous laisse pas sans protection :

update-rc.d firewall defaultsExemple de script

Ci-dessous, je vous montre un exemple de script basique autorisant le minimum vital pour un serveur web (HTTP, FTP, mail et résolution de DNS). Je vous encourage à lire des docs et des tutos plus complets si vous voulez aller plus loin dans le paramétrage de votre firewall.

#!/bin/sh # Réinitialise les règles sudo iptables -t filter -F sudo iptables -t filter -X # Bloque tout le trafic sudo iptables -t filter -P INPUT DROP sudo iptables -t filter -P FORWARD DROP sudo iptables -t filter -P OUTPUT DROP # Autorise les connexions déjà établies et localhost sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -t filter -A INPUT -i lo -j ACCEPT sudo iptables -t filter -A OUTPUT -o lo -j ACCEPT # ICMP (Ping) sudo iptables -t filter -A INPUT -p icmp -j ACCEPT sudo iptables -t filter -A OUTPUT -p icmp -j ACCEPT # SSH sudo iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT # DNS sudo iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT sudo iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT sudo iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT # HTTP sudo iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT sudo iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT # FTP sudo iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT sudo iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT # Mail SMTP iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT # Mail POP3 iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT # Mail IMAP iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT # NTP (horloge du serveur) sudo iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPTAllez un peu plus loin

Le firewall, outre que c’est l’outil de base de tout système de sécurité, permet des manipulations plus poussées que filtrer des ports. Je vais vous montrer quelques exemples.

Flood ou déni de service

Ce genre d’attaque vise à surcharger la machine de requête. Il est possible de s’en prémunir pas mal directement au niveau du firewall :

iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT

Le flags TCP syn engendre des demandes de connexions, et le but de cette règle est donc de les limiter à une par seconde (champs limit).

Il est cependant déconseillé de monter au-delà de la seconde (sous peine de gêner le contrôle de flux et la récupération d’erreur de TCP).

On peut faire de même avec les protocoles UDP et ICMP :

iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT

Notez cependant que ce type d’attaque permet de faire tomber le serveur, mais pas d’en prendre l’accès. C’est pourquoi le risque d’en être la cible est assez mince (sauf si l’on s’appelle Google). En général, un logiciel simple anti-intrusion comme fail2ban (cf partie 2) est suffisant, suivant le niveau de sécurité recherché.

Scan de ports

On peut aussi limiter un tant soit peu le scan de ports (qui consiste à tester tous vos ports afin de détecter ceux qui sont ouverts). Pour cela, une règle de ce genre irait :

iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

C’est un peu le même principe que ci-dessus. Sachant qu’une connexion TCP en bon et due forme requiert trois paquets avec trois flags différents, on voit tout de suite la finesse de cette règle qui peut travailler paquet par paquet. Pour plus d’infos sur les flags TCP, cf Wikipédia.

Notez que cette règle basique n’est pas très efficace, c’est une protection de base. La partie 2 ira plus loin dans le blocage des scans de ports.

Bannir une IP

Si vous repérez dans les logs ou autre une adresse IP suspecte, vous pouvez la bannir aisément au niveau du firewall via la commande :

iptables -A INPUT -s adresse_ip -j DROP

Notez cependant qu’il n’est pas conseillé de bannir les IP à tour de bras.

Se prémunir contre les intrusions

Actuellement, le firewall va bloquer toutes tentatives de connexions sur les ports fermés. Mais qu’en est-il des ports ouverts ? Afin de contrôler plus précisément ce qui se passe dessus, le firewall n’est pas suffisant et nous allons devoir utiliser d’autres outils, appelés IDS (Intrusion Detection System) et IPS (Intrusion Prevention System). Ces deux catégories de logiciels vont - comme leur nom l’indique - surveiller toute tentative d’intrusion sur le serveur.

La démarche qui va suivre va vous montrer comment réagir à chaque étape d’une tentative intrusion classique, à savoir :
1. le scan de port (plus généralement, la collecte...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Sécuriser son serveur Linux Online

Prix sur demande