Cet article explique comment ajouter des règles de pare-feu iptables à l'aide de la commande "iptables -A" (ajouter).
"-A" est pour ajouter. Si cela vous permet de vous souvenir plus facilement de "-A" comme règle d'ajout (au lieu de règle d'ajout), c'est OK. Mais gardez à l'esprit que "-A" ajoute la règle à la fin de la chaîne.
Encore une fois, il est très important de se rappeler que -A ajoute la règle à la fin.
Généralement, la dernière règle sera de supprimer tous les paquets. Si vous avez déjà une règle pour abandonner tous les paquets, et si vous essayez d'utiliser "-A" à partir de la ligne de commande pour créer une nouvelle règle, vous finirez par ajouter la nouvelle règle après la règle actuelle "abandonner tous les paquets", ce qui rendra votre nouvelle règle quasiment inutile.
Une fois que vous avez maîtrisé les iptables, et lorsque vous l'implémentez en production, vous devez utiliser un script shell, où vous utilisez la commande -A pour ajouter toutes les règles. Dans ce script shell, votre dernière ligne doit toujours être la règle "supprimer tous les paquets". Lorsque vous souhaitez ajouter de nouvelles règles, modifiez ce script shell et ajoutez vos nouvelles règles au-dessus de la règle "supprimer tous les paquets".
Syntaxe :
iptables -A chain firewall-rule
- -Une chaîne – Spécifiez la chaîne où la règle doit être ajoutée. Par exemple, utilisez la chaîne INPUT pour les paquets entrants et OUTPUT pour les paquets sortants.
- firewall-rule :divers paramètres constituent la règle de pare-feu.
Si vous ne savez pas ce que signifie chaîne, vous feriez mieux de lire d'abord les principes fondamentaux d'iptables.
Paramètres des règles de pare-feu
Les paramètres suivants sont disponibles pour tous les types de règles de pare-feu.
-p est pour le protocole
- Indique le protocole de la règle.
- Les valeurs possibles sont tcp, udp, icmp
- Utilisez "tous" pour autoriser tous les protocoles. Lorsque vous ne spécifiez pas -p, par défaut "tous" les protocoles seront utilisés. Ce n'est pas une bonne pratique d'utiliser "tout" et de toujours spécifier un protocole.
- Utilisez soit le nom (par exemple :tcp), soit le numéro (par exemple :6 pour tcp) pour le protocole.
- Le fichier/etc/protocols contient tous les noms et numéros de protocole autorisés.
- Vous utilisez également –protocol
-s est pour la source
- Indique la source du paquet.
- Il peut s'agir d'une adresse IP, d'une adresse réseau ou d'un nom d'hôte
- Par exemple :-s 192.168.1.101 indique une adresse IP spécifique
- Pour le masque de réseau, utilisez /mask. Par exemple :"-s 192.168.1.0/24" représente un masque de réseau de 255.255.255.0 pour ce réseau. Cela correspond au réseau 192.168.1.x.
- Lorsque vous ne spécifiez pas de source, cela correspond à toutes les sources.
- Vous pouvez également utiliser –src ou –source
-d est pour la destination
- Indique la destination du paquet.
- Identique à "-s" (sauf qu'il représente l'hôte de destination, l'adresse IP ou le réseau)
- Vous pouvez également utiliser –dst ou –destination
-j est la cible
- j signifie "sauter vers la cible"
- Cela spécifie ce qui doit arriver au paquet qui correspond à cette règle de pare-feu.
- Les valeurs possibles sont ACCEPT, DROP, QUEUE, RETURN
- Vous pouvez également spécifier une autre chaîne définie par l'utilisateur comme valeur cible.
-i est pour l'interface
- i signifie "interface d'entrée"
- Vous pourriez ignorer cela et supposer que "-i" est pour l'interface. Veuillez noter que -i et -o sont pour les interfaces. Cependant, -i pour l'interface d'entrée et -o pour l'interface de sortie.
- Indique l'interface par laquelle les paquets entrants arrivent via la chaîne INPUT, FORWARD et PREROUTING.
- Par exemple :-i eth0 indique que cette règle doit prendre en compte les paquets entrants provenant de l'interface eth0.
- Si vous ne spécifiez pas l'option -i, toutes les interfaces disponibles sur le système seront prises en compte pour les paquets d'entrée.
- Vous pouvez également utiliser –in-interface
-o est pour notre interface
- o signifie "interface de sortie"
- Indique l'interface par laquelle les paquets sortants sont envoyés via la chaîne INPUT, FORWARD et PREROUTING.
- Si vous ne spécifiez pas l'option -o, toutes les interfaces disponibles sur le système seront prises en compte pour les paquets de sortie.
- Vous pouvez également utiliser –out-interface
Options supplémentaires pour les paramètres du pare-feu
Certains des paramètres de pare-feu ci-dessus ont à leur tour leurs propres options qui peuvent être transmises avec eux. Voici quelques-unes des options les plus courantes.
Pour utiliser ces options de paramètre, vous devez spécifier le paramètre correspondant dans la règle de pare-feu. Par exemple, pour utiliser l'option "–sport", vous devez avoir spécifié le paramètre "-p tcp" (ou "-p udp") dans votre règle de pare-feu.
Remarque :Toutes ces options sont précédées de deux tirets. Par exemple, il y a deux traits d'union devant sport.
–sport est pour le port source (pour -p tcp ou -p udp)
- Par défaut, tous les ports sources correspondent.
- Vous pouvez spécifier le numéro de port ou le nom. Par exemple, pour utiliser le port SSH dans votre règle de pare-feu, utilisez "–sport 22" ou "–sport ssh".
- Le fichier/etc/services contient tous les noms et numéros de port autorisés.
- Il est préférable d'utiliser le numéro de port dans la règle (pour les performances) que d'utiliser le nom du port.
- Pour faire correspondre la plage de ports, utilisez deux-points. Par exemple, 22:100 correspond au numéro de port de 22 à 100.
- Vous pouvez également utiliser –source-port
–dport correspond au port de destination (pour -p tcp ou -p udp)
- Tout est identique à –sport, sauf que cela concerne les ports de destination.
- Vous pouvez également utiliser –destination-port
–tcp-flags est pour les drapeaux TCP (pour -p tcp)
- Ceci peut contenir plusieurs valeurs séparées par une virgule.
- Les valeurs possibles sont :SYN, ACK, FIN, RST, URG, PSH. Vous pouvez également utiliser TOUT ou AUCUN
–icmp-type est pour le type ICMP (pour -p icmp)
- Lorsque vous utilisez le protocole icmp "-p icmp", vous pouvez également spécifier le type ICMP à l'aide du paramètre "-icmp-type".
- Par exemple :utilisez "–icmp-type 0" pour "Echo Reply" et "–icmp-type 8" pour "Echo".
Exemple de règle de pare-feu pour autoriser les connexions SSH entrantes
Maintenant que vous comprenez les différents paramètres (et leurs options) de la règle de pare-feu, laissez-nous créer un exemple de règle de pare-feu.
Dans cet exemple, n'autorisons que la connexion SSH entrante au serveur. Toutes les autres connexions seront bloquées (y compris le ping).
AVERTISSEMENT :Jouer avec les règles du pare-feu peut rendre votre système inaccessible. Si vous ne savez pas ce que vous faites, vous risquez de vous enfermer (ainsi que tout le monde) hors du système. Donc, faites tout votre apprentissage uniquement sur un système de test qui n'est utilisé par personne, et vous avez accès à la console pour redémarrer iptables, si vous êtes bloqué.
1. Supprimer les règles existantes
Si vous avez déjà des règles iptables, effectuez une sauvegarde avant de supprimer les règles existantes.
Supprimez toutes les règles existantes et autorisez le pare-feu à tout accepter. Utilisez iptables flush comme nous l'avons vu précédemment pour nettoyer toutes vos règles existantes et recommencer à zéro.
Testez pour vous assurer que vous pouvez utiliser ssh et envoyer un ping à ce serveur depuis l'extérieur.
Lorsque nous aurons terminé avec cet exemple, vous ne pourrez vous connecter en SSH qu'à ce serveur. Vous ne pourrez pas envoyer de ping à ce serveur depuis l'extérieur.
2. Autoriser uniquement SSH
Autorisez uniquement la connexion SSH entrante à ce serveur. Vous pouvez vous connecter en ssh à ce serveur depuis n'importe où.
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
La commande iptables ci-dessus comporte les 4 composants suivants.
- "-A INPUT" - Cela indique que nous ajoutons une nouvelle règle (ou ajoutons) à la chaîne INPUT. Cette règle s'applique donc au trafic entrant.
- « -i eth0 » :les paquets entrants via l'interface eth0 seront vérifiés par rapport à cette règle.
- "-p tcp –dport 22" - Cette règle s'applique aux paquets TCP. Cela a une option tcp appelée "-dport 22", qui indique que le port de destination pour cette règle sur le serveur est 22 (qui est ssh).
- « -j ACCEPT » :sauter pour accepter, ce qui ACCEPTE simplement le paquet.
En termes simples, la règle ci-dessus peut être énoncée comme suit :tous les paquets entrants via eth0 pour ssh seront acceptés.
3. Supprimer tous les autres paquets
Une fois que vous avez spécifié vos règles personnalisées pour accepter les paquets, vous devriez également avoir une règle par défaut pour supprimer tout autre paquet.
Cela devrait être votre dernière règle dans la chaîne INPUT.
Pour supprimer tous les paquets entrants, procédez comme suit.
iptables -A INPUT -j DROP
4. Afficher la règle SSH et tester
Pour afficher les règles de pare-feu iptables actuelles, utilisez la commande "iptables -L".
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh DROP all -- anywhere anywhere
Comme vous le voyez dans la sortie ci-dessus, les deux règles suivantes sont séquentielles.
- Accepter toutes les connexions ssh entrantes
- Rejetez tous les autres paquets.
Au lieu d'ajouter les règles de pare-feu à partir de la ligne de commande, il peut être préférable de créer un script shell contenant vos règles, comme indiqué ci-dessous.
# vi iptables.sh iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -j DROP # sh -x iptables.sh + iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT + iptables -A INPUT -j DROP # iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh DROP all -- anywhere anywhere
Semblable à la commande iptables append/add, il existe peu d'autres commandes disponibles pour iptables. Je les aborderai dans les prochains articles de la série iptables. Je fournirai également plusieurs exemples pratiques de règles de pare-feu qui seront utiles dans des scénarios réels.
Articles précédents de la série iptables :
- Didacticiel sur le pare-feu Linux :Tables IPTables, chaînes, principes de base des règles
- IPTables Flush :Supprimer / Supprimer toutes les règles sur RedHat et CentOS Linux