Le pare-feu Linux

Il existe plusieurs applications de pare-feu pour Linux, mais il est possible que vous ne réalisiez pas que, au cœur de tous ces programmes, se trouve une seule et même application puissante construite directement dans le noyau Linux: iptables. C'est le pare-feu Linux. Quel que soit le programme utilisé pour configurer votre pare-feu sous Linux, tout se résume finalement à iptables. Tout ce que font ces autres programmes est de le configurer.

Alors, voici la question: si ces programmes configurent simplement iptables, pourquoi ne pas simplement le configurer directement vous-même? C'est plus facile que vous ne le pensez!


Contexte de réseautage

Si vous connaissez les termes réseau, tels que connexions, IP, TCP et Port, n'hésitez pas à passer à l'étape suivante. Sinon, lisez ce qui suit pour vous familiariser avec les termes que vous aurez besoin de comprendre, afin de suivre ce didacticiel..

Veuillez noter que les termes et définitions ci-dessous ont été volontairement simplifiés à l'excès. Ils sont destinés aux utilisateurs quotidiens, pas aux administrateurs système. Donc, si vous êtes un administrateur système chevronné ou si vous avez un CCNA dans votre poche, veuillez m'excuser de ne pas entrer dans les détails..

TCP / IP

TCP / IP est un protocole qui permet aux ordinateurs de communiquer entre eux via des réseaux Internet et Ethernet.

L'échec est le dernier recours.

Imaginez un Réseau Ethernet en tant que petit réseau local (LAN - réseau local), comme votre ordinateur personnel, votre ordinateur portable et votre téléphone intelligent. C'est un petit réseau hétérogène isolé du reste du monde. Un réseau de tels réseaux est ce que nous savons tous comme le l'Internet: un ensemble de réseaux interconnectés.

TCP / IP est une combinaison de deux protocoles fonctionnant à différents niveaux de la hiérarchie de la chaîne de communication réseau. Nous n'entrerons pas dans les détails de cette hiérarchie. TCP représente Protocole de contrôle de transfert, et sa responsabilité principale est de s'assurer que la communication est réussie. Il contrôle l'exactitude des données envoyées et en assure le succès. Il a différents algorithmes pour effectuer des checksums sophistiqués, une correction automatique et de nouvelles tentatives. L'échec est le dernier recours. Le nom, IP vient du protocole Internet. Vous pouvez mieux l'associer au "numéro de téléphone" de votre PC. Chaque machine capable de communiquer sur Internet doit avoir une adresse IP - un numéro de téléphone unique - afin que les paquets de communication puissent trouver leur destination. UNE paquet est un petit morceau de données dans un flux de communication, qui est autonome et peut être vérifié pour son exactitude. En gros, nous pouvons dire que nos ordinateurs envoient des paquets TCP sur Internet en utilisant le protocole IP.

Chaque communication réseau est liée à un réseau spécifique. Port. Les ports réseau vont de 0 à 2 ^ 16 (65 536). Chaque connexion réseau possède un port sortant pour celui qui l'initie et un port entrant pour celui qui écoute les messages des autres ordinateurs. Il peut y avoir plusieurs connexions entre plusieurs ordinateurs sur des ports identiques. Un ordinateur peut toutefois utiliser plusieurs ports à la fois. Donc, fondamentalement, les ports sont utiles pour identifier les services et définir les canaux de communication, mais ils ne limitent pas la quantité de données ou de connexions..

Certains ordinateurs peuvent avoir des adresses IP similaires. Vous avez peut-être remarqué que votre ordinateur à la maison et au travail a une adresse IP qui prend la forme de quelque chose du genre: 192.168.quelque chose.quelque chose, ou 10.0 quelque chose, ou 172.16.quelque chose.quelque chose. Ce sont les adresses IP privées qui ne peuvent être utilisées que dans votre réseau local. Vous ne pouvez pas aller sur Internet avec des adresses IP comme celle-ci. Ils s'apparentent à des numéros intérieurs pour le réseau téléphonique de votre entreprise.

Passerelle et pont

UNE Pont est ce que les ordinateurs avec de vraies adresses IP (publiques) passent à Internet.

Essentiellement, ces ordinateurs ont les droits et les capacités nécessaires pour communiquer directement entre eux sur Internet. Mais, comme il n’existe aucune connexion directe entre tous les ordinateurs du monde (ce qui serait assez difficile à réaliser), les ponts sont responsables de la connexion des segments d’Internet..

En maintenant notre analogie avec la téléphonie, vous pouvez imaginer que ces ponts ressemblent aux centres téléphoniques de votre ville ou de votre quartier. Si vous appelez un autre numéro local (les ordinateurs à gauche dans notre schéma), la communication aurait pu être établie directement par votre centre téléphonique en connectant physiquement votre ligne à celle de votre voisin. Toutefois, si vous souhaitez plutôt appeler votre oncle Bob distant, votre appel devra être redirigé sur plusieurs centres téléphoniques jusqu'à ce que le téléphone de votre oncle puisse être connecté. Ceux-ci forment un pont entre ta ville et sa ville.

UNE passerelle permet aux ordinateurs d'un réseau privé (réseau local avec adresses IP privées) de communiquer avec d'autres ordinateurs sur Internet.

Un réseau privé est comparable au réseau téléphonique privé de votre entreprise. Vous pouvez appeler des numéros intérieurs, mais vous devez d'abord composer un numéro spécial ou un préfixe pour pouvoir appeler une personne extérieure au réseau de votre entreprise, comme votre femme à la maison..

Les ordinateurs fonctionnent de manière similaire. Lorsque vous êtes sur un réseau privé, vous avez un soi-disant ordinateur passerelle. Lorsque votre ordinateur tente de communiquer avec un autre ordinateur sur Internet, il automagiquement contactez d'abord la passerelle et demandez "une ligne" au monde extérieur. La passerelle fera la conversation avec l'ordinateur trouvé sur Internet et renverra le message vers votre ordinateur. En tant qu'utilisateur ordinaire, vous ne voyez aucune différence entre un pont et une passerelle. Votre ordinateur saura comment les gérer.


Définition d'un pare-feu

Un pare-feu est un programme fonctionnant sur une passerelle, un pont ou un ordinateur / ordinateur portable / un smartphone, capable de filtrer les paquets réseau entrants, sortants et transférés. Un pare-feu est essentiellement un outil qui vous permet de limiter l'accès de votre réseau à Internet, ainsi que l'accès de quelqu'un d'autre à votre réseau depuis Internet..

Et oui, votre routeur câble ou votre réseau Wi-Fi domestique est en fait un pare-feu pour tous vos ordinateurs et gadgets qui se connectent à Internet via ce dernier..


Le problème que nous allons résoudre

Pour définir le contexte, imaginons une architecture de réseau très possible. J'ai vu beaucoup de petites entreprises diriger quelque chose de similaire à cela.

Ce que nous avons ici est en réalité quelque chose d'assez simple:

  • Quelques ordinateurs et autres périphériques connectés au réseau - les boîtes vertes
  • Un serveur de messagerie - la boîte rouge
  • Un serveur Microsoft Active Directory - la boîte bleue
  • Une passerelle, qui est aussi un pare-feu, pour notre réseau fonctionnant sous Linux - la boîte noire
  • Entre tout cela, il y a un simple commutateur réseau

Dans la section suivante, nous allons configurer iptables sur cette passerelle, de sorte que tous les périphériques du réseau puissent se connecter à Internet. Cela nous permettra de nous y connecter, via SSH, et permettra aux serveurs de messagerie externes d’atteindre le serveur de messagerie situé sur notre réseau - un ordinateur qui n’a même pas d’adresse IP publique; seulement un privé.


Composants Iptables

Le nom d'Iptables a en réalité une signification dans ses fonctionnalités. C'est un ensemble de tables d'adresses IP et de ports avec des actions qui leur sont associées. En termes de iptable, ces tables sont appelées Chaînes. Un iptables vide et non configuré pourrait ressembler à ceci:

csaba ~ # iptables -L Chaîne INPUT (stratégie ACCEPT) destination cible de la source optionnelle chaîne chaîne FORWARD (stratégie ACCEPT) destination de la source cible optionnelle Chaîne OUTPUT (stratégie ACCEPT) destination de la source source optionnelle

Vous pouvez constater qu'il existe trois chaînes principales:

  • CONTRIBUTION - toutes les connexions entrantes
  • VERS L'AVANT - connexions passant par
  • SORTIE - connexions au départ de ce serveur

Le terme, "politique ACCEPTER"entre parenthèses signifie que ACCEPT est défini comme politique par défaut pour cette chaîne particulière. Ainsi, s’il n’ya pas de correspondance pour une connexion, cette règle sera appliquée. Vous pouvez utiliser trois concepts principaux lors de la configuration de votre pare-feu:

  • stratégie par défaut ACCEPTER et refuser sélectivement tout ce dont vous avez besoin - il peut être difficile de spécifier tout ce qui est refusé. Je ne recommande pas cette approche.
  • stratégie par défaut DROP ou REJECT & autoriser sélectivement tout ce dont vous avez besoin - c'est mieux, mais cela pose un problème. Si vous faites une erreur dans la configuration de votre iptables, vous pouvez facilement rester avec des chaînes vides interdisant l’accès à tout et à tous, y compris à vous. Donc, sauf si vous avez toujours un accès physique à votre serveur / ordinateur pare-feu, je vous recommande d'utiliser l'approche suivante..
  • stratégie par défaut ACCEPTER & une politique explicite pour tout supprimer & puis autoriser sélectivement tout ce dont vous avez besoin - c'est une solution combinée entre les deux premières possibilités. Il utilisera une stratégie par défaut ACCEPT. Ainsi, en cas de problème, vous pouvez vous reconnecter via SSH ou toute autre connexion distante que vous utilisez pour votre pare-feu. Dans le même temps, une règle DROP explicite pour toutes les connexions non appariées garantit votre sécurité. Autoriser uniquement ce que vous connaissez et dont vous avez réellement besoin est la meilleure protection possible.

Ajouter des règles à Iptables

Il existe deux façons d'ajouter une nouvelle règle à iptables. L'une consiste à l'insérer au début d'une chaîne. L'autre option consiste à l'ajouter à la fin d'une chaîne. Pourquoi est-il important dans quel ordre les règles se produisent?

Important: iptables vérifie les règles dans une chaîne de haut en bas. Il arrêtera sa recherche au premier match.

Vous devez concevoir vos règles de manière à prendre en compte le comportement susmentionné d’iptables. Après la première correspondance d'une règle, iptables prendra les mesures spécifiées par la règle, puis cessera la recherche. Si aucune règle ne correspond à la connexion vérifiée, la stratégie par défaut s'applique.

Insérer une nouvelle règle

Disons que nous voulons ajouter une règle à notre iptables qui permettra à quiconque de se connecter au port 22 de notre pare-feu. Le port 22 est le port pour le protocole SSH. Bien sûr, un bon administrateur de serveur changera ce port en quelque chose d’inattendu pour des raisons évidentes de sécurité / obscurité, mais c’est une autre histoire pour un autre tutoriel. Nous nous en tiendrons à 22.

csaba ~ # iptables -I INPUT -i eth0 -p tcp --dport 22 -j ACCEPTER csaba ~ # iptables -L Chaîne INPUT (stratégie ACCEPT) cible de protection source opt ACCEPT tcp - n'importe où n'importe où tcp dpt: ssh

J'ai présumé que l'adresse IP face à Internet avec l'adresse IP publique se trouve sur l'interface réseau, appelée eth0. Disséquons cette commande:

  • -je - signifie insérer la règle
  • CONTRIBUTION - spécifie la chaîne souhaitée
  • -je - signifie interface réseau - dans notre cas, eth0
  • -p - est pour protocole (TCP ou UDP)
  • --dport 22 - est pour le port de destination 22 - il a un correspondant --sport version pour la vérification du port source
  • -j - vient en fait de "sauter", et est suivie d'une action - dans notre cas, l'action d'accepter la connexion

Cependant, vous avez peut-être déjà deviné que cette règle a peu d’effet pour le moment. Notre politique par défaut est ACCEPT. Accepter quelque chose de manière explicite ne nous offre aucune fonctionnalité supplémentaire. Maintenant, rappelez-vous la troisième méthode recommandée pour configurer notre pare-feu: la règle explicite pour refuser tout ce qui ne correspond pas. Ajoutons cette règle.

Règles annexes

Nous voulons ajouter une règle qui bloque le trafic entrant. Mais faites attention: nous voulons seulement bloquer ce qui pourrait être nuisible. Si nous bloquons tout, nous ne pourrons rien faire, car les réponses à nos demandes seront rejetées. Par exemple, lorsque vous naviguez sur une page Web, vous faites une demande, puis vous recevez une réponse. Cette réponse vient dans votre ordinateur, donc, sur la chaîne INPUT, nous devons avoir une règle pour lui permettre.

Tout d'abord, nous allons annexer une règle d'acceptation du trafic entrant pour les connexions déjà établies, telles que les réponses aux demandes..

csaba ~ # iptables -A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED, CONNEXE -j ACCEPTER csaba ~ # iptables -L Chaîne INPUT (stratégie ACCEPT) cible de destination source opt ACCEPT tcp - n'importe où dcp tcp: ssh ACCEPT tout - n'importe où n'importe où ctstate LIÉ, ÉTABLI

Maintenant que nous avons protégé nos connexions existantes et les réponses aux connexions que nous avons établies, nous pouvons nier tout ce qui ne correspond pas..

csaba ~ # iptables -A INPUT -i eth0 -p tcp -j DROP csaba ~ # iptables -L Chaîne INPUT (stratégie ACCEPT) cible de la source de protection ACCEPT tcp - n'importe où n'importe où tcp dpt: ssh ACCEPTE tout - n'importe où ctstate DROP tcp CONNEXE ET ÉTABLI - n'importe où n'importe où

Nous avons ajouté une autre ligne, avec une règle pour supprimer toutes les connexions correspondantes. Rappelez-vous: cette règle ne s'appliquera que si aucune des précédentes ne correspond réellement.

Il y a deux façons de refuser une connexion.

  1. Vous pouvez utiliser DROP, ce qui revient à composer un numéro de téléphone inexistant, à la différence qu'après un certain temps, la connexion au réseau expire. Avec un numéro de téléphone, un robot vous informe que ce numéro n'existe pas. Mais le résultat final du point de vue de l'appelant est le même: il pense que la destination n'existe pas.
  2. La deuxième façon de refuser la connexion est d'utiliser la règle, REJECT et un message facultatif. Ceci est analogue au numéro que vous essayez d'appeler étant occupé. Vous savez peut-être qu'il existe un numéro, vous savez qu'il peut être appelé, mais il refuse simplement de prendre vos appels. Vous pouvez éventuellement fournir un message avec une règle REJECT; la valeur par défaut est "port ICMP inaccessible" ou quelque chose de similaire.

Autoriser les ordinateurs à accéder à Internet

À ce stade, nous avons quelques règles de base pour la chaîne INPUT. Mais nous avons un réseau d’ordinateurs ayant des adresses IP privées. Nous devons fournir une passerelle vers Internet. Ceci est également fait par iptables: le pare-feu.

Traduction d'adresses réseau (NAT)

Probablement, vous avez déjà entendu ce terme: NAT. Cela fait référence à la procédure de traduction d'une adresse réseau en une autre et de transmission des informations entre les deux. Il est le plus souvent utilisé dans des architectures comme la nôtre. La passerelle doit faire NAT pour traduire l’IP de n’importe quel ordinateur du LAN en son propre IP public, puis en retour..

Le routage est la procédure par laquelle un système peut déterminer sur quelles interfaces réseau et vers quelle passerelle il peut communiquer pour atteindre sa destination. Chaque ordinateur a sa propre table de routage pour le déterminer. Iptables peut se connecter à cette procédure de routage à deux endroits différents: avant et après la procédure.

Nating avec Iptables

csaba ~ # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 89.72.31.243

Cette commande ajoute une règle POSTROUTING à la table NATing (-t nat). POSTROUTING signifie essentiellement que les paquets passent d'abord par le mécanisme de routage sur la passerelle, et seulement après qu'ils sont modifiés. La règle -j SNAT signifie source NAT; l'adresse source des paquets sera remplacée par l'adresse de l'interface spécifiée par -o eth0 - dans notre cas, à l'adresse IP spécifiée par l'option, --pour citer. Ainsi, toute personne contactée par un ordinateur de votre réseau supposera qu’il parle directement à votre passerelle. Cela n'aura absolument aucune idée du fait que les paquets sont destinés à un autre ordinateur. La passerelle, en utilisant iptables, conservera une liste interne de toutes les adresses IP traduites et, lorsqu'une réponse sera renvoyée, elle annulera la modification et transmettra la réponse à l'ordinateur à l'intérieur du réseau..


Autoriser le client d'Internet vers le serveur de messagerie

Un autre problème auquel nous sommes confrontés est ce qu’il faut faire lorsque nous avons un serveur protégé par un pare-feu. Nous devons permettre aux clients, provenant d’Internet, de communiquer avec notre serveur d’une manière ou d’une autre. C'est le cas de notre serveur de messagerie. Lorsqu'un courrier électronique doit être remis à un compte de messagerie sur notre serveur, le serveur de messagerie expéditeur doit se connecter à notre destinataire..

Mais notre serveur de messagerie n'a qu'une adresse IP privée. Il n'y a aucun moyen qu'un ordinateur externe puisse s'y connecter directement. D'autre part, notre passerelle dispose d'une adresse IP externe à laquelle tout le monde peut se connecter. La solution? Ouvrez un port sur notre passerelle afin qu'une demande provenant d'Internet à destination de ce port soit effectivement envoyée à notre serveur de messagerie. La réponse, bien sûr, voyagera par la passerelle vers le client. L'astuce consiste à utiliser un type de NAT différent ici, appelé NAT de destination. Cela modifie la destination des paquets, puis les rétablit lorsque la réponse se produit. Considérez DNAT comme l'inverse de SNAT.

Pointe: Vous connaissez peut-être cette fonctionnalité sous le nom de "serveur virtuel" si vous avez déjà joué avec de petits routeurs domestiques.

csaba ~ # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 192.168.1.2:25

Alors, que se passe-t-il ici? Un paquet arrive sur notre passerelle au port 25 (le port utilisé pour SMTP, le protocole de messagerie utilisé par Internet dans son ensemble). La règle ci-dessus attrape ce paquet à cause de la --rapport 25 option, qui dit essentiellement, "Correspond à tout ce qui va à ce port sur l'interface spécifiée par -je eth0. Maintenant que le paquet correspond, changez sa destination de la machine actuelle (la passerelle) à celle spécifiée par --à destination."Veuillez noter que vous pouvez spécifier explicitement le port après l'adresse IP en le séparant par deux points..

Enfin, notez que ceci est dans le crochet PREROUTING. La destination doit être changée avant que le routage ait réellement lieu. Sinon, les paquets se retrouveraient sur la passerelle et ne trouveraient aucun moyen de parvenir au serveur de messagerie..


Configuration persistante d'iptables

Les règles que vous insérez ou ajoutez à iptables sont en mémoire. Après un redémarrage, parodie: tout est parti! Pour enregistrer votre configuration, vous devez la sauvegarder dans un fichier, comme suit:

csaba ~ # iptables-save> /some/directory/my_rules.fw

Le nom du fichier n'a pas d'importance, pas plus que son extension. Pour restaurer les règles, exécutez cette commande au démarrage de votre ordinateur..

iptables-restor < /some/directory/my_rules.fw

Si vous regardez le contenu enregistré, vous verrez qu'il s'agit des mêmes paramètres que ceux que nous avons utilisés avec les commandes iptables. Il y a quelques différences mineures, mais vous pouvez facilement comprendre le fichier sauvegardé et même écrire à la main vos propres fichiers et les charger.


Dernières pensées

En conclusion, voici quelques réflexions sur quand et quand ne pas utiliser un pare-feu avec un ordinateur Linux.

Utilisez un pare-feu sous Linux lorsque vous configurez un serveur (comme une passerelle dans notre exemple) ou lorsque vous disposez d'un ordinateur contenant des informations importantes directement exposé à Internet. Avant de vous lancer dans la configuration de votre iptables, considérez le danger potentiel. Demandez-vous: mon ordinateur est-il connu sur Internet? Il y a quelques milliards d'ordinateurs sur le marché. Si le vôtre n’en est qu’un, les chances d’être ciblé sont incroyablement faibles. Y a-t-il des personnes directement intéressées par vos informations? Les pirates informatiques ne perdent pas de temps à voler des données aléatoires dans l'espoir de trouver quelque chose. Ils savent généralement ce qu'ils recherchent, puis ciblent les ordinateurs contenant les informations souhaitées. Bien sûr, il existe d'innombrables attaques contre des ordinateurs aléatoires qui tentent d'installer un ver ou un virus, mais sous Linux, vous êtes immunisé par sa conception..

Ne perdez pas votre temps avec la configuration d’un pare-feu sous Linux quand il s’agit d’un ordinateur toujours derrière un pare-feu, tel que votre ordinateur personnel derrière votre routeur domestique, ou lorsque vous n’avez aucune information particulièrement importante sur votre ordinateur portable. Si vous minimisez le nombre de services d'écoute sur le réseau et que vous disposez d'un mot de passe suffisamment sécurisé, vous pouvez oublier votre pare-feu. Personnellement, je n'ai pas d'ordinateur personnel, d'ordinateur portable ou de smartphone avec un pare-feu actif. J'ai cependant un routeur domestique avec un pare-feu bien configuré.

Je pense que vous pouvez également appliquer ces idées à Mac OSX en toute sécurité. Si vous êtes un utilisateur Windows, désolé: un pare-feu est votre première ligne de défense. Pour Linux ou MacOSX, un pare-feu est votre dernière ligne de défense. Un mot de passe choisi avec soin et ne faisant pas appel à des services inutiles devrait gérer l'essentiel de la protection de votre ordinateur.

Merci d'avoir lu. Des questions?