logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
doc:reseau:iptables-pare-feu-pour-un-client [16/10/2014 05:43]
Hypathie [Introduction]
doc:reseau:iptables-pare-feu-pour-un-client [06/11/2014 17:59]
Hypathie [Pare-feu pour une station (client)]
Ligne 13: Ligne 13:
 **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 195: 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 219: Ligne 219:
 <code root> <code root>
 iptables -t filter -A OUTPUT -p udp -m udp\ iptables -t filter -A OUTPUT -p udp -m udp\
- ​--dport 53 -m conntrack --ctstate RELATED,​ESTABLISHED -j ACCEPT+ ​--dport 53 -m conntrack --ctstate ​NEW,RELATED,​ESTABLISHED -j ACCEPT
  
 iptables -t filter -A INPUT -p udp -m udp\ iptables -t filter -A INPUT -p udp -m udp\
Ligne 281: Ligne 281:
  
 <​note>​ <​note>​
-Commande précédente, ou on peut aussi faire :+Commandes précédentes, ou celles-ci plus précises que l'on préférera ​:
 <code root> <code root>
-iptables -A OUTPUT -p icmp -m conntrack\+iptables -A OUTPUT ​-o eth0 -p icmp -m conntrack\
  ​--ctstate NEW,​ESTABLISHED,​RELATED -j ACCEPT  ​--ctstate NEW,​ESTABLISHED,​RELATED -j ACCEPT
  
-iptables -A INPUT -p icmp -m conntrack\+iptables -A INPUT -i eth0 -p icmp -m conntrack\
  ​--ctstate NEW,​ESTABLISHED,​RELATED -j ACCEPT  ​--ctstate NEW,​ESTABLISHED,​RELATED -j ACCEPT
 </​code>​ </​code>​
Ligne 301: Ligne 301:
  ​RELATED,​ESTABLISHED -j ACCEPT  ​RELATED,​ESTABLISHED -j ACCEPT
 </​code>​ </​code>​
 +
 +===Pour installer une imprimante partagée ===
 +  * Si l'on veut brancher son imprimante sur la machine d'IP 192.168.0.22 faisant alors office de serveur d'​impression pour le réseau local 192.168.0.0/​24 :
 +
 +<code root>​iptables -A INPUT -i eth0 -s 192.168.0.0/​24 -d 192.168.0.22 -p tcp\
 + ​--dport 631 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT
 +
 +iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.0.0/​24 -p tcp\
 + ​--sport 631 -m state ! --state INVALID -j ACCEPT</​code>​
 +
 +<​note>​Remarque sur la place du point d'​exclamation,​ qui ne se place pas devant ''​INVALID''​ comme on le voit souvent !</​note>​
 +
 +<note tip>**Si l'on veut que cette imprimante soit partagée aussi par un autre réseau, par exemple 192.168.1.0/​24 on ajoutera ceci au pare-feu du client :**
 +
 +<code root>​iptables -A INPUT -i eth0 -s 192.168.1.0/​24 -d 192.168.0.22 -p tcp\
 + ​--dport 631 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT
 +
 +iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.1.0/​24 -p tcp\
 + ​--sport 631 -m state ! --state INVALID -j ACCEPT</​code>​
 +
 +**Dans ce cas au niveau de la passerelle** :
 +Si elle dotée d'un pare-feu, il faudra que **son** pare-feu permette le trafic pour le port 631, c'​est-à-dire accepter sur eth0 (réseau 192.168.0.0/​24) les entrées et les sorties tcp sur le port 631.\\ ​
 +
 +Par exemple :
 +
 +  iptables -A INPUT -i eth0 -s 192.168.0.22 -d 192.168.0.1 -p tcp --sport 631 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT
 +  iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.22 -p tcp --dport 631 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT
 +
 +
 +Voir : [[atelier:​chantier:​iptables-un-pare-feu-pour-une-passerelle?&#​le-script-de-la-passerelle|Script d'une passerelle]]
 +</​note> ​
  
 ====Vérifier et faire des tests==== ====Vérifier et faire des tests====
Ligne 498: Ligne 529:
  
   * Pour sauvegarder toutes les règles :   * Pour sauvegarder toutes les règles :
-<code root>​iptables-save > /etc/iptables</​code>​+<code root>​iptables-save > /etc/firewall-client</​code>​
  
   * Pour les charger après le redémarrage :   * Pour les charger après le redémarrage :
-<code root>​iptables-restore < /etc/iptables</​code>​+<code root>​iptables-restore < /etc/firewall-client</​code>​
  
 Bon il ne faut pas oublier de charger son pare-feu à chaque redémarrage !\\  Bon il ne faut pas oublier de charger son pare-feu à chaque redémarrage !\\ 
Ligne 516: Ligne 547:
 <​code>​ <​code>​
 # The loopback network interface # The loopback network interface
-pre-up iptables-restore < /​etc/​iptables 
 auto lo auto lo
 iface lo inet loopback iface lo inet loopback
 +post-up iptables-restore < /​etc/​firewall-client
 </​code>​ </​code>​
  
-Donc le jour où on installera une carte wifi sur son vieil ordi fixe, on se teste d'​abord quelques nouvelles règles iptables, puis quand elles sont tip-top, on les sauvegarde ​ en crant un ''​iptables-save > /​etc/​iptables-wifi''​.\\ ​+Donc le jour où on installera une carte wifi sur son vieil ordi fixe, on se teste d'​abord quelques nouvelles règles iptables, puis quand elles sont tip-top, on les sauvegarde ​ en créant ​un ''​iptables-save > /​etc/​iptables-wifi''​.\\ ​
  
-On ne restera plus qu'à ajouter ''​pre-up iptables-restore < /​etc/​iptables-wifi''​ avant la configuration de l'​interface wlan dans /​etc/​network/​interfaces sans avoir toucher ​ce qui fonctionnait déjà...+On ne restera plus qu'à ajouter ''​pre-up iptables-restore < /​etc/​iptables-wifi''​ avant la configuration de l'​interface wlan dans /​etc/​network/​interfaces sans avoir à modifier ​ce qui fonctionnait déjà...
  
 ===Pour les fadas du "​scripting"​ shell=== ===Pour les fadas du "​scripting"​ shell===
  
 **C'​est soit la méthode précédente,​ soit celle-ci !**\\  **C'​est soit la méthode précédente,​ soit celle-ci !**\\ 
-(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/firewall-client''​ du fichier /​etc/​network/​interfaces ajoutée lors de la méthode précédente.)
  
 <code bash firewall-client.sh>​ <code bash firewall-client.sh>​
Ligne 550: Ligne 581:
 case "​$1"​ in case "​$1"​ in
 '​start'​) '​start'​)
-/​sbin/​iptables-restore < /etc/config_parefeu+/​sbin/​iptables-restore < /etc/firewall-client
 RETVAL=$? RETVAL=$?
 ;; ;;
 '​stop'​) '​stop'​)
-/​sbin/​iptables-save > /etc/config_parefeu+/​sbin/​iptables-save > /etc/firewall-client
 RETVAL=$? RETVAL=$?
 ;; ;;
Ligne 574: Ligne 605:
 /​sbin/​iptables -t filter -A OUTPUT -o 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 ​-o eth0 -p icmp -m conntrack --ctstate NEW,​ESTABLISHED,​RELATED -j ACCEPT 
-/​sbin/​iptables -A INPUT -p icmp -m conntrack --ctstate ESTABLISHED,​RELATED -j ACCEPT+/​sbin/​iptables -A INPUT -i eth0 -p icmp -m conntrack --ctstate ​NEW,ESTABLISHED,​RELATED -j ACCEPT
 #Get web #Get web
 /​sbin/​iptables -t filter -A OUTPUT -p tcp -m multiport --dports 80,443,8000 -m conntrack --ctstate NEW,​RELATED,​ESTABLISHED -j ACCEPT /​sbin/​iptables -t filter -A OUTPUT -p tcp -m multiport --dports 80,443,8000 -m conntrack --ctstate NEW,​RELATED,​ESTABLISHED -j ACCEPT
 /​sbin/​iptables -t filter -A INPUT -p tcp -m multiport --sports 80,443,8000 -m conntrack --ctstate RELATED,​ESTABLISHED -j ACCEPT /​sbin/​iptables -t filter -A INPUT -p tcp -m multiport --sports 80,443,8000 -m conntrack --ctstate RELATED,​ESTABLISHED -j ACCEPT
 +#Allow cups
 +iptables -A INPUT -i eth0 -s 192.168.0.0/​24 -d 192.168.0.22 -p tcp --dport 631 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT
 + 
 +iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.0.0/​24 -p tcp --sport 631 -m state ! --state INVALID -j ACCEPT
 +#Allow cups from sub-net
 +/​sbin/​iptables -A INPUT -i eth0 -s 192.168.1.0/​24 -d 192.168.0.22 -p tcp --dport 631 -m state --state NEW,​RELATED,​ESTABLISHED -j ACCEPT
 +/​sbin/​iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.1.0/​24 -p tcp --sport 631 -m state ! --state INVALID -j ACCEPT
 #Set up a user chain for ssh outgoing ​ #Set up a user chain for ssh outgoing ​
 /​sbin/​iptables -t filter -N OutGoingSSH /​sbin/​iptables -t filter -N OutGoingSSH
Ligne 653: Ligne 691:
 **Prochain n° sur iptables : "​[[atelier:​chantier:​iptables-un-pare-feu-pour-une-passerelle?&​|un pare-feu pour une passerelle 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écapitulatifcommandesoptions, syntaxe ​===== 
 +====Les commandes====
  
 ^ commandes ^ descriptions ^ ^ commandes ^ descriptions ^
Ligne 669: Ligne 708:
 | -Z <​nowiki>​[chain]</​nowiki>​ | remise à zéro des compteurs dans la chaîne chain si elle est indiquée | | -Z <​nowiki>​[chain]</​nowiki>​ | remise à zéro des compteurs dans la chaîne chain si elle est indiquée |
  
 +====Les options====
 ^options^descriptions^ ^options^descriptions^
 |-p [!] protocle|où protocole est : TCP, UDP, ICMP, ALL| |-p [!] protocle|où protocole est : TCP, UDP, ICMP, ALL|
Ligne 686: Ligne 725:
 [[http://​olivieraj.free.fr/​fr/​linux/​information/​firewall/​fw-03-05.html]] [[http://​olivieraj.free.fr/​fr/​linux/​information/​firewall/​fw-03-05.html]]
  
 +====La syntaxe générale ====
 +===Commande iptables basique===
 +  * Ouvrir une connexion vers sa machine ​
 +
 +  iptables -A INPUT -i <​interface_d'​entrée>​ -p <​nom_du_protocole>​ --dport <​nom_du_port_de_destination>​ -j ACCEPT
 +
 +> Où <​nom_du_protocole>​ est à remplacer par TCP, UDP, all ;
 +> une règle pour chaque protocole
 +> et <​nom_du_port>​ est le **nom du service**, tels FTP, DNS ... **ou le numéro** qui leur correspond tels 21, 53...
 +
 +===Règles plus précise ===
 +
 +  * Sur l'​entrée :
 +
 +  iptables -A INPUT -i <​interface_d'​entrée>​ -s <​reseau_local/​masque_de_reseau>​ -d <​ip_locale>​ -p <​nom_du_protocole>​ --dport <​nom_du_port>​ -m state --state NEW -j ACCEPT
 +
 +
 +> Ce qui rentre sur sa carte ethernet, dont la source est seulement <​reseau_local/​masque_de_reseau>​ et seulement à destination de <​ip_locale>,​ dont l'​état est une nouvelle connexion par tel protocole et sur tel port, sera accepté.
 + 
 +  * Sur la sortie :
 +
 +  iptables -A OUTPUT -o eth0 -s <​ip_locale>​ -d <​reseau_local/​masque_de_reseau>​ -p <​nom_du_protocole>​ --sport <​nom_du_port>​ -m state --state NEW -j ACCEPT
 +
 +> Ce qui sort de sa carte ethernet, dont la source est seulement <​reseau_local/​masque_de_reseau>​ et seulement à destination de <​ip_locale>,​ dont l'​état est une nouvelle connexion par tel protocole et sur tel port, sera accepté.
 +
 +
 +===Filtre encore plus restrictif===
 +
 +  * En entrée :
 +
 +  iptables -A INPUT -i eth0 -s <​reseau_local/​masque_de_reseau>​ -d <​ip_locale>​ -p <​nom_du_protocole>​ --dport <​nom_du_port>​ -m state --state ! INVALID -j ACCEPT
 +
 +> On précise que l'on accepte, en entrée sur l'​interface réseau, tout ce qui vient de notre réseau local à destination de l'​adresse ip, correspondant à notre interface réseau utilisant tel protocole, vers tel numéro de port (ou service) dont l'​état du paquet n'est pas invalide, c'​est-à-dire un paquet ayant l'​état '​nouveau',​ '​établi',​ '​relatif'​ ou 'non traqué'​.
 +
 +  * En sortie :
 +
 +  iptables -A OUTPUT -o eth0 -s <​ip_locale>​ -d <​reseau_local/​masque_de_reseau>​ -p <​nom_du_protocole>​ --sport <​nom_du_port>​ -m state --state RELATED,​ESTABLISHED -j ACCEPT
 +
 +> On précise que l'on accepte de laisser sortir de l'​interface réseau, tout paquet dont la source est l'​adresse ip correspondant à notre interface réseau, à destination de notre réseau local utilisant tel protocole, vers tel numero de port (ou service) dont l'​état est '​relatif'​ ou '​établi'​ - en rapport avec la règle d'​entrée.
 +
 +**-> Tous les paquets qui ne correspondent pas à ces critères d'​entrée ou sortie n'​entrent pas ou ne sortent pas !**
  
  
 +Pour dresser des définitions avec des arguments plus précis car tenant compte des particularités de chacun des protocoles, voir la documentation **[[http://​www.netfilter.org/​documentation/​|netfilter:​Documentation]]**.
doc/reseau/iptables-pare-feu-pour-un-client.txt · Dernière modification: 31/05/2023 20:57 par lagrenouille

Pied de page des forums

Propulsé par FluxBB