Maintenant que vous maîtrisez les différents scénarios d’attaque des architectures SI, je vous propose de mettre en œuvre, pas à pas, la sécurité de votre réseau. Comment ? Tout d’abord en créant des règles de pare-feu qui vous permettront de cloisonner et filtrer le réseau. Puis, vous verrez comment chiffrer certaines connexions réseau et l’incidence que cela peut avoir sur l’architecture et le filtrage réseau. Enfin, vous compléterons cela par l’étude des fonctions de sécurité des équipements réseau, indispensables pour protéger l’intérieur d’une zone réseau.
Commençons par créer des règles de filtrage sur un pare-feu réseau dans ce premier chapitre.
Qu’est-ce qu’un pare-feu ?
Un pare-feu peut être :
soit matériel (sous forme d'appliance),
soit logiciel comme iptables sous Linux ou PF sous OpenBSD. Pour que les exemples soient le plus facilement mis en application, je vous propose de mettre en place le filtrage à partir de Linux.
Néanmoins, pour des pare-feu matériels professionnels, que la configuration soit en mode graphique ou en ligne de commande, les principes sont les mêmes et peuvent être facilement transposés !
Mettez en place le filtrage réseau
Pour mettre en place le filtrage réseau, vous verrez comment :
définir la politique par défaut,
autoriser les connexions légitimes,
utiliser le suivi d’état des connexions,
mettre en place la journalisation.
Allez, c’est parti !
Définissez la politique par défaut
La politique par défaut permettra d’indiquer au pare-feu, en l’absence de règle spécifique pour un flux, s’il doit interdire le flux par défaut ou l’autoriser.
Tout d'abord, vous pourrez obtenir la configuration actuelle avec la commande suivante :
# iptables -LChain INPUT# 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 #
Sur la plupart des distributions Linux, la politique par défaut est de laisser passer le trafic réseau et ne pas appliquer de règle de filtrage ( policy ACCEPT
), ce qui est le cas ici. Pour l'exercice, les règles de filtrage peuvent être réinitialisées avec l'option -F
.
Vous pouvez voir ici que la politique peut s'appliquer sur 3 chaînes de traitement :
INPUT
: les connexions réseau entrantes,OUTPUT
: les connexions réseau du système vers l'extérieur,FORWARD
: les connexions routées au travers du système.
Une bonne pratique est d'interdire tout le trafic et ajouter au fur et à mesure les flux autorisés. Pour cela, il faut modifier la politique par défaut. Pour interdire tous les flux entrants sur le système :
# iptables -P INPUT DROP
Trois politiques peuvent être définies, ACCEPT pour autoriser par défaut, DROP pour tout refuser sans réponse et REJECT pour refuser, mais en répondant au système émetteur que sa connexion l'a été.
Autorisez les connexions réseau légitimes
Dans la partie précédente, nous avons vu comment définir l'architecture, les différentes zones et ensuite définir les flux entre chaque zone. Une règle sera donc ajoutée pour autoriser chacun de ces flux.
Prenons l'exemple des postes d'administration qui doivent pouvoir se connecter en SSH sur la pare-feu pour l'administrer :
# iptables -A INPUT -s $POSTE_ADMIN -p tcp --dport 22 -j ACCEPT
De manière simple, les options sont ici :
-A INPUT
: ajouter une règle à la chaîne INPUT,-s
: la source de connexion. Ici,$POSTE_ADMIN
peut valoir soit l'adresse IP du poste d'admin, soit la plage d'adresse de l'ensemble des postes d'administration en notation CIDR,--dport
pour donner le portTCP
concerné, ici 22 pour SSH,-j
donne l'action à appliquer,ACCEPT
pout autoriser.
Cette règle permet d’autoriser le flux du client vers le serveur. Vous allez maintenant voir comment utiliser le suivi d’état pour autoriser l’ensemble des échanges entre le client et le serveur, dans les deux sens.
Utilisez le suivi d'état
Lorsqu'une connexion traverse le pare-feu, une règle va autoriser la connexion d'un client vers une IP et un port du serveur de destination. Toutefois, lorsque le serveur visé répondra, cela engendrera une nouvelle connexion du serveur vers le client.
Bien sûr, vous ne devez pas écrire deux règles distinctes, mais reposer sur le suivi de l'état de connexion (pour TCP, le pare-feu se base sur les flags SYN, SYN-ACK, ACK, en s'assurant de l'enchaînement, du sens, des numéros de séquences, etc.).
Pour ajouter cette fonction de suivi d'état, iptables utilise l'option « -m state
» en précisant que sont autorisés les nouveaux paquets, ainsi que ceux relatifs à des connexions déjà établies.
Par exemple, pour autoriser les connexions du LAN des postes de travail vers le proxy Web :
# iptables -A INPUT -s $LAN_PDT -d $PROXY_WEB -p tcp \ --dport 8080 \ -m state --state NEW,ESTABLISHED \ -j ACCEPT
Configurez la translation d’adresse avec le NAT
Lorsqu'un paquet est routé au travers du pare-feu, ce dernier peut modifier certaines caractéristiques du paquet. C'est le NAT - Network Adress Translation (traduction d'adresse réseau). Le cas le plus courant est pour masquer les adresses IP du réseau interne et les remplacer par l'adresse IP de sortie sur Internet. Par exemple, avec un réseau interne dont la plage d'adresse est 192.168.0.0 et une interface de sortie sur Internet ppp0 :
# iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
La règle est ici appliquée sur la chaîne de POSTROUTING
et l'action est celle de remplacer les adresses (MASQUERADE).
Vous devrez également autoriser le trafic correspondant :
# iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT # iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEP
Journalisez les connexions réseau
C'est une bonne chose de bloquer un flux non autorisé, mais vous tirerez aussi avantage à surveiller les connexions malveillantes, qu’elles aient été bloquées par le pare-feu ou qu’elles correspondent à un flux autrement autorisé. Activer la journalisation vous permettra cela. Pour reprendre notre exemple sur l'administration par SSH :
# iptables -A INPUT -s $POSTE_ADMIN -p tcp --dport 22 -j LOG --log-prefix "ADMIN_SSH: "
Le préfixe permet une lecture plus simple ou de traiter automatiquement les journaux.
Sauvegardez
Pour que la configuration du pare-feu soit disponible au prochain démarrage, pensez à la sauver avec l'une des deux commandes suivantes :
# iptables-save # service iptables save
Ça y est, vous savez maintenant comment activer le pare-feu nécessaire aux cloisonnement et au filtrage du réseau.
Voyons dans le chapitre suivant quelles sont les différentes alternatives pour protéger des connexions réseau en les chiffrant !
En résumé
Pour un filtrage efficace par liste blanche, configurez une politique qui interdit les connexions par défaut, puis ajouter au fur et à mesure des règles qui autorisent les connexions légitimes.
Faites des règles les plus précises et les plus restrictives possibles, en précisant les IP source et destination, port destination et en activant le suivi d'état.
Le NAT permet de masquer et modifier les adresses IP internes non routables sur Internet.
La journalisation permet d’identifier les connexions malveillantes, tirez en bénéfice !