Atelier Netfilter

Embed Size (px)

Citation preview

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    1 of 14 20.04.2004 23:15

    ATELIER NETFILTER : LE FIREWALL LINUX ENACTION

    Olivier ALLARD-JACQUIN [email protected] 0.9.1 - 20 avril 2004Ce document est publi sous la Licence de Libre Diffusion de Documents (LLDD)

    Ce document est le support crit dun atelier / TP ( Travaux Pratiques) que jai prsent le 1er avril 2004dans le cadre de lassociation Linux Guilde. Il sagit dune succession dexercices et de leurs rponsesafin dtudier le comportement et la mise en oeuvre de Netfilter, le firewall de Linux. Vous trouverez les notions thoriques de cet atelier dans cette autre documentation que jai cris.Vous trouverez la dernire version de ce document :

    sur son site principal : http://olivieraj.free.fr/fr/linux/information/atelier_netfilter/.sur le miroir de la Guilde.en version PDF (sans les scripts des solutions). Pour la lire, utilisez le lecteur Xpdf ou Acrobat Reader.sous forme darchive complte, au format .tgz (.tar.gz), afin de la lire en hors ligne.

    Pour les personnes dsirant reproduire cet atelier chez eux, vous aurez besoin :

    De tlcharger le fichier de la prsentation au format OpenOffice.org. Vous pourrez alors suivre la prsentation tout en faisant les exercices, en vous y rfrant chaque fois que vous verrez labalise :

    Illustration : xxxx

    Dune machine sur laquelle sera installe un serveur web ( Apache par exemple).Publiez dessus la prsente prsentation. Pour cela, vous pouvez tlcharger larchive au format .tgz.Cette machine devra avoir pour adresse IP 192.168.1.50. Si vous voulez utiliser une autre adresse IP, il faudra que vous modifiez les lignes "IP_SERVEUR=" dans les scripts "filter1a.sh", "filter2a.sh", "log1a.sh", "log2a.sh". Modifiez aussi les lignes "IP_MACHINE_*=" dans le script "userchaine2a.sh".En terme de scurit, cette machine devra accepter toutes les connexions du rseau local(192.168.1.0/255.255.255.0 dans notre exemple).

    Dans la suite de la documentation, cette machine sera appele "machine du prsentateur" ou"serveur".

    Dune seconde machine, relie en rseau avec la prcdente, sur laquelle vous allez travailler.

    Elle devra utiliser le mme rseau IP que la machine serveur.Cette machine devra bien entendu tourner avec un kernel 2.4.x ou suprieur, tre compilpour utiliser Netfilter (le firewall de Linux), et possder le iptables associ.Il faudra aussi un navigateur web (Mozilla, ...), votre diteur de texte favori, nmap (scannaire de ports rseaux), et ventuellement le xterm " rxvt", si vous voulez utiliser "rxvt_log" afin danalyser agrablement vos logs Netfilter.Pour la partie IV il faudra installer dessus un serveur web (Apache, ...) et un serveur FTP (ProFTPD, ...).

    Enfin, pour certains tests et dmonstrations de latelier, vous aurez besoin dune troisimemachine configure comme la 2nd machine. Cependant, cest optionnel. Aussi si vous navez pasde 3me machine disponible, vous ne ferez pas certains exercices et passerez aux exercicessuivants.

    Plan :

    Introduction

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    2 of 14 20.04.2004 23:15

    I Rappels sur NetfilterI-1 RglesI-2 ChanesI-3 TablesI-4 Iptables

    II Filtrages de baseII-1 Principes gnraux du filtrageII-2 Initialisation des chanesII-3 Cibles/politique de filtrage par dfautII-4 Filtrage de portsII-5 Log

    III Filtrages plus voluesIII-1 Insuffisances du filtrage par portsIII-2 Suivi de connexionIII-3 ULogIII-4 Chanes utilisateursIII-5 Contraintes de ltat NEW

    IV Firewall et serveursIV-1 Serveur HTTPIV-2 Serveur FTP

    ConclusionRemerciementsLicense

    Introduction

    Dans cet atelier, nous allons revoir quelques rapides rappels sur Netfilter, et quelles bases des techniques de firewall sous Linux. Puis nous mettrons en oeuvre des techniques simples de filtrages. Dans une 3me partie, nous aborderons des filtrages plus volus usage tant personnels queprofessionnels. Nous aborderons enfin la mise en oeuvre de protections destins aux serveurs .

    I Rappels sur Netfilter

    Le contenu thorique de cet atelier se base sur une documentation que jai cris, et que vous pouvezretrouver sur http://olivieraj.free.fr/fr/linux/information/firewall/.Netfilter est une couche logiciel intgre dans le kernel de Linux, cest dire le coeur mme du systmedexploitation Linux. Elle se situe plus particulirement au niveau des couches rseaux IP (du protocolerseau IP, appel aussi par abus de langage "TCP/IP"), et se caractrise sous la forme de 5 hooks("crochets" en Franais) placs 5 endroits stratgiques du systme rseau du kernel.Lorsque quun paquet IP arrive un de ces hook, il va subit un certain nombre de vrifications ( rgles) que constituent la chane associ au hook en question. En fonction du rsultat de ces vrifications, uneaction (appele " cible" par la suite) sera dcid pour lui : suppression du paquet, acceptation,modification, etc...

    Illustration : Vue gnrale et hooks

    I-1 Rgles

    Comme leur nom lindiquent, les rgles sont des critres sur le contenu des paquets.Les critres peuvent tre multiples :

    Interface source ou destination.Adresse IP source ou de destination.Port source ou de destination.Type de trame.Nombre de paquets.Paquet marqu par la table Mangle.Etc...

    Suivant si le paquet rpond ou non aux critres, le paquet sera dirig vers une cible ou un autre.Exemple de cible :

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    3 of 14 20.04.2004 23:15

    DROP : Le paquet est dtruit purement et simplement.REJECT : Le paquet est dtruit, mais lexpditeur en est inform.ACCEPT : Le paquet est autoris continuer dans le traitement de la pile IP. Mais une autre rglesitue aprs la rgle qui a accept ce paquet peut trs bien finalement dcider de le supprimer.LOG / ULOG : Le paquet est autoris continuer de passer, mais ses caractristiques sontnotes au passage.MASQUERADE : Le paquet va tre modifi, afin de dissimuler (de masquer en fait) certainesinformations concernant son origine.SNAT : Ladresse IP source est modifie.DNAT : Ladresse IP de destination est modifie.MARK : Le paquet est marqu en y attachant une information.Une chane utilisateur : Le paquet sera pass une autre chane, dfinie par lutilisateur. Nousverrons cela plus loin.Etc...

    Illustration : Rgles

    I-2 Chanes

    Les chanes sont de deux types : pr-dfinie ou utilisateur. Dans les deux cas, les chanes sont desempilements de rgles, que le paquet IP va parcourir. Une fois que toutes les rgles ont t appliquessur le paquet, et que celui-ci ne correspond aucune rgle, la cible par dfaut de la chane sera utilise.En gnral, il sagira de DROP ou de ACCEPT.

    Les chanes pr-dfines sont au nombre de 5, et sont toutes associes un hook particulier :

    Hook Chane Description

    NF_IP_PRE_ROUTING PREROUTINGA ce stade, le paquet est "brut de forme", cest dire quilna subit aucune modification par rapport ce que linterfacerseau a reu.

    NF_IP_LOCAL_IN INPUTCe "hook" est trs intressant, car ce stade, le paquet estprt tre envoy aux couches applicatives, cest direaux serveurs et aux clients qui tournent sur la machine. Cest un des points principaux sur lequel nous allons travailler.

    NF_IP_FORWARD FORWARD

    "Forward" ("faire suivre" en franais) est assez particulier.Ce "hook" voit passer des paquets IP qui vont transiter dune interface rseau une autre, sans passer par la couche applicative. Pourquoi diantre faire suivre un paquet entre 2 interfaces rseaux, comme par exemple entre "eth0" et"ppp0" ? En fait, cest afin de permettre Linux de setransformer en passerelle, une sorte de connexion entre diverses interfaces rseaux.

    NF_IP_LOCAL_OUT OUPUT

    Ce "hook" est lquivalent du "NF_IP_LOCAL_IN", sauf quilest excut aprs que les couches applicatives aienttraits, ou gnrs, un paquet IP. Tout comme"NF_IP_LOCAL_IN", cest un point que nous allons voir endtail.

    NF_IP_POSTROUTING POSTROUTINGCest lquivalent du "NF_IP_PRE_ROUTING" pour lespaquets IP sortants de la couche IP. A ce stade, les paquets sont prt tre envoys sur linterface rseau.

    Les chanes utilisateurs sont une particularit intressante de Netfilter. Elles peuvent tre appeles entemps que cible dune rgle (dune chane dite "appelante"), et contenant elles-mmes des rgles. A lafin de la chane utilisateur, si aucun traitement na t effectu sur le paquet IP, celui-ci continuera sontraitement dans la chane appelante.

    Illustration : Chanes

    I-3 Tables

    Comme son nom ne lindique pas, Netfilter ne soccupe pas quuniquement du filtrage des paquets IP. Cest une de ses tache, mais ce nest pas la seule. Ainsi, Netfilter est conue pour grer 3 taches. Et

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    4 of 14 20.04.2004 23:15

    chaque tache, une table a t dfinie. Les 3 taches sont :

    Filtrage, via la table FILTERTranslation dadresse, via la table NAT (Network Address Translation)Modification des paquets IP, via la table MANGLE

    Une table est compose dun ensemble de chanes pr-dfines, et dun comportement particulier. Ainsi :

    La table FILTER est compose des chanes :

    INPUTFORWARDOUTPUT

    Son but est dassurer le filtrage des paquets IP, cest dire dautoriser ou non un paquet IP accder une application, ou en sortir. La table FILTER est aussi responsable de lautorisationdu transfert des paquets IP dune interface rseau lautre, dans le cas du NAT.

    La table NAT est compose des chanes :

    PREROUTINGOUTPUTPOSTROUTING

    Elle est spcifiquement destine assurer le NAT. Alors que dans la table FILTER, la chaneFORWARD permet de dfinir quelles sont les paquets autoriss tre NAT, la table NAT seracharge de la modification des paquets, afin quils soient correctement utilisable sur linterface dedestination.

    La table MANGLE est compose des chanes :

    PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING

    Cette table est trs particulire. Elle permet de modifier les paquets, en leur rajoutant ousupprimant certaines informations. Cette table est pour linstant utilis dans le cadre de la QoS(Quality Of Service), permettant de rendre le traitement de certains paquets plus prioritaires que dautres.

    Illustration : Tables

    I-4 Iptables

    Lorsque lon parle de firewall sous Linux, iptables est LA commande connatre. Ce programme est la2nd partie principale de Netfilter. Contrairement au code de Netfilter inclus dans le noyau Linux, "iptables" est un programme "classique" (i.e : il fonctionne dans lespace utilisateur) que lon lance manuellement. Bien entendu, seul le root a les droits suffisant pour lutiliser.

    Iptables permet au root de configurer Netfilter, en lui indiquant quelles sont les rgles utiliser pour lesdiffrentes tables et chanes. Il se lance plusieurs fois de suite, chaque lancement permettant decrer/supprimer/visualiser une rgles de Netfilter.

    Un descriptif complet des paramtres diptables serait inutile. La commande "man iptables" tant LArfrence de toute documentation sur cette commande. Cependant, en voici un bref rsum des principaux paramtres :

    iptables [table] [action] [critres] [cible]Pour plus dinformations sur ces paramtres ou pour avoir plus dexplications sur les exemples, vouspouvez consulter ce chapitre de ma documentation de Netfilter.

    [table]Ce paramtre permet de dfinir sur quelle table la configuration va seffectuer. Comme vuprcdemment, il y a 3 tables : FILTER, NAT et MANGLE.

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    5 of 14 20.04.2004 23:15

    Paramtre Description

    -t [le nom de la table : filter, nat, mangle] Spcifie la table sur lequel on va travailler.Exemple : iptables -t filter -X

    Remarque :Ce paramtre " [table]" est optionnel. Si aucune table nest dfinie (i.e : il ny a pas de"[table]", "iptables" utilisera loption par dfaut "-t filter").[action]Ici, on va indiquer "iptables" ce que lon va faire :

    Paramtre Description

    -ZRinitialise les compteurs des paquets doctets passant par la table.Exemple : iptables -t mangle -Z

    -F [PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING]

    Suppression de toutes les rgles pr-dfines de lachane indique. Ou, si aucune chane pr-dfinienest indique, de toutes les rgles pr-dfines de latable.Exemple : iptables -t filter -F FORWARD

    -X [Chane utilisateur]Suppression de toutes les rgles de la chaneutilisateur indiqu. Ou, si aucune chane utilisateurnest indique, de toutes les chanes utilisateurs de latable.Exemple : iptables -t nat -X

    -L [Nom de table : filter, nat, mangle]Affiche la liste des chanes et rgles de la tablespcifie. Les paramtres "-n" et "-v" sont trs utilesavec ce paramtre.Exemple : iptables -t nat -L -n -v

    -N Nouvelle_chane_utilisateurCre une nouvelle chane utilisateur. Par la suite, desrgles peuvent tres ajoutes ces chanes, grceau paramtre "-A"Exemple : iptables

    -A Nom_chaneRajoute une nouvelle rgle la fin de la chane"Nom_chane". "Nom_chane" peut tre une chanepr-dfinie ou une chane utilisateur.Exemple : iptables -A INPUT -i lo -j ACCEPT

    -D PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTINGNumro_de_chane

    Supprime la chane indique par"Numro_de_chane".Exemple : iptables -D OUTPUT 5

    -P Nom_chane CibleDfinie "Cible" la cible par dfaut de la chane"Nom_chane".Exemple : iptables -t filter -P INPUT DROP

    [critres]Cette partie permet de dfinir sur quels critres du paquet IP la rgle va sappuyer, afin dedterminer si oui ou non le paquet rpond la rgle. On peut utiliser plusieurs critres en mmetemps, afin daffiner au mieux lapplication de la rgle.

    Paramtre Description

    -i Interface_rseau Indique linterface rseau par laquelle le paquet arrive.Exemple : iptables -A INPUT -i eth0 -j ACCEPT

    -o Interface_rseau Indique sur quelle interface rseau le paquet va sortir.Exemple : iptables -A OUTPUT -o eth0 -j DENY

    -s Adresse_ou_plage_IP Dfinie l adresse ou la plage dadresses IP dont sont issues le paquet.

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    6 of 14 20.04.2004 23:15

    Exemple : iptables -A INPUT -s 192.168.0.100 -j ACCEPT

    -d Adresse_ou_plage_IPDfinie l adresse ou la plage dadresses IP a qui sont destine le paquet.Exemple : iptables -A FORWARD -d 10.0.0.0/255.0.0.0 -j REJECT

    -p Protocole Prcise sur quel protocole la rgles sapplique.Exemple : iptables -A INPUT -p icmp -j DROP

    --sport Port(s)Sutilise avec le paramtre "-p". Cette option dfinie le port sourcedont est issus le paquet IP. Le paramtre "Port(s)" peut tre unchiffre ("80"), une suite de chiffres spars par des virgules("21,53,100") ou un nom de service ("ssh").Exemple : iptables -A INPUT -p tcp --sport 80 -j ACCEPT

    --dport Port(s)Sutilise avec le paramtre "-p". Cette option dfinie le port cible a qui est destin le paquet IP. Le paramtre "Port(s)" peut tre unchiffre ("80"), une suite de chiffres spars par des virgules("21,53,100") ou un nom de service ("ssh").Exemple : iptables -O OUTPUT -p tcp --dport 21,53,80 -j ACCEPT

    -m Nom_module

    Indique Netfilter quil faut utiliser le module "Nom_module" afin danalyser cette rgle. Un module tout particulirement intressantest le module "state", qui permet le suivi de connexion (conntrack).Exemple : iptables -A OUTPUT -p tcp -m state --state ! INVALID -j ACCEPT

    --state [!] NEW, ESTABLISHED, RELATED, INVALID

    Dans le cas de lutilisation du module "state", indique quel(s) statut la trame doit avoir afin dappliquer la rgle.Exemple : iptables -I INPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT

    [cible] Ce dernier paramtre est important, car il permet dindiquer Netfilter ce quil doit fairelorsque les critres de la rgle sappliquent au paquet IP.

    Paramtre Description

    -j ACCEPT, DROP, REJECT, LOG, ULOG, etc...

    Spcifie la cible lorsque la rgle sapplique.Exemple : iptables -A OUTPUT -o eth0 -j ACCEPT

    Illustration : Iptables

    II Filtrages de base

    Dans cette partie, nous verrons comment mettre en oeuvre des filtrages assez simples.

    II-1 Principes gnraux du filtrageLa technique de firewall la plus efficace se rsume en 3 phrases:

    Initialisation du firewall.Par dfaut, le firewall interdit toutes les connexions.On autorise uniquement les connexions strictement ncessaires. Cela signifie toutparticulirement que les rgles acceptant les paquets devront tre les plus "rigides" et limitativespossibles.

    Sous Linux, la configuration du firewall va consister lancer la commande "iptables" autant de fois quencessaire pour construire une une les diffrentes rgles dont nous aurons besoin. Voyonsmaintenant comment construire un tel script.

    Illustration : Principes gnraux de filtrage

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    7 of 14 20.04.2004 23:15

    Exercice : Les oprations faire ci-dessous sont ncessaires la bonne poursuite de latelier.

    Avec votre utilisateur normal, crer dans un rpertoire "/tmp/atelier_netfilter/". Par la suite, nous travaillerons exclusivement dans ce rpertoire .Tlcharger le script " restor_netfilter.sh", le sauver dans votre "/tmp/atelier_netfilter/".Donner les droits dexcution ce script : "chmod +x /tmp/atelier_netfilter/restor_netfilter.sh"Lancer un shell Linux (xterm, konsole, rxvt, etc...), passer en temps que root ("su -"), puis renter dans le "/tmp/atelier_netfilter/".

    A partir de maintenant, vous devrez lancer tous les scripts de configuration de Netfilter que nous allonscrer avec ce shell possdant les droits root. Attention de ne pas faire derreurs de manipulation !

    II-2 Initialisation des chanes

    La premire chose faire pour construite notre script de firewall sera dinitialiser le firewall. Comme lescript que nous allons crire ne sait priori pas dans quel tat se trouve Netfilter (si des rgles nont past dj dfinies par exemple), il nous faudra commencer par supprimer toutes les prcdentes rgles(pr-dfinies et utilisateur). Et ce, pour toutes les tables de Netfilter.

    Illustration : Initialisation des chanes

    Exercice : crire un script dinitialisation de Netfilter. On appellera ce script "initialisation1.sh"

    Solution : La solution est tlchargeable ici.

    Lordre dinitialisation des tables na pas dimportance ici.

    II-3 Cibles/politique de filtrage par dfautComme vu prcdemment , il est ncessaire de configurer Netfilter afin de tout interdire par dfaut.

    La logique voudrait donc que lon place "DROP" la cible par dfaut (ou politique par dfaut) de chaquechane. Et ce, quelque soit la table. Cependant, comme nous dsirons avant tout filtrer nos connexions, seul les cibles par dfaut de la table FILTER sont restreindre. Pour les tables NAT et MANGLE, il nestdonc pas ncessaire de mettre DROP les cibles par dfaut. Mme si cest techniquement faisable derestreindre les cibles par dfaut des autres tables, cela alourdit considrablement le script de firewall, etentrane une chute des performances rseau.

    Illustration : Cibles/politique de filtrage par dfaut

    Exercice : Re-crire le script dinitialisation vu ci-dessus, mais en rajoutant maintenant les politiques defiltrage par dfaut. On appellera ce script "initialisation2.sh".

    Amliorations : Penser optimiser au mieux la scurit, en plaant les restrictions dans lordre depriorit dcroissante.

    Solution : La solution est tlchargeable ici.

    A partir de maintenant, nous pourrons utiliser ce script comme base de travail pour nos autres scripts.

    II-4 Filtrage de portsO en sommes nous ? Nous avons actuellement verrouill notre Linux, en filtrant systmatiquement sescommunications rseaux.

    Illustration : Filtrage de ports 1/2

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    8 of 14 20.04.2004 23:15

    Exercice :

    Utiliser la commande "ping" afin de tester le comportement de votre machine avec votre interface virtuelle "localhost". Puis refaire le test avec votre propre adresse IP rseau (la commande"ifconfig eth0" vous donnera votre adresse IP). Et enfin, faites le test sur la machine duprsentateur.Rafrachir la prsente page HTML, en cliquant sur le bouton "Reload", combin ou non avec latouche "shift".Remarque : Si le curseur de votre souris se transforme en une petite horloge, cela est tout faitnormal. Cela indique que votre navigateur est bloqu par le firewall....Lancer le script "restor_netfilter.sh", et refaire les prcdents tests. Observer le rsultat.

    Bien, notre machine tant compltement verrouille, nous allons voir maintenant comment lui laisser un peu communiquer avec les autres machines mises en rseau.

    Illustration : Filtrage de ports 2/2

    Exercice :

    Faire une copie du script "initialisation2.sh" en "filter1.sh".crire des rgles de filtrage autorisant :

    Toutes les connexions, sans restriction aucune, avec linterface loopback ("lo").Toutes les commandes de ping entrants et sortants par linterface rseau "eth0". Rappel : La commande "ping" utilise le protocole "icmp".La machine accder au serveur HTTP du prsentateur. Le serveur HTTP tourne sur leport TCP/80.

    Vrifier la configuration de Netfilter :Vous devez pouvoir "pinger" votre propre machine : "ping localhost".Vous devez pouvoir "pinger" et recevoir les ping des autres machines du rseau :"ping adresse_ip_autre_machine".Vous ne devez pas pouvoir utiliser la commande"nmap adresse_ip_autre_machine -p 80". Astuce : Utilisez "iptables -L -n -v" afin dafficherles statistiques des paquets qui sont DROPs .Vous devez pouvoir rafrachir la prsente page HTML.

    Amliorations : Recopier le script "filter1.sh" en "filter1a.sh". Dans ce nouveau script, restreindre encore plus le firewall en rajoutant au filtrage du serveur HTTP du prsentateur, le filtrage par votre propre adresses IP.

    Solution : La solution est tlchargeable ici.

    La commande "iptables -L -n" vous donnera les informations relatives vos rgles de filtrages.Et la commande "iptables -L -n -v" vous donnera plus dinformations de statistiques. Pensez largir au maximum votre xterm pour afficher linformation de la manire la plus agrable etefficace possible.

    II-5 LogMaintenant nous allons travailler un peu avec les logs. Netfilter peut stocker ("logger" ou plus franais"noter") des informations sur ltat du firewall, via le dmon "syslogd". Ceci est particulirementintressant afin de rechercher une activit rseau suspecte (tentative dintrusion), ou de rechercher lacause dun mauvais fonctionnement du firewall

    Illustration : Log

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    9 of 14 20.04.2004 23:15

    Exercice :.

    Recopier le script "filter1.sh" en "log1.sh".Y rajouter le log des tables INPUT et OUTPUT sur linterface rseau eth0.

    Amliorations : Recopier le script "log1.sh" en "log1a.sh". Rajouter un prfixe afin de diffrencier leslogs entrants et sortants.

    Solution : La solution est tlchargeable ici.

    Lancer un xterm en pleine largeur dcran, avec si possible une police assez petite. Puis taper, entemps que root, la commande "tail -f /var/log/messages".

    Ou si possible (prsence du paquetage "rxvt" sur la machine), tlcharger rxvt_log depuis la machine du prsentateur et en temps que root, taper "rxvt_log messages".

    III Filtrages plus volues

    Dans cette partie, nous allons tudier les dfauts du filtrage part ports vu prcdemment . Puis, nous mettrons en pratiques des techniques de filtrages plus fines et plus efficaces.

    III-1 Insuffisances du filtrage par portsNous allons utiliser "nmap", le scanneur de ports, afin de montrer les lacunes du filtrage par port.

    Le paramtre "-g Numro_de_port " est tout particulirement intressant, car il permet dinitialiserdes connexions en prcisant le port source du scan.Le paramtre "-P0" permet nmap de lancer son scan "en aveugle", sans vrifier auparavant si lamachine cible est accessible.

    Illustration : Insuffisances du filtrage par ports

    Exercice :

    diter le script "filter1.sh" crit prcdemment ou la solution "filter1a.sh". Dans ce script, en retirer la protection par adresses IP (paramtres "-s" et "-d").Utiliser "nmap" en se faisant passer pour un serveur HTTP (paramtres "-g Numro_de_port " et "-P0"), afin lancer un port scanning sur une autre machine du rseau.Conclusions ?

    III-2 Suivi de connexion

    La technique du suivi de connexion ("conntrack") rend inefficace la prcdente astuce de port scanning.Elle permet aussi une scurit trs largement accrue, en restreignant au maximum les flux deconnexions.

    Le suivi de connexion se rsume par les points suivants :

    Le module "-m state", passer en paramtre "iptables".

    Les tats " --state Etat", passer en paramtre "iptables", aprs le "-m state". Les tatspossibles sont :

    INVALID : Le paquet nest associ avec aucune connexion connue.NEW : Le paquet est une nouvelle connexion.ESTABLISHED : Le paquet vient en rponse dune connexion prcdemment tablie par lamachine.RELATED : Le paquet est en relation avec une connexion prcdemment tablie par lamachine (exemple typique : les rponses depuis le port DATA dun serveur FTP).

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    10 of 14 20.04.2004 23:15

    Les modules kernels associs au suivi de connexion : ip_conntrack, ip_conntrack_ftp,ip_conntrack_proto_gre, ip_conntrack_h323, ip_conntrack_irc, ip_conntrack_pptp, etc...

    Illustration : Suivi de connexion

    Exercice : On reprend la philosophie du 1er exercice de filtrage, mais on va rendre notre firewall plus restrictif. Plus particulirement, on utilisera la technique du suivit de connexion vu ici.

    Faire une copie du script "initialisation2.sh" en "filter2.sh".crire des rgles de filtrage autorisant :

    Toutes les connexions, sans restriction aucune, avec linterface loopback ("lo").Toutes les commandes de ping sortants (et uniquement sortants) par linterface rseau"eth0".Rappel : La commande "ping" utilise le protocole "icmp".La machine accder au serveur HTTP de nimporte quelle autre machine. Ceux-citournent sur les ports TCP/80.

    Vrifier la configuration de Netfilter :Vous devez pouvoir "pinger" votre propre machine : "ping localhost".Vous devez pouvoir "pinger" la machine du prsentateur :"ping adresse_ip_prsentateur ".Les autres machines du rseau ne doivent pas pouvoir vous "pinger".Vous ne devez pas pouvoir utiliser la commande"nmap adresse_ip_autre_machine -g 80 -p 80 -P0" (les autres machines se protgent).Vous devez pouvoir rafrachir la prsente page HTML.Le prsentateur ne doit pas pouvoir accder votre machine ("ping" et HTTP).

    Amliorations : Recopier le script "filter2.sh" en "filter2a.sh". Dans ce nouveau script, rajouter les rglesncessaires afin que vous puissiez accder aux serveurs FTP (port 21) de nimporte quelle autremachine. Attention, il y a un gros pige...

    Solution : La solution est tlchargeable ici.

    III-3 ULogLes logs du firewall sont intressants (voir mme essentiels), mais il est dommage que lon ne puissepas les sparer des autres logs kernel. En effet, il arrive que le flots de logs de firewall soit trsimportants en volume, ce qui rend moins vident la lecture des autres logs du kernel (qui sont tout aussiimportant, si ce nest plus).ULOG est une solution trs intressante ce problme. Il se dcompose en :

    Un module du kernel (ipt_ULOG), grant la cible "-j ULOG" d"iptables", et charg de gnrer leslogs des connexions. Ce module est utilisable pour les kernels >= 2.4.18-pre8.Le dmon " ulogd", travaillant de manire similaire "syslogd", charg de rceptionner et destocker les logs de NetfilterDes modules "ulogd", permettant de stocker les logs sur diffrents types de supports :

    ulogd_LOGEMU : Sauve les logs dans fichier texte, la manire de ce que fait "syslogd".ulogd_OPRINT : Sauve le paquet intercept complet dans un fichier binaire.ulogd_MYSQL : Stock les logs dans une base de donnes MySQL.ulogd_PGSQL : Stock les logs dans une base de donnes PostgreSQL.

    Illustration : ULOG

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    11 of 14 20.04.2004 23:15

    Exercice : Mise en oeuvre de ULOG sur notre machine.

    Installer, configurer et dmarrer le dmon ULOG.Recopier le script "filter2.sh" en "log2.sh".Y rajouter le log des tables INPUT et OUTPUT sur linterface rseau eth0, en utilisant latechnique du ULOG.

    Amliorations : Recopier le script "log2.sh" en "log2a.sh". Rajouter un prfixe afin de diffrencier leslogs entrants et sortants.

    Solution : La solution est tlchargeable ici.

    Lancer un xterm en pleine largeur dcran, avec si possible une police assez petite. Puis taper, entemps que root, la commande "tail -f /var/log/ulogd.syslogemu".

    Ou si possible (prsence du paquetage "rxvt" sur la machine), tlcharger rxvt_log depuis la machine du prsentateur et en temps que root, taper "rxvt_log netfilter".

    III-4 Chanes utilisateurs

    Les chanes utilisateurs ont le mme rle que les chanes pr-dfines, savoir : Un conteneur rgles.Lintrt des chanes utilisateur nest pas vident aux premiers abords, mais au final, elles sont trsutiles.

    Illustration : Chanes utilisateurs 1/2

    Exercice : Mise en oeuvre dune simple chane utilisateur.

    Faire une copie du script "filter1.sh" en "userchaine1.sh".Passer toutes les politiques par dfaut ACCEPT.Simplifier les rgles en supprimant les critres "-s" et "-d" (filtrage par adresses IP).Crer une chane utilisateur du nom de "LogDrop".Utiliser cette chane pour enregistrer et supprimer toutes les trames ne correspondant aucuneautres rgles de filtrage.

    Solution : La solution est tlchargeable ici.

    Le petit exercice prcdent nest pas trs spectaculaire. Mais il est ncessaire afin de bien comprendrelexercice suivant, qui sera bien plus intressant.

    Dans ce qui va suivre, nous allons considrer que nous voulons avoir des liens privilgis avec :

    "MACHINE 0", la machine du prsentateur."MACHINE 1" et "MACHINE 2", 2 machines de notre rseau local.

    Nous ne dsirons communiquer quavec ces trois machines, toutes les paquets IP a destination oupartant vers les autres machines devront tre dtruits.

    Illustration : Chanes utilisateurs 2/2

    Exercice : Tlcharger ce script utilisant la mthode classique de filtrage. A partir de ce script, il faudra:

    En faire une copie en "userchaine2b.sh".Modifier ce script afin de loptimiser en utilisant la technique des chanes utilisateurs. Indication :On peut considrer les "MACHINES 1 2 et 3" comme tant 3 interfaces rseaux diffrentes,mais sur lesquelles doivent tre effectuer les mmes contrles.

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    12 of 14 20.04.2004 23:15

    Solution : La solution est tlchargeable ici.

    La solution est elle optimum ?Que faut il faire si lon veut interdire les connexions notre serveur HTTP ? La nouvelle solutionest elle optimum ce moment l ?

    III-5 Contraintes de ltat NEWLe problme de ltat NEW du suivi de connexion vient dans son mode de dtection de ce quilconsidre comme tant une nouvelle connexion . Contrairement ce que lon peut penser, il ne se basetout simplement pas sur une handshake, ce qui peut lamener laisser des paquets se faisant passerpour une nouvelle connexion.

    Illustration : Contraintes de ltat NEW 1/2

    Si on ne veut pas utiliser ltat NEW, la technique de filtrage (pour des connexions inities par notremachine) utiliser peut tre ceci :

    Interdiction des paquets non valide ("-state INVALID").Autorise les paquets (sortants ou entrants) de connexion dj existantes ("--stateESTABLISHED,RELATED").Autorise les paquets sortants que nous avons initis. Cest dire, ceux utilisant le flag SYN("--syn").

    Illustration : Contraintes de ltat NEW 2/2

    Exercice :

    Faire une copie du script "initialisation2.sh" en "nonew1.sh".crire des rgles de filtrage autorisant :

    Toutes les connexions, sans restriction aucune, avec linterface loopback ("lo").Les connexions "ping", HTTP et FTP vers lextrieur ("eth0"), initis par notre machine.Les paquets en retour de ces connexions doivent aussi tre autoris. On utilisera latechnique vu ci-dessus.Log tout le reste.

    Solution : La solution est tlchargeable ici.

    Ce script peut vous servir dexemple pour votre propre firewall. On notera quil utilise un nombre dergles minimales. Et que nous contrlons parfaitement les protocoles que nous voulons laisser sortir.

    IV Firewall et serveurs

    Mettre en place un dmon (logiciel de type "serveur") nest pas en soit trs compliqu. Mais le configurerde telle manire ce quil ne soit pas pirat nest pas ais. Le firewall peut assurer une partie de sascurit , mais la plus grande partie sera la responsabilit du dmon lui mme , comme par exemple "Apache" dans le cas dun serveur HTTP.

    Un firewall ne peut pas assurer lui seul la scurit dun dmon / serveur publique ! Laconfiguration du dmon est llment le plus important !

    IV-1 Serveur HTTP

    Nous nallons pas nous intresser ici la configuration du dmon HTTP lui-mme. Cela ferait lobjetdun atelier complet... Mais seulement de ce que peut faire Netfilter afin de protger un tel dmon.

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    13 of 14 20.04.2004 23:15

    Illustration : Serveur HTTP (web)

    Exercice :

    Faire une copie du script "nonew1.sh" en "serveur1.sh".crire des rgles de filtrage autorisant :

    Les mmes flux que pour lexercice prcdent .Les autres machines du rseau se connecter notre serveur HTTP.

    Amliorations : Recopier le script "serveur1.sh" en "serveur1a.sh". Dans ce nouveau script, autoriser les autres machines du rseau "pinger" notre machine, mais en limitant ce flux 1 ping/s (module"limit").

    Solution : La solution est tlchargeable ici.

    IV-2 Serveur FTP

    Maintenant nous allons voir comment transcrire le travail prcdent afin de protger un serveur FTP.

    Illustration : Serveur FTP (fichier)

    Exercice :

    Faire une copie du script "serveur1.sh" en "serveur2.sh".Changer les rgles du serveur HTTP et les adapter un serveur FTP

    Solution : La solution est tlchargeable ici.

    couter les explications sur lintrt du module "ip_conntrack_ftp".

    Conclusion

    Dans cet atelier, nous avons abord les principales techniques de Netfilter en terme de filtrage.Cependant, cet atelier ne peut rsumer quune partie seulement des fonctionnalits de Netfilter. Aussi,vous tes encourag fouiller la documentation que jai prcdemment rdig , les guides officiels de netfilter, le "man iptables", et bien videment Google ou tout autre moteur de recherche, afin dapprofondir ce sujet.Si vous devez retenir quune seul chose de cet atelier, cest le principe gnral du filtrage : Initialisation du firewall / tout interdire par dfaut / autoriser le strict minimum.

    Jespre que cet atelier vous a intress, et que vous pourrez utiliser les notions abordes afin deconfigurer efficacement votre propre firewall Linux.

    Si vous avez des remarques faire sur cet atelier, des corrections proposer ou des points claircir,nhsitez pas me contacter ( [email protected]).

    Remerciements

    Je remercie le CUEFA (Grenoble, Isre / 38) et en particulire Romain KOBYLANSKI pour nous avoirfournit la salle et le matriel de cet atelier. Merci aussi lassociation Guilde pour lorganisation de latelier , et notamment (par ordre alphabtique) Edgar BONET, Christophe FIXOT et Jrme KIEFFER.

    License

    Ce document peut tre librement lu, stock, reproduit, diffus, traduit et cit par tous moyens et sur tous

  • Atelier Netfilter : Le firewall Linux en action http://olivieraj.free.fr/

    14 of 14 20.04.2004 23:15

    supports aux conditions suivantes:

    tout lecteur ou utilisateur de ce document reconnat avoir pris connaissance de ce quaucunegarantie nest donne quant son contenu, tout point de vue, notamment vracit, prcision etadquation pour toute utilisation;il nest procd aucune modification autre que cosmtique, changement de format dereprsentation, traduction, correction dune erreur de syntaxe vidente, ou en accord avec lesclauses ci-dessous;des commentaires ou additions peuvent tres insrs condition dapparatre clairement commetels; les traductions ou fragments doivent faire clairement rfrence une copie originalecomplte, si possible une copie facilement accessible;les traductions et les commentaires ou ajouts insrs doivent tre dats et leur(s) auteur(s)doi(ven)t tre identifiable(s) (ventuellement au travers dun alias);cette licence est prserve et sapplique lensemble du document et des modifications et ajoutsventuels (sauf en cas de citation courte), quelquen soit le format de reprsentation;quel que soit le mode de stockage, reproduction ou diffusion, toute personne ayant accs uneversion numrise ce document doit pouvoir en faire une copie numrise dans un formatdirectement utilisable et si possible ditable, suivant les standards publics, et publiquementdocuments, en usage;la transmission de ce document un tiers se fait avec transmission de cette licence, sansmodification, et en particulier sans addition de clause ou contrainte nouvelle, explicite ou implicite,lie ou non cette transmission. En particulier, en cas dinclusion dans une base de donnes ouune collection, le propritaire ou lexploitant de la base ou de la collection sinterdit tout droit deregard li ce stockage et concernant lutilisation qui pourrait tre faite du document aprsextraction de la base ou de la collection, seul ou en relation avec dautres documents.

    Toute incompatibilit des clauses ci-dessus avec des dispositions ou contraintes lgales, contractuellesou judiciaires implique une limitation correspondante du droit de lecture, utilisation ou redistribution verbatim ou modifie du document.

    Olivier Allard-Jacquin

    Site de rfrence : http://olivieraj.free.fr/ Last modified: Tue Apr 20 23:08:00 CEST 2004