GNU/Linux >> Tutoriels Linux >  >> Linux

Linux IPTables :comment ajouter des règles de pare-feu (avec l'exemple Autoriser SSH)

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

Linux
  1. Ajouter un utilisateur au groupe sous Linux, comment le faire (avec exemples)

  2. Comment ajouter des règles iptables personnalisées dans le pare-feu CSF

  3. Comment créer des threads sous Linux (avec un exemple de programme C)

  4. Comment ajouter un shebang # ! avec un script php sous linux?

  5. Comment faire expirer les règles iptables ?

Comment configurer le pare-feu avec UFW sous Linux

Comment configurer le pare-feu avec Gufw sur le bureau Linux

Comment configurer un pare-feu avec GUFW sous Linux

Comment sécuriser un pare-feu Linux avec les règles IPTables

Cron Vs Anacron :Comment configurer Anacron sous Linux (avec un exemple)

Comment configurer un pare-feu sur votre serveur Linux