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