• 6 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 14/05/2021

Rendez votre serveur accessible tout en le sécurisant

Après avoir sécurisé votre réseau, je vous propose cette fois-ci de sécuriser directement le serveur en configurant son propre firewall. En effet, chaque serveur ou ordinateur dispose d’un firewall intégré, un logiciel firewall, qui ne remplace pas le routeur/firewall, mais qui le complète. Plus vous placerez de barrières entre les pirates et votre réseau, plus votre réseau sera sécurisé. Ajoutons qu'il permet de créer des règles à l'intérieur même de son sous-réseau, ce que le routeur/firewall ne peut pas faire. Allez, on commence tout de suite.

Sécurisez votre serveur WEB avec Iptables

Iptables, nous l’avons déjà dit, c’est un logiciel firewall, présent dans le noyau Linux. Vous n’avez donc, en théorie, pas besoin de l’installer, il est déjà là. Sauf dans le docker ToolBox, dans lequel il a été enlevé pour l'alléger. :)

Alors, connectez votre serveur à Internet en l’autorisant depuis votre routeur/firewall à y accéder. Vous enlèverez cette autorisation juste après avoir téléchargé le paquet.

Installez Iptables

Connectez-vous sur votre serveur et tapez ces commandes :

root@Serveur_Web:~# apt-get upgrade
root@Serveur_Web:~# apt-get update

Pour mettre à jour votre serveur.

root@Serveur_Web:~# apt-get install iptables

Pour installer le Iptables.

root@Serveur_Web:~# iptables -V
iptables v1.6.1

Pour voir sa version et s’il est bien installé.

Voyons maintenant comment il fonctionne en tapant la commande :

root@Serveur_Web:~# 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

Vous voyez à côté de chaque chain, entre parenthèses policy ACCEPT. Il s’agit de la politique de sécurité par défaut. Ici votre firewall accept tous les paquets tant qu’on ne lui dit pas le contraire. C’est exactement le contraire de ce que vous voulez faire !

Changez de politique de sécurité par défaut

Pour changer de politique de sécurité par défaut, tapez la commande :

root@Serveur_Web:~# iptables ---policy FORWARD DROP
root@Serveur_Web:~# iptables --policy INPUT  DROP
root@Serveur_Web:~# iptables --policy OUTPUT  DROP

Ces commandes vous permettent de changer la politique par défaut (policy) en DROP (supprimer). Il existe trois possibilités :

  • ACCEPT

  • DROP

  • REJECT (qui a la même action que DROP, mais envoie un message d’erreur à l'émetteur du paquet

 
Regardez de nouveau l’état de votre firewall.

root@Serveur_Web:~# iptables -L
Chain INPUT (policy DROP)

target     prot opt source               destination

Chain FORWARD (policy DROP)

target     prot opt source               destination

Chain OUTPUT (policy DROP)

target     prot opt source               destination

Tout est maintenant bloqué par défaut. Vous ne devriez plus pouvoir joindre le serveur Web depuis l'extérieur.

Appliquez les règles de la politique de sécurité

Vous allez donc commencer par reprendre les règles que vous avez appliquées au routeur/firewall OPNsense. Cela vous parait peut-être superflu, mais deux firewalls valent mieux qu’un ! Si le pirate arrive à entrer dans votre réseau, ne lui facilitez pas la tâche et offrez-lui un deuxième mur à franchir.

Voici comment construire vos règles HTTP depuis l’extérieur vers le serveur :

root@Serveur_Web:~#sudo iptables --append INPUT --protocol tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Cette première ligne autorise le trafic HTTP depuis l’extérieur :

  • --append ou -A ajoute une règle,

  • --protocol ou -p permet de spécifier le protocole,

  • --dport permet de spécifier le port de destination,

  • --sport le port source,

  • --match ou -m conntrack permet d’affiner la recherche sur le paquet,

  • --ctstate NEW,ESTABLISHED permet de spécifier si l’état de connexion est nouveau ou établi,

  • --jump ou -j ACCEPT permet de dire ce qu’il faut faire de ce paquet. (ACCEPT, REJECT ou DROP).

root@Serveur_Web:~#sudo iptables --append OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Cette deuxième ligne autorise le trafic HTTP vers l’extérieur.

root@Serveur_Web:~# iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)

pkts bytes target     prot opt in     out     source               destination

0     0 ACCEPT     tcp  -- any    any     anywhere             anywhere             tcp dpt:http ctstate                                                           NEW,ESTABLISHED

Chain FORWARD (policy DROP 0 packets, 0 bytes)

pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)

pkts bytes target     prot opt in     out     source               destination

0     0 ACCEPT     tcp  -- any    any     anywhere             anywhere             tcp spt:http ctstate                                                           ESTABLISHED

Voilà, votre serveur Web n’est plus accessible qu’en HTTP.

Pour les besoins de votre entreprise, vous serez sûrement amené à autoriser l’accès SSH provenant d’une adresse IP connue. Regardons comment créer une telle règle.

Autorisez une connexion SSH

root@Serveur_Web:~# iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Cette règle autorise tout le réseau LAN à accéder au routeur par le protocole SSH. Pour spécifier une seule adresse, il vous suffit remplacer 192.168.1.0/24 par l’adresse du PC que vous voulez autoriser.

root@Serveur_Web:~#iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Cette commande est à ajouter dans la chain OUTPUT.

Voilà, vous en savez plus sur cet outil puissant qu’est Iptables. N’hésitez pas à en apprendre plus sur lui. Nul doute que vous aurez à le configurer dans votre carrière. Dans le prochain chapitre, nous aborderons les proxys, ce qu’Iptables ne peut malheureusement pas faire.

Ce qu’il faut retenir

  • Iptables est un firewall logiciel, capable de tout ce que peut faire un firewall réseau/transport.

  • Iptables ne peut pas faire proxy.

  • Iptables à trois chain :

    • pour les paquets qui entrent dans le serveur INPUT,

    • pour les paquets qui sortent du serveur OUTPUT,

    • pour les paquets qui transitent par le serveur FORWARD.

  • Il faut commencer par définir la politique par défaut à DROP, pour chaque chain :

    • iptables --policy chain DROP

  • Pour autoriser le trafic HTTP de l’extérieur, il faut entrer ces commandes :

    • iptables --append INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

    • iptables --append OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Exemple de certificat de réussite
Exemple de certificat de réussite