7. Règles de filtrage avec identification des protocoles
Pour les deux configurations étudiées ci-avant, aucune distinction de
protocole n'a été effectuée. Pour affiner le processus d'enregistrement et de
suivi des communications réseau, il est possible de distinguer les
caractéristiques de chacun des protocoles autorisés.
Pour traiter les questions suivantes, on s'appuie sur les publication
du groupe de travail de l'IETF : TCP Maintenance and Minor Extensions.
Le protocole ICMP décrit dans le document standard
RFC792 Internet Control Message
Protocol est une pièce essentielle du modèle TCP/IP.
Il est principalement utilisé pour rapporter les conditions d'erreurs sur les
réseaux. Cependant, les caractéristiques actuelles du protocole ne
recommandent aucun contrôle de validation sur les messages d'erreur reçus. Ce
protocole laisse donc la porte ouverte à une grande variété d'attaques qui
peuvent être effectuées contre TCP à l'aide de messages
ICMP. Ces attaques comprennent la réinitialisation de
connexion, la réduction du débit de sortie, les dégradations de performances.
Toutes ces attaques peuvent être réalisées depuis des réseaux distants, sans
la nécessité d'analyser les paquets qui correspondent à la connexion
TCP attaquée.
Alors que les implications sur la sécurité du protocole
ICMP sont connues depuis longtemps, tous les systèmes
n'ont pas mis en application des contrôles de validation sur les messages
d'erreur reçus pour réduire au minimum l'impact de ces attaques.
Au niveau du noyau Linux, les responsables du sous-système réseau ont
décidé de ne plus traiter les messages de type 4
source-quench.
On dispose des ressources suivantes pour débuter l'étude du protocole
ICMP.
-
La liste des types de messages ICMP est
enregistrée par l'Internet Assigned Numbers
Authority (IANA) :
Types de messages ICMP.
-
Le Didacticiel sur Iptables
contient une section complète de présentation des caractéristiques du
protocole ICMP.
7.2. Règles de filtrage communes à toutes les configurations
-
Avec le protocole TCP, il est possible
d'identifier les phases d'établissement, de maintien et de libération de
connexion.
-
Avec le protocole UDP, il n'y a pas grand chose à
identifier puisque ce protocole n'est pas orienté connexion et que le
nombre des champs de l'en-tête est très limité.
|
1.
|
Quelle est la syntaxe d'appel de la commande
iptables qui permet d'afficher la liste des messages
ICMP et leurs types connus du système de filtrage
réseau ?
|
|
Après avoir recherché le mot clé icmp dans les
pages de manuels de la commande iptables, on obtient
l'instruction suivante :
# iptables -p icmp -h.
|
|
2.
|
Quelles sont les modifications à apporter sur le jeu de règles
communes pour distinguer les messages ICMP les plus
importants ?
|
|
On considère quatre types de messages
ICMP :
-
Type de message 8 : echo-request :
on autorise les nouvelles requêtes ping à
raison de 5 par seconde.
-
Type de message 0 echo-reply : on
autorise les réponses pong aux requêtes
ping enregistrées dans la machine d'état de
suivi de communication.
-
Type de message 3 :
destination-unreachable : on autorise toutes les
notifications d'erreur sur la destination relatives à une demande émise
à partir de ce système.
-
Type de message 11 : time-exceeded :
on autorise toutes les notification de débordement de temps relatives
au trafic émis à partir de ce système.
# cat iptables.common
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# I N P U T
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/s -m state --state NEW -j ACCEPT
-A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p icmp --icmp-type destination-unreachable -m state --state RELATED -j ACCEPT
-A INPUT -p icmp --icmp-type time-exceeded -m state --state RELATED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -m state --state NEW -j ACCEPT
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# O U T P U T
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -m state --state NEW -j ACCEPT
COMMIT
|
|
3.
|
Quelles sont les modifications à apporter sur le jeu de règles
communes pour distinguer les conditions sur les connexions
TCP ?
|
|
On distingue les demandes d'ouverture de connexion avec l'option
--syn des connexions déjà établies avec l'option inverse
! --syn.
# cat iptables.common
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# I N P U T
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/s -m state --state NEW -j ACCEPT
-A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p icmp --icmp-type destination-unreachable -m state --state RELATED -j ACCEPT
-A INPUT -p icmp --icmp-type time-exceeded -m state --state RELATED -j ACCEPT
-A INPUT -p tcp ! --syn -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp --syn -m state --state RELATED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -m state --state NEW -j ACCEPT
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# O U T P U T
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -m state --state NEW -j ACCEPT
COMMIT
|
|
4.
|
Quelles sont les modifications à apporter sur le jeu de règles
communes pour distinguer le protocole
UDP ?
|
|
# cat iptables.common
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# I N P U T
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/s -m state --state NEW -j ACCEPT
-A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p icmp --icmp-type destination-unreachable -m state --state RELATED -j ACCEPT
-A INPUT -p icmp --icmp-type time-exceeded -m state --state RELATED -j ACCEPT
-A INPUT -p tcp ! --syn -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp --syn -m state --state RELATED -j ACCEPT
-A INPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -m state --state NEW -j ACCEPT
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# O U T P U T
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -m state --state NEW -j ACCEPT
COMMIT
|