Description du routage Linux iptables. Accepter d'autres connexions importantes. Courrier et messages instantanés

acier, vison, boeuf, papier 28 septembre 2010 à 19:47

Les bases d'iptables à travers les yeux d'un bébé dans Debian

Ce qui sera discuté

Tout est très simple, encore une fois expliqué sur le forum aux débutants en monde Linux, que oui, comment j'ai compris que sur Internet, il n'est pas possible de trouver un article compilé expliquant non seulement les paramètres d'iptables, mais aussi quelques bases du réseau.
Donc, pour votre attention, je vous présente une petite excursion sur la configuration d'un pare-feu sous Linux. Nous n'approfondirons que la mise en place de netfilter/iptables, nous aborderons sans doute aussi le reste des questions appliquées, car nous n'avons pas assez de réponses complexes à nos questions... Et je vais essayer de tout expliquer ici le plus clairement possible .

A quoi ça ressemble

Nous allons considérer un schéma type pour les bureaux et les appartements, oui, les appartements ! Peu de gens ont leur propre petit serveur à la maison sous la table, mais la plupart de l'Internet à la maison est distribué via un routeur et la plupart d'entre eux sont également flashés avec Linux.
Il s'agit d'un agencement typique d'un petit bureau. Lorsqu'un ordinateur (serveur) est connecté à Internet et que les autres sont connectés à Internet via ce serveur.

Allons-y, petit à petit...

Et alors qu'avons-nous :
  • serveur avec 2 cartes réseau et Debian Lenny installé dessus
  • par défaut dans le pare-feu Debian Lenny - netfilter / iptables
  • un réseau local de N ordinateurs, tous connectés via un switch, dont un serveur
qu'est-ce que le NAT
Tout d'abord, nous devons comprendre que nous allons configurer le NAT (Network Address Translation) le plus ordinaire. Pour ceux qui ont soif, je mentionnerai également à la fin le serveur proxy en utilisant squid comme exemple. Comme je l'ai dit, nous allons mâcher presque tout.
Qu'est-ce que le NAT ? En fait, tout est simple, tous les ordinateurs ont des adresses physiques (MAC) et réseau (IP). Nous sommes actuellement intéressés par les adresses IP. L'adresse IP au sein d'un même réseau doit être unique ! Et avec la norme IPv4 actuelle, seuls 4 294 967 296 (2 32) peuvent être uniques, ce qui n'est pas beaucoup et c'est pratiquement terminé. mais ne vous inquiétez pas, IPv6 est sur le point de se généraliser, et il y a plein d'adresses !
Mais ici vous pouvez remarquer qu'il y a beaucoup plus d'ordinateurs que le nombre qui permet IPv4, ou vous dites que la maison d'un ami a la même adresse que vous ! Et c'est là qu'intervient le NAT - il vous permet de vous connecter réseaux informatiques utilisant une seule adresse IP entre elles, les actions du firewall sont appelées SNAT (Source NAT ou substitution de l'adresse source). Ceux. dans 99% des cas, tout votre bureau est connecté sous 1 adresse IP, tandis qu'à l'intérieur du bureau, chacun a la sienne. Vous pouvez lire sur les classes d'adresses IP sur Internet.

Maintenant que nous savons ce qu'est le NAT et à quoi il sert, nous pouvons passer directement à la configuration du serveur.

trafic de transit
Toutes les commandes sont exécutées en tant que root (superutilisateur). Dans Debian, le trafic de transit est désactivé par défaut, c'est-à-dire la valeur par défaut est de ne fonctionner que comme une seule machine. Comme vous l'avez peut-être deviné, il n'y a pas de NAT sans trafic de transit. Pour l'activer, il suffit de changer 1 chiffre - $ echo 1> / proc / sys / net / ipv4 / ip_forward mais ce paramètre va planter après le redémarrage, il est donc préférable de corriger la configuration - $ nano /etc/sysctl.conf alors on cherche une ligne # net.ipv4.ip_forward = 1 et supprimez le hachage (caractère de commentaire) au début de la ligne et vérifiez que la valeur est 1 ! Vous pouvez maintenant commencer à configurer directement iptables.
configurer iptables
Sur Internet, il existe de nombreux articles sur la façon d'écrire des règles dans iptables et ce qu'on peut en faire, cela m'a semblé le plus complet et le plus agréable à lire.
Et alors commençons. Tout d'abord, débarrassons les tableaux des règles inutiles, du coup il y avait quelque chose de superflu...
$ iptables -F
$ iptables -t nat -F
$ iptables -t mangle -F

L'excédent a été nettoyé. Il est très important de comprendre et de se rappeler que les règles d'iptables sont appliquées de manière hiérarchique, c'est-à-dire la règle ci-dessus sera exécutée plus tôt. Toutes les chaînes ont la politique ACCEPTER par défaut - tout autoriser. qui ne relevait pas des règles de cette chaîne.
Admettons que l'interface vers le réseau local est eth0, et vers Internet - eth1, le réseau local a des adresses 192.168.0.0/24, et le fournisseur nous a donné adresse statique 10.188.106.33 (mais pas "blanc" - vous pouvez également consulter les types d'adresses IP sur Internet). Et donc on écrit :
$ iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -j ACCEPT
$ iptables -A FORWARD -i eth1 -o eth0 -d 192.168.0.0/24 -j ACCEPT
$ iptables -P FORWARD DROP

ainsi, nous avons autorisé les paquets de transit à traverser le pare-feu pour notre plage d'adresses IP, et nous interdisons tout le reste.
Maintenant NAT lui-même :
$ iptables -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source 10.188.106.33
C'est suffisant pour que NAT travaille pour vous.
sur des bagatelles...
Sur les clients, nous spécifions l'adresse IP de la plage sélectionnée et spécifions l'adresse IP de notre serveur en tant que passerelle (généralement, la première du sous-réseau lui est attribuée - je vous laisse le choix). Tout paramètres réseau sur le serveur, vous pouvez le faire comme ceci :
$ nano / etc / réseau / interfaces il spécifie les paramètres de vos interfaces réseau.
accès aux entrailles du réseau via une passerelle ou DNAT
Et puis tu t'es rendu compte que dans le réseau tu as Serveur Windows auquel vous avez toujours eu un accès facile via RDP, puis cette passerelle ennuyeuse sur Debian est sortie ! C'est très simple - il vous suffit d'ajouter une règle DNAT à nos iptables.
Quel genre de bête est DNAT? DNAT (Destination NAT ou usurpation d'adresse de destinataire) - cartes réseau fonctionner dans un mode tel qu'ils n'acceptent que les paquets qui leur sont adressés, mais si vous vous connectez à notre serveur si l'adresse IP sous laquelle il se connecte à Internet, il y a une douzaine de machines supplémentaires dans votre bureau ? Comment la demande lui parviendra-t-elle ? En fait, toutes les demandes de ce genre reposent sur notre passerelle. Et tout ce que nous avons à faire est de définir les règles pour travailler avec de tels packages.
$ iptables -A PREROUTING -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
Cette règle simple redirigera tous les paquets provenant d'Internet vers la passerelle vers port TCP 3389 (c'est ce que le protocole RDP utilise) à votre serveur Windows interne. Et voilà, tout fonctionne pour vous.
alors qu'est-ce qu'il y a avec votre calmar préféré
Et bien que tout fonctionne maintenant, tout le monde a Internet et tout fonctionne, certains ont encore besoin d'un serveur proxy. Je ne parlerai pas de la configuration du calmar, je vous montrerai une règle qui vous permettra de la rendre "transparente". Dans le calmar, il vous suffit d'écrire le mot magique transparent au bon endroit et il commencera à traiter correctement les demandes qui lui sont tombées dessus.
Nous écrivons $ iptables -A PRÉROUTAGE -d! 192.168.0.0/24 -i eth0 -p tcp -m multiport --dports 80 443 -j REDIRECT --to-ports 3128.
Et qu'est-ce que ça nous donne ? Maintenant, toutes les demandes de les pages Web depuis vos lieux de travail via les protocoles http ((80) et https (443) seront redirigés vers le port que squid écoute. Vous recevez un filtrage de contenu, des informations sur qui était où et ce qui faisait sur Internet, l'utilisateur sans se douter de rien fonctionne comme avant...
un peu de sécurité
Vous devez au moins protéger votre passerelle au minimum, alors ajoutons quelques règles supplémentaires
$ iptables -A INPUT -i lo -j ACCEPT
$ iptables -A ENTRÉE -i eth0 -s 192.168.0.0/24 -j ACCEPTER
$ iptables -A INPUT -i eth1 -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT
$ iptables -P BAISSE D'ENTRÉE

Ainsi, ils ont interdit toute communication directement avec la passerelle, à l'exception déjà connexions établies, c'est à dire. ceux qui ont été initiés par vous et vous n'obtenez que des réponses. N'ayez pas peur que notre DNAT ne respecte tout simplement pas ces règles ...
pourquoi si peu ?
L'article n'est pas en caoutchouc et vous ne pouvez pas tout dire de toute façon ... J'ai apporté le minimum un ensemble d'actions et de concepts pour que vous puissiez commencer à maîtriser un tel colosse en tant que passerelle sous Linux. Ici, vous pouvez parler très, très longtemps, en discutant de nombreux aspects et capacités de netfilter.

Le total

Comme on peut le voir, tout est vraiment simple ! L'essentiel est de comprendre le principe de fonctionnement du réseau et de ne pas avoir peur de mettre en place et de lire de gros manuels.
J'espère que j'ai réussi à rassembler suffisamment d'informations pour commencer votre amitié avec routeurs logiciels basé sur Linux.

Mots clés : iptables, netfilter, NAT

Chaque ordinateur connecté au réseau est en danger potentiel. Il existe de nombreuses menaces sur le réseau, allant des programmes qui tentent de pénétrer dans le système de quelque manière que ce soit aux pirates informatiques qui souhaitent accéder à l'ordinateur dont ils ont besoin. MAIS Logiciel installé sur un ordinateur peut contenir des vulnérabilités non encore connues et non corrigées, qui peuvent devenir une faille de sécurité.

Si pour les ordinateurs personnels, cela n'est pas très pertinent, car ils sont connectés au réseau via des routeurs et NAT, qui les cachent du réseau externe, alors pour les serveurs, c'est plus pertinent que jamais. DANS système opérateur Linux a un pare-feu iptables très flexible et fiable intégré au noyau.

C'est à l'aide de ce programme que le système est protégé contre les intrusions externes, la redirection de port, et aussi bien d'autres actions avec le trafic. Mais son inconvénient est qu'il est un peu délicat à mettre en place. Cet article couvrira la configuration d'iptables pour les nuls. J'espère qu'après cela, vous pourrez utiliser en toute confiance les capacités de base d'iptables.

Les sous-systèmes iptables et Netfilter sont intégrés au noyau Linux depuis un certain temps. Tous les paquets réseau qui passent par l'ordinateur, sont envoyés par l'ordinateur ou sont destinés à l'ordinateur, le noyau les dirige via le filtre iptables. Là, ces packages se prêtent à des contrôles, puis pour chaque contrôle, s'il est réussi, l'action spécifiée est effectuée. Par exemple, un paquet est transmis au noyau pour être envoyé au programme cible, ou rejeté.

Types de forfaits

Tous les paquets sont divisés en trois types : entrants, sortants et passants. Les boîtes de réception sont celles qui ont été envoyées à cet ordinateur, les sortantes sont celles envoyées de cet ordinateur au réseau. Et ceux qui passent sont des paquets qui doivent simplement être transférés plus loin, par exemple, si votre ordinateur agit comme un routeur.

En conséquence, dans le filtre iptables, tous les paquets sont divisés en trois chaînes similaires :

  • Contribution- traite les paquets entrants et les connexions. Par exemple, si un utilisateur externe essaie de se connecter à votre ordinateur via ssh ou tout autre site Web vous envoie son contenu à la demande du navigateur. Tous ces packages finiront dans cette chaîne ;
  • avant- cette chaîne est utilisée pour les connexions de passage. Cela inclut les paquets qui sont envoyés à votre ordinateur, mais qui ne lui sont pas destinés, ils sont simplement transférés sur le réseau vers leur destination. Comme je l'ai dit, cela s'observe sur les routeurs ou, par exemple, si votre ordinateur distribue le wifi ;
  • production- cette chaîne est utilisée pour les paquets sortants et les connexions. Cela inclut les packages qui ont été générés lorsque vous essayez de pinger un site ou lorsque vous lancez votre navigateur et essayez d'ouvrir un site.

Mais si vous pensez que vous pouvez simplement fermer complètement la chaîne d'entrée pour augmenter la sécurité, alors vous vous trompez beaucoup. Le réseau utilise à la fois des chaînes d'entrée et de sortie. Par exemple, vous essayez de faire un ping, les données sont envoyées via la sortie, mais la réponse vient via l'entrée. La même chose se produit lors de la navigation sur des sites et d'autres activités. Mais la chaîne directe peut ne pas être utilisée du tout si votre ordinateur n'est pas un routeur. La configuration d'iptables doit donc être faite très soigneusement.

Règles et actions

Avant de passer à la création d'une liste de règles iptables, vous devez considérer comment elles fonctionnent et ce qu'elles sont. Pour chaque type de package, vous pouvez définir un ensemble de règles qui seront vérifiées à leur tour pour la conformité avec le package, et si le package correspond, alors appliquez-lui l'action spécifiée dans la règle. Les règles forment une chaîne, donc l'entrée, la sortie et la transmission sont appelées chaînes ou chaînes de règles. Il peut y avoir plusieurs actions :

  • J'ACCEPTE- permettre au paquet de passer plus loin dans la chaîne de règles ;
  • TOMBER- retirer le colis ;
  • REJETER- rejeter le colis, un message sera envoyé à l'expéditeur indiquant que le colis a été rejeté ;
  • JOURNAL- faire un enregistrement sur le paquet dans le fichier journal ;
  • FILE D'ATTENTE- envoyer un colis à une application personnalisée.

Les règles peuvent vérifier toutes les correspondances, par exemple, par IP, par port de destinataire ou d'expéditeur, en-têtes de paquets, et bien plus encore. Si un paquet ne correspond à aucune des règles, alors l'action par défaut lui est appliquée, généralement ACCEPTER.

Quand nous avons compris les règles, nous pouvons revenir aux chaînes. En plus de celles énumérées ci-dessus, il existe deux chaînes de règles supplémentaires :

  • préacheminement- le paquet entre dans cette chaîne avant d'être traité par iptables, le système ne sait pas encore où il sera envoyé, en entrée, sortie ou transfert ;
  • postroutage- tous les paquets de passage qui ont déjà passé la chaîne de transfert sont inclus ici.

Mais ce n'est pas tout. Nous avons encore des tables iptables, avec lesquelles il est également souhaitable de comprendre.

Tables Ipatables

Il existe un autre niveau d'abstraction au-dessus des chaînes de règles dans iptables, et ce sont les tables. Il existe plusieurs tables dans le système, et elles ont toutes un ensemble standard de chaînes d'entrée, de transfert et de sortie. Les tables sont utilisées pour effectuer diverses actions sur les paquets, par exemple, pour la modification ou le filtrage. Maintenant ce n'est pas si important pour vous et il suffira de savoir que la filtration paquets iptables est effectuée dans la table de filtrage. Mais nous les couvrirons tous :

  • cru- conçu pour fonctionner avec des sacs bruts, alors qu'ils n'ont pas encore été transformés ;
  • mutiler- destiné à la modification des packages ;
  • nat- Fournit nat au travail si vous souhaitez utiliser votre ordinateur comme routeur ;
  • filtre- la table principale de filtrage de paquets, utilisée par défaut.

Avec presque tout en théorie, regardons maintenant l'utilitaire ligne de commande iptables, qui est utilisé pour gérer le système iptables.

Utilitaire Iptables

Les sous-systèmes iptables et netfilter sont intégrés au noyau, mais un ensemble d'utilitaires pour gérer tout cela n'est pas toujours fourni avec le système. Pour installer l'utilitaire sur Ubuntu, tapez :

sudo apt installer iptables

Sur les distributions basées sur Fedora, l'installation d'iptables est légèrement différente :

sudo yum installer iptables

Une fois l'installation d'iptables terminée, vous pouvez passer à la configuration, mais regardons d'abord la syntaxe de l'utilitaire. Habituellement, la commande ressemble à ceci :

-t table chaîne d'action Options supplémentaires

Regardons maintenant les paramètres iptables, la table indique la table avec laquelle travailler, ce paramètre peut être omis, l'action est l'action souhaitée, par exemple, créer ou supprimer une règle, et Options supplémentaires décrire l'action et la règle à effectuer.

Il reste à considérer les principales actions qu'iptables vous permet d'effectuer :

  • -UNE- ajouter une règle à la chaîne ;
  • -DE- vérifier toutes les règles ;
  • -RÉ- supprimer la règle ;
  • -JE- insérer une règle avec le numéro requis ;
  • -L- afficher toutes les règles de la chaîne en cours ;
  • -S- afficher toutes les règles ;
  • -F- effacer toutes les règles ;
  • -N- créer une chaîne ;
  • -X- supprimer la chaîne ;
  • -P- définir l'action par défaut.

Options supplémentaires pour les règles :

  • -p- spécifier le protocole, un parmi tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
    mh ;
  • -s- spécifier l'adresse IP de l'appareil qui envoie le paquet ;
  • -ré- préciser l'adresse IP du destinataire ;
  • -je- interface réseau d'entrée ;
  • -o- interface réseau sortante ;
  • -j- sélectionnez une action si la règle correspond.

Vous pouvez maintenant examiner des exemples de configuration d'iptables.

Exemples de configuration Iptables

Nous allons passer en revue quelques exemples de base afin que vous puissiez consolider ce que vous avez lu ci-dessus.

Liste des règles

Voyons d'abord comment s'effectue la recherche des règles iptables, l'option -L suffit pour cela :

Vous pouvez également spécifier la chaîne souhaitée pour afficher les règles uniquement pour elle :

iptables -L ENTRÉE

Règles de compensation

Vous ne pouvez pas simplement désactiver iptables en arrêtant le service de mise à jour des règles iptables via systemd ou même en supprimant l'ensemble d'utilitaires de configuration. Le sous-système fonctionne au niveau du noyau et ne dépend pas de ce que vous y avez installé. Par conséquent, si vous faites quelque chose de mal, vous devrez effacer les règles. Pour ce faire, exécutez :

Ou juste pour une chaîne spécifique :

sudo iptables -F Entrée

Permettez-moi de vous rappeler que toutes ces actions sont effectuées pour la table par défaut - filtre.

Règles par défaut

Comme je l'ai déjà dit, si aucune règle ne convient à un package, alors l'action par défaut lui est appliquée. Il peut être défini à l'aide de l'option -p :

sudo iptables -p SAISIE ACCEPTER
$ sudo iptables -p SORTIE ACCEPTER
$ sudo iptables -p FORWARD DROP

Dans cet exemple, nous autorisons les chaînes INPUT et OUTPUT, mais interdisons FORWARD.

Blocage des paquets

Pour bloquer les paquets, nous pouvons utiliser l'action DROP, nous pouvons filtrer les paquets qui doivent être bloqués selon de nombreux critères, par exemple le protocole, l'adresse IP, le masque de réseau, le port et bien plus encore.

Voici à quoi ressemblera la commande, qui vous permet d'ajouter une règle iptables pour bloquer tous les paquets entrants à partir de 10.10.10.10 :

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

Et maintenant les paquets sortants à la même adresse :

Le verrouillage de la plage IP se fait de la même manière. Pour ce faire, vous devez utiliser le masque de réseau 10.10.10.0/24. Ce seront toutes les adresses de 10.10.10.0 à 10.10.10.255 :

sudo iptables -A INPUT -s 10.10.10.0/24 -j DROP

Ou une version étendue du masque :

sudo iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Vous pouvez également bloquer toutes les connexions ssh entrantes :

sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Comme vous pouvez le voir, l'ajout d'une règle iptables est très simple.

Supprimer des règles

La suppression des règles iptables s'effectue de la même manière que la création de nouvelles règles, mais au lieu de l'option A, vous devez utiliser l'option D. Tout d'abord, regardez la liste des règles :

Par exemple, voici comment supprimer la règle iptables qui a été créée la seconde :

sudo iptables -A SORTIE -s 10.10.10.10 -j DROP

Vous pouvez également effacer complètement iptables en exécutant la commande avec l'option -F :

Les concepts clés dans iptables sont :

    Règle - se compose d'un critère, d'une action et d'un compteur. Si le paquet correspond au critère, une action lui est appliquée et est comptée. Le critère peut exister ou non - alors le critère "tous les packages" est implicitement supposé. Il n'est pas non plus nécessaire de spécifier une action - en l'absence d'action, la règle ne fonctionnera que comme un compteur. Les règles de chaque chaîne sont déclenchées dans l'ordre dans lequel elles apparaissent, l'ordre est donc important.

    • Le critère est une expression booléenne qui analyse les propriétés d'un paquet et/ou d'une connexion et détermine si ce paquet particulier correspond à la règle actuelle. Les critères sont reliés par un "ET" logique.

      Action - une description de l'action à effectuer avec le package et/ou la connexion si elles entrent dans le champ d'application de cette règle. Les actions seront décrites plus en détail ci-dessous.

      Le compteur est un composant d'une règle qui permet de comptabiliser le nombre de paquets qui relèvent du critère de cette règle. Le compteur prend également en compte le volume total de ces paquets en octets.

    Une chaîne est une séquence ordonnée de règles. Les chaînes peuvent être divisées en personnalisées et de base.

    • La chaîne de base est la chaîne créée par défaut lors de l'initialisation de la table. Chaque paquet, selon qu'il est destiné à l'hôte lui-même, généré par lui, ou transitoire, doit passer par l'ensemble des chaînes de base des différentes tables qui lui sont affectées. De plus, la chaîne de base diffère de la chaîne d'utilisateurs en ce qu'elle a une politique par défaut. Cette action s'applique aux paquets qui n'ont pas été traités par d'autres règles de cette chaîne et les chaînes appelées à partir de celle-ci. Les noms de chaîne de base sont toujours en majuscules (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).

      Chaîne personnalisée - Une chaîne créée par l'utilisateur. Il ne peut être utilisé que dans sa propre table. Il est recommandé de ne pas utiliser de noms en majuscules pour de telles chaînes afin d'éviter toute confusion avec les chaînes de base et les actions en ligne.

    Table - une collection de chaînes de base et personnalisées, unies par un objectif fonctionnel... Les noms de table (ainsi que les modules de critères) sont écrits en minuscules, car, en principe, ils ne peuvent pas entrer en conflit avec les noms de chaînes d'utilisateurs. Lors de l'appel de la commande iptables, la table est spécifiée au format -t nom_table. Si elle n'est pas explicitement spécifiée, la table de filtrage est utilisée.

Analyse :

# Filtre de règles de table de vidage$ sudo iptables-save -c -t filter # Filtrer la table * filter # Chaînes INPUT, FORWARD, OUTPUT, leurs politiques et compteurs: ENTREE ACCEPTE [19302 : 9473669] : SUIVANT ACCEPTER [0 : 0] : SORTIE ACCEPTER [5462736 : 4247599532] # Règle : "" - compteur de règles, "-A INPUT" - chaîne, "-i em1 -p tcp -m tcp --dport 22" - critère, "-j ACCEPT" - action[17: 1020] -A INPUT -i em1 -p tcp -m tcp --dport 22 -j ACCEPTER COMMIT

Architecture

Dans le système netfilter, les paquets passent par des chaînes. Une chaîne est une liste ordonnée de règles, et chaque règle peut contenir des critères et une action ou une transition. Lorsqu'un paquet traverse la chaîne, le système netfilter vérifie à son tour si le paquet répond à tous les critères de la règle suivante, et si c'est le cas, effectue alors une action (s'il n'y a pas de critère dans la règle, alors l'action est effectuée pour tous les paquets passant par la règle). Il y a beaucoup d'options pour les critères possibles. Par exemple, un paquet correspond au critère –source 192.168.1.1 si l'en-tête du paquet indique que l'expéditeur est 192.168.1.1. Le type de saut le plus simple, –jump, saute simplement le paquet au début d'une autre chaîne. Vous pouvez également spécifier une action à l'aide de –jump. Les actions standard disponibles dans toutes les chaînes sont ACCEPT (ignorer), DROP (supprimer), QUEUE (transfert vers un programme externe pour analyse) et RETURN (retour à la chaîne précédente pour analyse). Par exemple, les commandes

Iptables -A INPUT --source 192.168.1.1 --jump ACCEPTER iptables -A INPUT --jump other_chain

signifie "ajoutez les règles suivantes à la fin de la chaîne INPUT : laissez passer les paquets de 192.168.1.1, et il ne reste plus qu'à les envoyer pour analyse à la chaîne other_chain."

Chaînes

Il existe 5 types de chaînes standard intégrées au système :

    PREROUTING - pour le traitement initial des paquets entrants.

    INPUT - pour les paquets entrants adressés directement au processus local (client ou serveur).

    FORWARD - pour les paquets entrants redirigés vers l'extérieur (notez que les paquets transférés passent d'abord par la chaîne PREROUTING, puis FORWARD et POSTROUTING).

    SORTIE - pour les paquets générés par les processus locaux.

    POSTROUTING - pour terminer les paquets sortants.

Vous pouvez également créer et détruire vos propres chaînes à l'aide de l'utilitaire iptables.

les tables

Les chaînes sont organisées en 4 tableaux :

    Brut - visualisé avant que le paquet ne soit envoyé au système de définition d'état. Il est rarement utilisé, par exemple, pour marquer les paquets qui ne doivent PAS être traités par le système d'état. Pour ce faire, l'action NOTRACK est spécifiée dans la règle. Contient les chaînes PREROUTING et OUTPUT.

    Mangle - contient les règles de modification (généralement l'en-tête) des paquets IP. Entre autres, il prend en charge les actions TTL (Time to live), TOS (Type of Service) et MARK (pour changer les champs TTL et TOS, et pour changer les marqueurs de paquets). Rarement nécessaire et peut être dangereux. Contient les cinq chaînes standard.

    Nat - Recherche uniquement les paquets créant une nouvelle connexion (selon le système d'état). Supporte les actions DNAT, SNAT, MASQUERADE, REDIRECT. Contient les chaînes PREROUTING, OUTPUT et POSTROUTING.

    Filtre - la table principale, utilisée par défaut si le nom de la table n'est pas spécifié. Contient les chaînes INPUT, FORWARD et OUTPUT.

Chaînes avec Le même nom, mais dans des tables différentes - des objets complètement indépendants. Par exemple, le PREROUTING brut et le PREROUTING mangle contiennent généralement un ensemble de règles différent ; les paquets passent d'abord par la chaîne PREROUTING brute, puis par le mangle PREROUTING.

États

Dans le système netfilter, chaque paquet passant par le mécanisme de détection d'état peut avoir l'un des quatre états possibles :

    NOUVEAU - le package ouvre une nouvelle session. Un exemple classique est un paquet TCP avec le drapeau SYN.

    ÉTABLI - Le package fait partie d'une session existante.

    RELATED - le package ouvre une nouvelle session associée à une session déjà ouverte. Par exemple, lors d'une session FTP passive, le client se connecte au port 21 du serveur, le serveur indique au client le numéro d'un deuxième port choisi au hasard, puis le client se connecte au deuxième port pour transférer des fichiers. Dans ce cas, la deuxième session (transfert de fichiers sur le deuxième port) est associée à une session déjà existante (la connexion d'origine au port 21).

    INVALIDE - tous les autres packages.

Schéma du parcours des tables et des chaînes

Schéma simplifié du passage des tables et des chaînes :

Schéma détaillé :

Configuration de base

Vous trouverez ci-dessous un exemple de configuration statique de base d'iptables. Lors de l'enregistrement et du chargement d'une telle configuration, vous devez prendre en compte la possibilité d'y apporter des modifications à partir d'autres services, par exemple Fail2ban. De plus, lors de l'utilisation de l'adressage IPv6, la configuration pour IPv6 doit être effectuée indépendamment d'IPv4.

IPv4

sudo iptables-save

Créez un script avec un dump de règles iptables :

sudo nano / etc / network / if-up.d / iptables-rules

Copiez le code suivant :

#! / sbin / iptables-restore -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -m conntrack - ctstate CONNEXES, ÉTABLIES -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited # -A OUTPUT -p icmp -j ACCEPT # -A OUTPUT -o lo - j J'ACCEPTE # -A OUTPUT -j REJECT --reject-with icmp-host-prohibited S'ENGAGER

Nous ajoutons les règles nécessaires, en tenant compte d'iptables-save.

sudo chmod + x / etc / network / if-up.d / iptables-rules sudo / etc / network / if-up.d / iptables-rules

IPv6

Affichage de la configuration actuelle :

sudo ip6tables-save

Créez un script avec un dump de règles ip6tables :

sudo nano / etc / network / if-up.d / ip6tables-rules

Copiez le code suivant :

#! / sbin / ip6tables-restore # La table des filtres et ses chaînes* filtre : ENTREE ACCEPTE [0 : 0] : FORWARD ACCEPT [0 : 0] : SORTIE ACCEPTE [0 : 0] # Autoriser les connexions liées et établies-A ENTRÉE -m conntrack --ctstate LIÉ, ÉTABLISSÉ -j ACCEPTER # Autoriser le trafic icmp de service-A ENTRÉE -p ipv6-icmp -j ACCEPTER # Autoriser le trafic de confiance vers l'interface de bouclage-A ENTRÉE -i lo -j ACCEPTER # Ici, vous pouvez insérer des règles supplémentaires pour la chaîne INPUT # Interdire tout le reste pour INPUT-A INPUT -j REJECT --reject-with icmp6-adm-prohibited # L'ordre et la signification des règles pour les chaînes FORWARD et OUTPUT est le même que INPUT-A FORWARD -m conntrack --ctstate LIÉ, ÉTABLI -j ACCEPTER -A FORWARD -p ipv6-icmp -j ACCEPTER -A FORWARD -j REJECT --reject-with icmp6-adm-prohibited # Le filtrage de la chaîne OUTPUT est fortement déconseillé # -A SORTIE -m conntrack --ctstate LIÉ, ÉTABLISSÉ -j ACCEPTER # -A SORTIE -p ipv6-icmp -j ACCEPTER# -A SORTIE -o lo -j ACCEPTER # -A OUTPUT -j REJECT --reject-with icmp6-adm-prohibited S'ENGAGER

Nous ajoutons les règles nécessaires, en tenant compte de ip6tables-save.

Enregistrer et fermer : Ctrl + O, Entrée, Ctrl + X

Nous rendons le script exécutable et chargeons les règles iptables :

sudo chmod + x / etc / network / if-up.d / ip6tables-rules sudo / etc / network / if-up.d / ip6tables-rules

Règles supplémentaires

Vous trouverez ci-dessous quelques-unes des règles les plus couramment utilisées. Les chaînes INPUT/OUTPUT sont utilisées pour filtrer le trafic local. Pour le trafic de transit, vous devez utiliser la chaîne FORWARD.

Accès à distance

# remote.ssh -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT # remote.rdp -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 3389 -j ACCEPT # remote.vnc -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 5900 -j ACCEPT

Services Web et fichiers

# web.http, web.https -A INPUT -p tcp -m conntrack --ctstate NOUVEAU -m multiport -A INPUT -p tcp -m conntrack --ctstate NOUVEAU -m tcp --dport 21 -j ACCEPT

Courrier et messages instantanés

# mail.pop3, mail.pop3s -A INPUT -p tcp -m conntrack --ctstate NOUVEAU -m multiport --dports 110, 995 -j ACCEPT # mail.imap, mail.imaps -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 143, 993 -j ACCEPT # mail.smtp, mail.smtps -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 25, 465 -j ACCEPT # im.xmpp -A INPUT -p tcp -m conntrack --ctstate NOUVEAU -m multiport --dports 5222, 5223 -j ACCEPT # im.icq.oscar -A INPUT -p tcp -m conntrack --ctstate NOUVEAU -m tcp --dport 5190 -j ACCEPTER

Services réseau

# network.openvpn.vpn -A INPUT -p udp -m conntrack --ctstate NOUVEAU -m udp --dport 1194 -j ACCEPT # network.squid.proxy -A INPUT -p udp -m conntrack --ctstate NOUVEAU -m udp --dport 3128 -j ACCEPT # network.dns -A INPUT -p tcp -m conntrack --ctstate NOUVEAU -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m conntrack --ctstate NOUVEAU -m udp --dport 53 -j ACCEPT # network.ntp -A INPUT -p udp -m conntrack --ctstate NOUVEAU -A INPUT -p udp -m conntrack --ctstate NOUVEAU -m udp --dport 69 -j ACCEPT # network.dhserver.dhcp.discover-request-A INPUT -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT # network.dhclient.dhcp.discover-request # -A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT # network.dhserver.dhcp.offer-ack # -A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 67 --dport 68 -j ACCEPT

Test et débogage

Affichage de la configuration actuelle pour IPv4 et IPv6 :

sudo iptables-save sudo ip6tables-save

Enregistrement

Tracé

Modules du noyau

Afficher les modules chargés :

lsmod | grep -E "^ ip | ^ nf" | sorte

Il est pratique d'utiliser l'autocomplétion pour charger des modules supplémentaires : 2x Tab

sudo modprobe nf sudo modprobe modules-load.d

Dans cet article, nous allons vous montrer comment configurer iptables sur Linux. Vous apprendrez ce que c'est et pourquoi vous devez configurer cette fonctionnalité. Configuration d'iptables sous Linux est assez simple.

Configuration d'iptables sur Linux : qu'est-ce qu'iptables ?

Iptables est un utilitaire de pare-feu en ligne de commande qui utilise une politique de chaînage pour autoriser ou bloquer le trafic. Lorsqu'une connexion essaie de s'établir sur votre système, iptables recherche une règle dans sa liste pour lui correspondre. S'il ne le trouve pas, il recourt à l'action par défaut.

Iptables est presque toujours préinstallé sur n'importe quel Distribution Linux... Pour le mettre à jour/installer, il suffit de télécharger le package iptables :

sudo apt-get install iptables

Il existe des alternatives GUI à iptables comme Firestarter, mais iptables n'est pas si difficile si vous n'exécutez que quelques commandes. Soyez extrêmement prudent lors de la configuration des règles iptables, en particulier si vous utilisez SSH sur le serveur, car une mauvaise commande peut vous bloquer pendant longtemps jusqu'à ce qu'elle soit corrigée manuellement sur la machine physique.

Configurer iptables sur Linux pour les nuls

D'ailleurs, nous en avons déjà parlé. Cela vous intéressera peut-être aussi. Le lien peut être trouvé ci-dessus.

La configuration d'iptables sur Linux, comme nous l'avons dit plus haut, est assez simple. Mais avant de commencer la configuration, vous devez vous familiariser avec concepts généraux option.

Types de chaînes

Iptables utilise trois chaînes différentes : entrée, transfert et sortie.

Contribution- Cette chaîne est utilisée pour contrôler le comportement des connexions entrantes. Par exemple, si un utilisateur essaie d'installer SSH sur votre ordinateur/serveur, iptables essaiera de faire correspondre l'adresse IP et le port avec une règle dans la chaîne d'entrée.

Avant- cette chaîne est utilisée pour les connexions entrantes qui ne sont pas réellement délivrées localement. Pensez à un routeur - les données lui sont toujours envoyées, mais sont rarement destinées au routeur lui-même ; Les données sont simplement redirigées vers la page de destination. À moins que vous ne fassiez un routage, un NAT ou tout autre élément de votre système nécessitant un transfert, vous n'utiliserez même pas cette chaîne.

Il existe une manière fiable vérifiez si votre système utilise ou a besoin d'une chaîne d'alimentation.

Cette capture d'écran concerne un serveur qui fonctionne depuis plusieurs semaines et n'a aucune restriction de connexion entrante ou sortante. Comme vous pouvez le voir, la chaîne d'entrée a traité 11 Go de paquets et la chaîne de sortie a traité 17 Go. D'autre part, une chaîne droite n'a pas besoin de traiter un seul paquet. En effet, le serveur n'effectue aucun transfert ou n'est pas utilisé comme périphérique de bout en bout.

Sortie - Cette chaîne est utilisée pour les connexions sortantes. Par exemple, si vous essayez de pinger le site linuxinsider, iptables vérifiera sa chaîne de sortie pour voir quelles règles s'appliquent au ping et à linuxinsider avant de décider d'autoriser ou de refuser la tentative de connexion.

Avertissement

Même si la validation de l'hôte externe ressemble à quelque chose qui n'a besoin d'être parcouru que par la chaîne de sortie, gardez à l'esprit que la chaîne d'entrée sera également utilisée pour renvoyer des données. Lorsque vous utilisez iptables pour verrouiller votre système, n'oubliez pas que de nombreux protocoles nécessitent une communication bidirectionnelle, de sorte que les chaînes en amont et en aval doivent être configurées correctement. SSH est un protocole général que les gens oublient d'autoriser sur les deux chaînes.

Comportement de stratégie par défaut

Avant de commencer à configurer des règles spécifiques, vous devez décider ce que vous voulez que le comportement par défaut de ces trois réseaux fasse. En d'autres termes, que voulez-vous qu'iptables fasse si la connexion ne correspond à aucune des règles existantes ?

Pour voir quelles chaînes de stratégies sont configurées pour gérer le trafic sans correspondance, exécutez la commande iptables -L.

Comme vous pouvez le voir, nous avons également utilisé la commande grep pour obtenir un résultat plus net. Dans cette capture d'écran, nos chaînes sont actuellement conçues pour recevoir du trafic.

La plupart du temps, vous voulez que votre système accepte les connexions par défaut. Si vous n'avez pas encore modifié les règles de chaînage des stratégies, ce paramètre doit déjà être configuré. Quoi qu'il en soit, voici la commande pour accepter les connexions par défaut :

iptables --policy SAISIE ACCEPTER
iptables --policy SORTIE ACCEPTER
iptables --policy FORWARD ACCEPT

Par défaut, dans une règle d'acceptation, vous pouvez utiliser iptables pour rejeter certaines adresses IP ou numéros de port tout en continuant à accepter toutes les autres connexions. Nous arriverons à ces équipes dans une minute.

Si vous préférez refuser toutes les connexions et spécifier manuellement celles que vous souhaitez autoriser à se connecter, vous devez modifier la politique par défaut de vos circuits pour refuser. Cela ne sera probablement utile que pour les serveurs contenant information confidentielle, et seules les mêmes adresses IP s'y connecteront.

iptables --policy INPUT DROP
iptables --policy BAISSE DE SORTIE
iptables --policy FORWARD DROP

Réponses de connexion

Avec les stratégies de chaîne par défaut configurées, vous pouvez commencer à ajouter des règles à iptables pour savoir quoi faire lorsqu'il rencontre une connexion à une adresse IP ou à un port spécifique. Dans ce guide, nous couvrirons trois des « réponses » les plus courantes et les plus fréquemment utilisées.

J'accepte- autoriser la connexion.

Tomber- Lâchez la connexion, faites comme si cela ne s'était jamais produit. C'est mieux si vous ne voulez pas que la source sache que votre système existe.

Rejeter- refuser la connexion, mais envoyer un message d'erreur. C'est mieux si vous ne voulez pas qu'une source particulière se connecte à votre système, mais que vous voulez qu'ils sachent que votre pare-feu les bloquait.

La meilleure façon de montrer la différence entre ces trois règles est de montrer à quoi cela ressemble lorsqu'un PC essaie de pinger une machine Linux à l'aide d'iptables configurés pour chacun de ces paramètres.

Autorisation de connexion :

Supprimer une connexion :

Rejet de connexion :

Masque de réseau ou caractéristique pour spécifier une plage d'adresses IP.

Configuration d'iptables sous Linux : méthodes de connexion

Si nous parlons de "Configurer iptables sur Linux", alors vous devez parler des méthodes de connexion.

Autoriser ou bloquer des connexions spécifiques
Avec les stratégies configurées, vous pouvez configurer iptables pour autoriser ou bloquer des adresses, des plages d'adresses et des ports spécifiques. Dans ces exemples, nous établirons des connexions DROP, mais vous pouvez les basculer sur ACCEPTER ou REJETER, en fonction de vos besoins et de la manière dont vous configurez vos chaînes de politiques.

Noter. Dans ces exemples, nous utiliserons iptables -A pour ajouter des règles à une chaîne existante. Iptables commence en haut de la liste et parcourt chaque règle jusqu'à ce qu'il en trouve une qui lui correspond. Si vous devez insérer une règle au-dessus d'une autre, vous pouvez utiliser iptables -I pour spécifier le numéro à lister.

Connexions à partir d'une seule adresse IP

Cet exemple montre comment bloquer toutes les connexions à partir de l'adresse IP 10.10.10.10 ..

iptables -A INPUT -s 10.10.10.10 -j DROP

Connexions à partir d'une plage d'adresses IP

Cet exemple montre comment bloquer toutes les adresses IP de la plage réseau 10.10.10.0/24. Vous pouvez utiliser un masque de réseau ou une barre oblique standard pour spécifier une plage d'adresses IP.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Connexions à un port spécifique

Cet exemple montre comment bloquer les connexions SSH à partir de 10.10.10.10.

iptables -A INPUT -p tcp -dport ssh -s 10.10.10.10 -j DROP

Vous pouvez remplacer "ssh" par n'importe quel protocole ou numéro de port. La partie -p tcp du code indique à iptables quelle connexion le protocole utilise. Si vous avez bloqué un protocole qui utilise UDP et non TCP, alors -p udp est requis à la place.

Cet exemple montre comment bloquer les connexions SSH à partir de n'importe quelle adresse IP.

iptables -A INPUT -p tcp -dport ssh -j DROP

États de connexion

Comme nous l'avons mentionné précédemment, de nombreux protocoles nécessitent une communication bidirectionnelle. Par exemple, si vous souhaitez autoriser les connexions SSH à votre système, les circuits en amont et en aval auront besoin d'une règle qui leur sera ajoutée. Mais que se passe-t-il si vous souhaitez que la connexion SSH à votre système soit autorisée ? L'ajout de la règle entraînerait-il la chaîne sortante et les tentatives SSH sortantes ?

C'est là qu'interviennent les états de connexion, vous donnant la possibilité d'autoriser les communications bidirectionnelles, mais uniquement les connexions unidirectionnelles. Jetez un œil à cet exemple où les connexions SSH FROM 10.10.10.10 sont autorisées, mais les connexions SSH TO 10.10.10.10 ne le sont pas. Cependant, le système est autorisé à envoyer des commentaires via SSH alors que la session est déjà établie, ce qui rend la communication SSH possible entre les deux hôtes.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NOUVEAU, ÉTABLI -j ACCEPTER

iptables -A SORTIE -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Enregistrer les modifications

Les modifications que vous apportez aux règles iptables seront annulées au prochain redémarrage du service iptables, sauf si vous exécutez la commande pour enregistrer les modifications. Cette commande peut varier en fonction de votre distribution :

sudo / sbin / iptables-save

Red Hat/CentOS :

/ sbin / service iptables save

/etc/init.d/iptables enregistrer

Autres commandes

Liste des règles iptables actuellement configurées :

L'ajout de l'option -v vous donnera des informations sur les paquets et les octets, tandis que l'ajout de -n contiendra toutes les valeurs numériques. En d'autres termes, les noms d'hôtes, les protocoles et les réseaux sont répertoriés sous forme de nombres.

Pour effacer toutes les règles actuellement configurées, vous pouvez exécuter la commande flush.

Traduction d'une excellente ressource en anglais CommentGeek.

Si vous avez encore des questions sur le thème "Configurer iptables sur Linux pour les nuls", vous pouvez les écrire dans le formulaire de commentaires sur notre site Web.

Si vous trouvez une erreur, veuillez sélectionner un morceau de texte et appuyez sur Ctrl + Entrée.

Plusieurs fois, je suis tombé sur le fait que même les gens qui ne sont pas stupides en général font des erreurs absolument impardonnables. Par exemple, ils ouvrent le port sur lequel la base de données s'exécute sur l'ensemble d'Internet. C'est souvent le cas pour les débutants en DevOps qui ont écrit du code toute leur vie et maintenant leurs responsabilités incluent la configuration des serveurs. Il y a de bons tutos sur le net sur configuration de base pare-feu sous Linux et autres * nix, mais souvent ce sont des feuilles pour de nombreux écrans. J'espère donc que ce tutoriel plus concis sera utile à quelqu'un.

Important! Il est très facile de mettre le feu à une voiture par erreur de manière à ne plus y entrer. Cela est particulièrement vrai pour l'hébergement cloud. Par exemple, si dans AWS vous fermez tous les ports de 1024 à 65536, pour une raison quelconque, la machine est fermée après un redémarrage. généralement tous ports. Si vous hébergez dans les clouds, configurez meilleur pare-feu via l'interface web fournie par l'hébergement.

Une petite note sur la terminologie. Le pare-feu intégré au noyau Linux s'appelle Netfilter et iptables est l'utilitaire de gestion de ce pare-feu. Beaucoup de gens pensent à tort que le pare-feu s'appelle iptables. Ce n'est pas vrai. En disant quelque chose comme "Je filtre des paquets avec iptables", vous montrez aux autres que vous êtes analphabète.

En général, quelles tâches peuvent être résolues à l'aide de Netfilter :

  • Autoriser / refuser le trafic entrant vers des ports spécifiques à l'aide de protocoles spécifiques (IPv4 / IPv6, TCP / UDP) à partir d'adresses (IP, MAC) ou de sous-réseaux spécifiés ;
  • Tout est pareil pour le trafic sortant ;
  • Vous pouvez, par exemple, ignorer complètement tous les paquets ICMP ;
  • Configuration du NAT, voir l'article sur un routeur Raspberry Pi ;
  • J'ai entendu dire que les vrais gourous savent comment mettre en place une protection contre les attaques DDoS et la force brute, restreindre l'accès au réseau à des applications, des utilisateurs ou des groupes spécifiques, et faire d'autres choses folles ;

Notez que l'utilitaire iptables m'a semblé au premier abord extrêmement gênant par rapport à ipfw sous FreeBSD. Heureusement, après avoir travaillé avec lui pendant un certain temps, tous ces nombreux drapeaux comme -A, -D, -j et d'autres deviennent familiers, alors soyez patient. Regardons les commandes principales.

Afficher toutes les règles :

iptables -L -n

Vous remarquerez peut-être que Netfilter a une sorte de "chaînes" - au moins INPUT, OUTPUT et FORWARD. Personnellement, j'ai aussi une chaîne Docker sur ma voiture. Pour la première fois, vous pouvez considérer les deux premiers comme l'ensemble du trafic entrant et sortant, respectivement, et oublier temporairement le reste. Il y a de fortes chances que vous n'en ayez jamais besoin.

Supprimer toutes les règles :

iptables -F

Modifiez la politique (comportement par défaut) de la chaîne :

iptables -P BAISSE D'ENTRÉE
iptables -P SAISIE ACCEPTER

Refuser l'accès depuis l'hôte/le sous-réseau :

iptables -A INPUT -s 123.45.67.89 -j DROP
iptables -A INPUT -s 123.45.0.0/ 16 -j DROP

Vous pouvez également utiliser des noms de domaine :

iptables -A INPUT -s example.com -j DROP

Hors connexions sortantes :

iptables -A SORTIE -d 123.45.67.89 -j DROP

Les négatifs peuvent être utilisés dans les règles :

iptables -UNE ENTRÉE ! -s 123.45.67.89 -j DROP

Supprimer une règle par son numéro dans la chaîne :

iptables -D ENTRÉE 1

Supprimer une règle en fonction de ce qu'elle fait :

iptables -D INPUT -s 123.45.67.89 -j DROP

L'option -p indique le protocole. Vous pouvez utiliser all, icmp, tcp, udp, ou le numéro de protocole de /etc/protocoles. Drapeau - -sport indique le port à partir duquel le paquet a été envoyé, et - -dport spécifie le port de destination :

iptables -A ENTRÉE -p tcp --sport 80 -j ACCEPTER
iptables -A INPUT -p tcp --dport 80 -j ACCEPTER

Insérer une règle au début d'une chaîne :

iptables -I SAISIE ...

Ou vous pouvez spécifier une position spécifique :

iptables -I ENTRÉE 3 ...

iptables-save> / etc / iptables.rules

Règles de restauration :

iptables-restaurer< / etc/ iptables.rules

Voyons maintenant quelques exemples pratiques. Il s'agit par exemple de l'émulation d'un net split dans un test qui vérifie le comportement d'une application utilisant Akka Cluster :

exécuter (nœud1, s "iptables -A INPUT -s $ node2 -j DROP")
exécuter (nœud1, s "iptables -A INPUT -s $ node3 -j DROP")
exécuter (nœud1, s "iptables -A SORTIE -d $ node2 -j DROP")
exécuter (nœud1, s "iptables -A SORTIE -d $ node3 -j DROP")

La récupération est exactement la même, sauf que l'indicateur -A est remplacé par l'indicateur -D.

Un autre exemple. Il est nécessaire de savoir quels ports écoutent sur la machine et de fermer les ports supplémentaires. Nous allons à la voiture et disons :

netstat -tuwpln

Exemple de sortie :

Connexions Internet actives (serveurs uniquement)
Proto Recv-Q Send-Q Adresse locale Adresse étrangère État PID / Nom du programme
tcp 0 0 0.0.0.0:80 0.0.0.0:* ÉCOUTER 3210 / nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 1789 / epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 797 / sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 990 / postgres

Nginx et SSHd naviguent sur Internet, c'est bien. PostgreSQL n'écoute que l'interface locale, il n'y a donc aucun problème non plus. Mais l'epmd dépasse (vous pouvez le vérifier avec telnet à partir d'une autre machine), et ce n'est pas bon. Vous ne pouvez fermer que le port 4369. Comment faire cela a été montré ci-dessus. Ou vous pouvez aller encore plus loin et refuser toutes les connexions de l'extérieur vers le port 81 et plus ancien.

Vous avez aimé l'article ? A partager entre amis :