Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:reseau:iptables-pare-feu-pour-un-client [08/10/2014 19:20] Hypathie créée |
doc:reseau:iptables-pare-feu-pour-un-client [06/11/2014 07:40] Hypathie [Pare-feu pour une station (client)] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== ipatbles: un pare-feu pour un client ====== | + | ====== iptables: un pare-feu pour un client ====== |
* Objet : Qu'est-ce qu'un pare-feu ? Comment le configurer ? | * Objet : Qu'est-ce qu'un pare-feu ? Comment le configurer ? | ||
Ligne 6: | Ligne 6: | ||
* Suivi : {{à-placer}} | * Suivi : {{à-placer}} | ||
* Création par [[user>Hypathie]] 08/10/2014 | * Création par [[user>Hypathie]] 08/10/2014 | ||
- | * Testé par <...> le <...> FIXME | + | * Testé par <...> le <...> |
- | * Commentaires sur le forum : [[:url-invalide | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | + | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=99071#p99071| Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
- | **Nota :** | ||
===== Introduction ===== | ===== Introduction ===== | ||
**Iptables** est un logiciel libre grâce auquel l’administrateur système peut configurer les chaînes et règles du pare-feu en espace noyau. | **Iptables** est un logiciel libre grâce auquel l’administrateur système peut configurer les chaînes et règles du pare-feu en espace noyau. | ||
- | **Netfilter** est un framework implémentant le pare-feu au sein du noyau Linux. | + | **Netfilter** est un framework implémentant le pare-feu au sein du noyau Linux.\\ |
+ | Voir [[http://www.netfilter.org/|le site de netfilter]] | ||
Un pare-feu rejette les paquets du réseau selon des règles stockées dans la mémoire du PC.\\ Linux iptables travaille avec des «chaînes». Ces chaînes sont des regroupements de règles qui régissent le trafic réseau en fonction de trois axes : les paquets ; les protocoles ; les ports. | Un pare-feu rejette les paquets du réseau selon des règles stockées dans la mémoire du PC.\\ Linux iptables travaille avec des «chaînes». Ces chaînes sont des regroupements de règles qui régissent le trafic réseau en fonction de trois axes : les paquets ; les protocoles ; les ports. | ||
Ligne 28: | Ligne 29: | ||
===Un paquet ou un datagramme=== | ===Un paquet ou un datagramme=== | ||
- | est une représentation d'un phénomène physique. Il forme une unité de confinement où les données peuvent être examinés, acheminés et filtrés en ce qui concerne sa destination, son origine et son contenu.\\ | + | est une représentation d'un phénomène physique. Il forme une unité de confinement où les données peuvent être examinées, acheminées et filtrées en pour qui concerne leur destination, leur origine et leur contenu.\\ |
Le schéma suivant représente un paquet de datagramme sur un réseau.\\ | Le schéma suivant représente un paquet de datagramme sur un réseau.\\ | ||
Voir [[http://fr.wikibooks.org/wiki/R%C3%A9seaux_TCP/IP/La_pile_TCP/IP#Le_datagramme_IP_.28version_4.29|le schéma d'un datagramme]].\\ | Voir [[http://fr.wikibooks.org/wiki/R%C3%A9seaux_TCP/IP/La_pile_TCP/IP#Le_datagramme_IP_.28version_4.29|le schéma d'un datagramme]].\\ | ||
- | Un datagramme n'est pas un paquet réel, mais il représente visuellement le flux d'électrons ou de photons qui transmettent des données physiques sur un réseau. À nos yeux "nus", nous ne parlons que de variations de l'amplitude et de la fréquence tel que ce qui serait visible sur un oscilloscope.\\ | + | Un datagramme n'est pas un paquet réel, mais il représente visuellement le flux d'électrons ou de photons qui transmettent des données physiques sur un réseau. À nos yeux "nus", nous ne voyons que des variations de l'amplitude et de la fréquence tel que ce qui serait visible sur un oscilloscope.\\ |
- | Tous ces services s'appuient sur des données de terrain transmises à chaque paquet. Le flux de données, appelés «trafic», est régi par des protocoles standards qui s'appuie sur des «ports» spécifiques. Chaque port est représenté par l'ouverture ou la fermeture de ces ports ; l'ouverture correspond à accepter, et la fermeture correspond à rejeter les paquets dont le champ de données correspond ce port.\\ | + | Tous les services listés ci-dessous s'appuient sur des données de terrain transmises à chaque paquet. Le flux de données, appelé «trafic», est régi par des protocoles standards qui s'appuient sur des «ports» spécifiques. Chaque port peut être représenté comme ouvert ou fermé ; l'ouverture correspond à accepter un déplacement de flux (ou paquets), et la fermeture correspond à rejeter ce flux dont le champ de données correspond à ce port.\\ |
===Ports TCP/UDP et Protocole couramment utilisés=== | ===Ports TCP/UDP et Protocole couramment utilisés=== | ||
- | Comme un pare-feu classique, iptables contrôle les ports sur une interface réseau dans lequel les paquets peuvent entrer, passer à travers ou sortir.\\ | + | Comme un pare-feu classique, iptables contrôle les ports sur une interface réseau par laquelle les paquets peuvent entrer, transiter, sortir, être rejetés.\\ |
- | Les ports peuvent s'ouvrir ou se fermer pour chaque service.\\ | + | |
- | Ce reporter à la documentation interne (lien en vert) pour la mise en place de ces services.\\ | + | Ce reporter à la documentation interne (lien en vert) pour la mise en place des services listés ci-dessous.\\ |
- | Vous y trouverez : leur installation et configuration. Et à ce sujet, comment les ports par défaut associé à tel ou tel service, peuvent être manuellement configurés. | + | Vous y trouverez : leur installation et leur configuration, tel que la modification du port par défaut pour certains de ces protocoles.\\ |
+ | |||
+ | Et à ce sujet, dans la suite de ce wiki, je considérerai qu'ils n'ont pas été modifiés. | ||
**[[doc:reseau:ftp|FTP]]** = TCP 21/20\\ | **[[doc:reseau:ftp|FTP]]** = TCP 21/20\\ | ||
Ligne 63: | Ligne 65: | ||
Un conseil ne pas mettre en place un pare-feu tout fait sans comprendre ce qu'on fait.\\ | Un conseil ne pas mettre en place un pare-feu tout fait sans comprendre ce qu'on fait.\\ | ||
- | L'idéal est d'avoir des bases sur les réseaux.\\ | + | L'idéal est d'avoir quelques bases sur les réseaux.\\ |
- | Voici quelques liens indispensables pour aborder ces bases :\\ | + | Voici quelques liens indispensables pour acquérir quelques connaissances fondamentales :\\ |
* [[http://www.inetdoc.net/guides/iptables-tutorial/tcpiprepetition.html|TCP/IP]] | * [[http://www.inetdoc.net/guides/iptables-tutorial/tcpiprepetition.html|TCP/IP]] | ||
Ligne 73: | Ligne 75: | ||
* sur SCTP : les [[http://www.inetdoc.net/guides/iptables-tutorial/sctpcharacteristics.html|Caractéristiques SCTP]] et les [[http://www.inetdoc.net/guides/iptables-tutorial/sctpheaders.html|En-têtes SCTP]] | * sur SCTP : les [[http://www.inetdoc.net/guides/iptables-tutorial/sctpcharacteristics.html|Caractéristiques SCTP]] et les [[http://www.inetdoc.net/guides/iptables-tutorial/sctpheaders.html|En-têtes SCTP]] | ||
- | Pour ce qui concerne le routage, l'aborder lors de la mise en place d'un pare-feu pour une machine faisant office de routeur. | + | Au sujet de la configuration réseau, commandes, fichiers de configuration pour GNU/linux:\\ [[http://www.linux-france.org/prj/edu/archinet/systeme/ch03.html]] |
+ | |||
+ | Enfin pour lister les protocoles connus du système : | ||
+ | <code user> cat /etc/protocols</code> | ||
+ | |||
+ | Pour ce qui concerne le routage (table NAT), nous l'aborderons lors de la mise en place d'un pare-feu pour une machine faisant office de routeur, dans le wiki suivant. | ||
=====Fonctionnement d'iptables===== | =====Fonctionnement d'iptables===== | ||
Pour apprendre à utiliser iptables et acquérir les différentes notions mises en œuvre lors de son utilisation, nous allons partir de l'exemple.\\ | Pour apprendre à utiliser iptables et acquérir les différentes notions mises en œuvre lors de son utilisation, nous allons partir de l'exemple.\\ | ||
Ligne 81: | Ligne 88: | ||
Une **table** permet de définir le plan de "travail". En effet, iptables ne sert pas uniquement à bloquer certains paquets et n'est pas uniquement utiliser pour dresser un pare-feu. On peut par exemple s'en servir modifier un paquet (table MANGLE), ou pour faire de la redirection de paquet (table NAT). | Une **table** permet de définir le plan de "travail". En effet, iptables ne sert pas uniquement à bloquer certains paquets et n'est pas uniquement utiliser pour dresser un pare-feu. On peut par exemple s'en servir modifier un paquet (table MANGLE), ou pour faire de la redirection de paquet (table NAT). | ||
- | Mais c'est la table filter permet d'utiliser iptables en tant que pare-feu. Avec cette table, on va indiquer à iptables un ensemble de règles dans un ordre précis afin qu'il sache s'il doit interdire ou autoriser le passage des paquets. \\ | + | Mais c'est la table filter qui permet d'utiliser iptables en tant que pare-feu et qui nous intéresse ici.\\ Avec cette table, on va indiquer à iptables un ensemble de règles dans un ordre précis afin qu'il sache s'il doit interdire ou autoriser le passage des paquets. \\ |
Dresser la table filter consistera à indiquer précisément à iptables pour quels paquets, pour quels ports ou protocoles, pour quelle direction... il y a autorisation ou interdiction de passage. | Dresser la table filter consistera à indiquer précisément à iptables pour quels paquets, pour quels ports ou protocoles, pour quelle direction... il y a autorisation ou interdiction de passage. | ||
Ligne 103: | Ligne 110: | ||
> **La première ligne ''Chain INPUT (policy ACCEPT)''** concerne les paquets entrants **''INPUT''**.\\ On voit que tout passe dans toutes les directions **''policy ACCEPT''**. | > **La première ligne ''Chain INPUT (policy ACCEPT)''** concerne les paquets entrants **''INPUT''**.\\ On voit que tout passe dans toutes les directions **''policy ACCEPT''**. | ||
- | > **En dessous ''target prot opt source destination''** ce sont les titres qui permettent de ranger dans un tableau bien lisible ce qui est mis en place : | + | > **En dessous ''target prot opt source destination''** ce sont les titres qui permettent de ranger le retour de la commande de listage dans un tableau bien lisible. Pratique pour lire plus facilement ce qui est mis en place : |
>> | >> | ||
>> **''target''** : c'est l'action à prendre, quand des règles seront mises en place, on trouvera dans cette colonne plusieurs lignes dont chacune aura l'une de ces valeurs :\\ **''ACCEPT''** (autoriser) ou **''DROP''** (interdire) ou **''REJECT''** (interdire en envoyant un signal d'interdiction). | >> **''target''** : c'est l'action à prendre, quand des règles seront mises en place, on trouvera dans cette colonne plusieurs lignes dont chacune aura l'une de ces valeurs :\\ **''ACCEPT''** (autoriser) ou **''DROP''** (interdire) ou **''REJECT''** (interdire en envoyant un signal d'interdiction). | ||
Ligne 174: | Ligne 181: | ||
<note> | <note> | ||
- | -F : (flush) : vider toutes les tables existantes\\ | + | -F : (flush) : vider toutes les chaînes existantes\\ |
- | -X : supprimer les règles personnelles | + | -X : supprimer les chaînes personnelles |
</note> | </note> | ||
Ligne 189: | Ligne 196: | ||
* Suivons le principe énoncé plus haut : on commence par tout interdire. | * Suivons le principe énoncé plus haut : on commence par tout interdire. | ||
- | Pour les entrées ; ce qui passe ; ce qui sort : | ||
<code root> | <code root> | ||
iptables -P INPUT DROP | iptables -P INPUT DROP | ||
Ligne 462: | Ligne 468: | ||
* Pour vérifier ses logs : | * Pour vérifier ses logs : | ||
- | On se connecte en ssh du client sur lequel on a installé le pare-feu vers un client de notre réseau; puis dans l'autre sens d'un client du réseau vers le client "pare-feuté" qui est aussi server ssh. | + | On se connecte en ssh du client sur lequel on a installé le pare-feu vers un client de notre réseau; puis dans l'autre sens d'un client du réseau vers le client "pare-feuté" qui est aussi serveur ssh. |
<code user>less /var/log/messages | grep OUTGOING_SSH</code> | <code user>less /var/log/messages | grep OUTGOING_SSH</code> | ||
Ligne 497: | Ligne 503: | ||
<code root>iptables-restore < /etc/iptables</code> | <code root>iptables-restore < /etc/iptables</code> | ||
- | Bon il ne faut pas oublier de mettre son pare-feu à chaque redémarrage !\\ | + | Bon il ne faut pas oublier de charger son pare-feu à chaque redémarrage !\\ |
Évitons ce risque et surtout de nous fatiguer...\\ | Évitons ce risque et surtout de nous fatiguer...\\ | ||
Ligne 524: | Ligne 530: | ||
(Pour tester n'oubliez pas de commenter, mettre un ''#'' devant la ligne\\ ''pre-up iptables-restore < /etc/iptables'' du fichier /etc/network/interfaces ajoutée lors de la méthode précédente.) | (Pour tester n'oubliez pas de commenter, mettre un ''#'' devant la ligne\\ ''pre-up iptables-restore < /etc/iptables'' du fichier /etc/network/interfaces ajoutée lors de la méthode précédente.) | ||
- | <code text firewall-client.sh> | + | <code bash firewall-client.sh> |
#!/bin/sh | #!/bin/sh | ||
### BEGIN INIT INFO | ### BEGIN INIT INFO | ||
Ligne 564: | Ligne 570: | ||
/sbin/iptables -t filter -A OUTPUT -p udp -m udp --dport 53 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT | /sbin/iptables -t filter -A OUTPUT -p udp -m udp --dport 53 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT | ||
/sbin/iptables -t filter -A INPUT -p udp -m udp --sport 53 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | /sbin/iptables -t filter -A INPUT -p udp -m udp --sport 53 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | ||
- | #Allow trafic on internal network | + | #Allow trafic on internal network |
- | /sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT | + | |
/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT | /sbin/iptables -t filter -A INPUT -i lo -j ACCEPT | ||
+ | /sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT | ||
#Allow ping to internal network | #Allow ping to internal network | ||
/sbin/iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | ||
Ligne 577: | Ligne 583: | ||
/sbin/iptables -I INPUT -p tcp --dport 22 -j OutGoingSSH | /sbin/iptables -I INPUT -p tcp --dport 22 -j OutGoingSSH | ||
/sbin/iptables -A OutGoingSSH -j LOG --log-prefix '[OUTGOING_SSH] : ' | /sbin/iptables -A OutGoingSSH -j LOG --log-prefix '[OUTGOING_SSH] : ' | ||
- | #Set up a user chain forr ssh incoming | + | #Set up a user chain for ssh incoming |
/sbin/iptables -t filter -N InComingSSH | /sbin/iptables -t filter -N InComingSSH | ||
/sbin/iptables -I OUTPUT -p tcp --sport 22 -j InComingSSH | /sbin/iptables -I OUTPUT -p tcp --sport 22 -j InComingSSH | ||
Ligne 645: | Ligne 651: | ||
Et voilà c'est déjà fini ;-) | Et voilà c'est déjà fini ;-) | ||
- | **Prochain n° sur iptables : "un pare-feu pour une passerelle-routeur Debian".** | + | **Prochain n° sur iptables : "[[atelier:chantier:iptables-un-pare-feu-pour-une-passerelle?&|un pare-feu pour une passerelle Debian]]".** |
=====Récapitulatif des commandes et options ===== | =====Récapitulatif des commandes et options ===== |