par tomtom » 13 Avr 2003 16:52
Tres bonne réponse <IMG SRC="images/smiles/icon_smile.gif">
<BR>
<BR>Allez comme j'ai du temps cet après-midi, un petit cours de tcp/ip !
<BR>
<BR>A chaque fois qu'un application se connecte à internet, elle établit une communication bidirectionnelle avec un serveur.
<BR>Pour faire cela, elle choisit un port > 1024, et elle envoie un paquet sur internet :
<BR>
<BR>ip source : votre ip publique
<BR>port source : le port choisi
<BR>ip destination : ip du serveur où vous vous connectez
<BR>port destination : le port d'ecoute du serveur.
<BR>¨
<BR>Pour ne pas que ce soit trop le bazar, il a été décidé que les serveurs écouteraient sur un port qui depend de ce qu'ils proposent comme service.
<BR>Ces ports sont appelés "well known ports" et portent des numéros < 1024.
<BR>Ils sont définis par la RFC 1700.
<BR>Cela permet par exemple de savoir qu'un serveur telnet ecoute sur le port 23 en général.
<BR>Les applications clients choisissent un port > 1024 pour ne pas risquer de masquer un serveur qui ecouterait sur la même adresse ip.
<BR>
<BR>Une première reflexion : A priori en bloquant les ports source > 1024 en sortie, on bloque tous ses clients !!!
<BR>
<BR>Une seconde reflexion : Quand le serveur va me repondre, le paquet va arriver avec un port destination egal au port que j'ai choisi, donc si je veux avoir la reponse, il faut que mon firewall laisse passer tous les paquets entrant avec un port destination > 1024.
<BR>
<BR>Hum, bonjour la sécurité !! Un pirate n'a qu'à forger des paquets avec un port destination > 1024 et le firewall les laissera tous passer <IMG SRC="images/smiles/icon_mad.gif">
<BR>
<BR>Bon, on va se protéger un peu plus : n'autorisons que les paquets dont :
<BR>1- le port destination > 1024
<BR>2- le port source est celui d'un serveur que l'on autorise à utiliser : par exemple uniquement 80, 81,20, 21, 22, 23 pour avoir web telnet ssh ftp.
<BR>
<BR>OK, on a amélioré un peu, mais tout de même, un pirate peut là encore forger le paquet et choisir son port source pour se faire passer pour un serveur aux yeux du firewall. Il va alors falloir jongler entre applications possibles et sécurité, et c'est là la grosse limite des firewalls dits "stateless".
<BR>
<BR>Comme le fait remarque Antolien, en version 1.3 les ports sont ouverts uniquement en sortie (un client peut envoyer un paquet avec port > 1024 comme source et traverser le firewall.). Mais alors, comme le serveur peut-il repondre ?
<BR>Grace à Netfilter, qui est un firewall statefull, et à son interface IPTables.
<BR>En effet, avec ce genre de firewall, on peut ouvrir dynamiquement les ports pour des connexions déja établies par un client. Genial, non ?
<BR>
<BR>Exemple :
<BR>Je me connecte à <!-- BBCode auto-link start --><a href="http://www.ixus.net" target="_blank">www.ixus.net</a><!-- BBCode auto-link end --> pour poster ce merveilleux message.
<BR>
<BR>1- envoi d'un paquet tcp :
<BR> ip source : mon ip publique (apres translation d'adresse mais c'est un autre histoire).
<BR> port source : 2035
<BR>
<BR> ip destination : <!-- BBCode auto-link start --><a href="http://www.ixus.net" target="_blank">www.ixus.net</a><!-- BBCode auto-link end -->
<BR> port destination : 80
<BR>
<BR>Ce paquet a une particularité : il est l'initiateur d'une connexion et contient un drapeau appelé "SYN".
<BR>
<BR>2- le firewall laissep asser ce paquet (le port source est > 1024, le port destination est autorisé.
<BR>
<BR>3- le firewall crée une entrée dans une table (un "conntrack"), qui contient l'ip source, le port source, l'ip destination et le port destination, ainsi que l'etat actuel : "syn sent")
<BR>
<BR>4- le paquet revient du serveur :
<BR> ip source : <!-- BBCode auto-link start --><a href="http://www.ixus.net" target="_blank">www.ixus.net</a><!-- BBCode auto-link end -->
<BR> port source : 80
<BR>
<BR> ip destination : mon ip publique
<BR> port destination : 2035
<BR>
<BR>Ce paquet est la reponse à une connexion. Il contient deux flags : SYN et ACK
<BR>
<BR>5- le firewall examine ce paquet.
<BR>Il parcourt sa table de conntracks, et s'apperçoit qu'il attendait ce paquet. Il le laisse passer.. La connexion est établie. Le firwall va maintenant laisser passer tous les paquets suivants, jusqu'à epuisement d'un timeout.
<BR>
<BR>
<BR>
<BR>Voila, c'est très grossier comme présentation mais ca peut toujours eclairer.
<BR>
<BR>Il faut savoir que IPables permet d'affiner les règles en regardant tous les flags TCP et UDP, ce qui permet des comportements très proches de ce que l'on recherche.
<BR>
<BR>
<BR>Pour revenir à la question : Si tu as un IPCop avec IPChains (version avant 1.3), tu ne peux pas benéficier de ces merveilles. Si malgré tout tu veux bloquer les ports, il ne te reste qu'a installer une version plus recente.
<BR>
<BR>Thomas
One hundred thousand lemmings can't be wrong...