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.
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) : ICMP parameters.
-
Le Tutoriel 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
|