iptables pour les débutants, curieux, intéressés (2ème partie)

Quand DesdeLinux Je n'avais que quelques mois et j'ai écrit un tutoriel extrêmement simple à comprendre sur iptables : iptables pour les débutants, curieux, intéressés (1ère partie) . À l'aide de métaphores telles que comparer notre ordinateur avec notre maison, notre pare-feu avec la porte de la maison, ainsi que d'autres exemples, j'ai expliqué de manière ludique, sans tant de technicité ni de concepts compliqués, ce qu'est un pare-feu, ce qu'est iptables et comment commencer à l'utiliser et le configurer. C'est la suite, la 2ème partie du précédent tutoriel iptables 🙂

Il arrive qu'il y a quelques jours en utilisant un Linksys AP (Access Point) j'ai mis un Wifi chez ma copine, bien que la localité ne soit pas la plus informée en termes de technologie, c'est-à-dire qu'il n'y a pas beaucoup de dangers de fissuration , c'est toujours une bonne idée d'avoir une excellente sécurité à la fois dans le Wifi et dans les ordinateurs.

Je ne commenterai pas ici la sécurité du Wifi, car ce n'est pas l'objectif du post, je me concentrerai sur la configuration iptables que j'utilise actuellement sur mon ordinateur portable.

Les commandes suivantes sont exécutées dans un terminal, elles doivent être exécutées avec des privilèges d'administrateur, je vais ajouter sudo à chaque commande, vous pouvez faire de même ou éviter d'utiliser sudo en exécutant les commandes directement en tant que root

Dans le post précédent j'avais expliqué qu'il est nécessaire dans un pare-feu de refuser d'abord tout le trafic entrant, pour cela:

sudo iptables -P INPUT DROP

Ensuite, nous devons autoriser notre propre ordinateur à entrer des données:

sudo iptables -A INPUT -i lo -j ACCEPT

En plus d'accepter des paquets de requêtes provenant de notre ordinateur:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Pour une meilleure compréhension de ces lignes, je recommande de lire la première moitié de l'article précédent: iptables pour les débutants, curieux, intéressés (1ère partie)

Jusqu'à présent, notre ordinateur peut naviguer sur Internet sans problème, mais personne d'un autre environnement (LAN, Internet, Wifi, etc.) ne pourra accéder à notre ordinateur de quelque manière que ce soit. Nous allons commencer à configurer iptables en fonction de nos besoins.

Utilisation d'ulogd pour générer les journaux iptables dans un autre fichier:

Par défaut, les journaux iptables vont dans le noyau, le journal système ou quelque chose comme ça ... dans Arch par défaut, pour le moment, je ne me souviens même pas où ils vont, c'est pourquoi j'utilise ulogd afin que les journaux iptables soient dans un autre fichier.

sudo iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ULOG

Donner accès à mon serveur privé:

Je n'utilise pas VirtualBox ou quelque chose de similaire à virtualiser, j'ai mon serveur privé virtualisé avec Qemu + KVM qui doit pouvoir se connecter à mon ordinateur portable en tant que tel, avec les règles iptables que je viens de spécifier ci-dessus, il ne le pourra pas, c'est pourquoi je dois donner la permission à l'IP de mon serveur virtuel pour qu'il puisse accéder à mon ordinateur portable :

sudo iptables -A INPUT -i virbr0 -p tcp -s 192.168.122.88 -j ACCEPT

Nous allons détailler cette ligne, il est important que vous compreniez ce que signifie chaque paramètre, car ils seront beaucoup répétés à partir de maintenant:

-UNE ENTRÉE : Je dis que je vais déclarer une règle pour le trafic entrant

-je virbr0 : Je déclare que l'interface par laquelle j'accepterai le trafic n'est pas etho (LAN) ou wlan0 (Wifi), je dis spécifiquement que c'est mon interface virbr0, c'est-à-dire l'interface réseau virtuelle (interne) à travers laquelle mon ordinateur portable communique avec mon serveur virtuel (et vice versa)

-p TCP : Je précise le protocole, les plus utilisés sont UDP et TCP, ici il suffisait vraiment de ne pas mettre ça mais ... il est d'usage de préciser le type de protocole à accepter

-s 192.168.122.88 XNUMX : La source, source des paquets. Autrement dit, la règle se réfère aux paquets qui proviennent spécifiquement de l'IP 192.168.122.88

-j ACCEPTER : Déjà ici je dis ce que je veux faire avec les packages qui correspondent à ce qui précède, dans ce cas accepter.

En d'autres termes, en résumé, je vais accepter les paquets qui proviennent de l'IP 192.168.122.88, mais au cas où vous voudriez entrer des paquets qui proviennent de cette IP MAIS! Ils entrent depuis une interface qui n'est pas virbr0, c'est-à-dire qu'ils essaient de saisir des paquets de l'IP 192.168.122.88 mais ils proviennent d'un ordinateur de notre réseau Wifi, si tel est le cas, les paquets seront rejetés. parce que? Parce que nous spécifions clairement que oui, nous acceptons les paquets de 192.168.122.88 oui, mais et seulement mais, ils doivent également entrer depuis l'interface virbr0 (interface réseau interne virtuelle), si les paquets proviennent d'une autre interface (LAN, RAS, Wifi, etc.) alors ils ne seront pas acceptés. En spécifiant l'interface, comme vous pouvez le voir, nous pouvons la restreindre encore plus, nous pouvons avoir un meilleur contrôle sur ce qui entre (ou n'entre pas) dans notre ordinateur.

Accepter le ping depuis n'importe quelle adresse IP du Wifi domestique:

À partir d'un autre ordinateur qui se connecte au Wifi, si vous essayez d'envoyer une requête ping à mon ordinateur portable, je veux l'autoriser. raison? L'idée est aussi que dans les prochaines semaines pour relier le PC de la maison voisine au réseau, donc le partage d'informations serait moins complexe, plus fluide, quand je commencerai à faire des tests pour relier le bureau au Wifi, je le ferai besoin de cingler mon ordinateur portable pour vérifier la connectivité, si mon ordinateur portable ne me répond pas, je peux penser que l'AP échoue, ou qu'il y a eu une erreur lors de l'accès au Wifi, c'est pourquoi je veux autoriser le ping.

sudo iptables -A INPUT -i wlo1 -p icmp -s 192.168.1.0/24 -d 192.168.1.51 -j ACCEPT

-UNE ENTRÉE : Comme avant, je fais référence au trafic entrant

-je wlo1 : Similaire à avant. Dans le cas précédent j'ai spécifié l'interface virtuelle, dans ce cas je spécifie une autre interface, celle de mon wifi: wlo1

-p icmp : Protocole Icmp, icmp = ping. Autrement dit, je n'autorise pas SSH ou quelque chose de similaire, je n'autorise que le ping (icmp)

-s192.168.1.0/24 : La source des paquets, c'est-à-dire tant que les paquets proviennent d'un IP 192.168.1.? sera accepté

-d 192.168.1.51 : IP de destination, c'est-à-dire mon IP.

-j ACCEPTER : J'indique quoi faire avec les paquets qui correspondent à ce qui précède, acceptez.

Autrement dit, et pour expliquer cela de manière courante, j'accepte qu'ils me cinglent (protocole icmp) dont la destination est spécifiquement mon IP, tant qu'ils proviennent d'une IP telle que 192.168.1 .__ mais aussi, ils ne peuvent pas venir depuis n'importe quelle interface réseau, ils doivent entrer spécifiquement depuis mon interface réseau Wifi (wlo1)

Acceptez SSH uniquement pour une adresse IP:

Parfois, j'ai besoin de me connecter par SSH depuis mon smartphone pour contrôler l'ordinateur portable, c'est pourquoi je dois autoriser l'accès SSH à mon ordinateur portable depuis les IP de mon Wifi, pour cela:

sudo iptables -A INPUT -i wlo1 -p tcp -s 192.168.1.0/24 -d 192.168.1.51 --dport 22 -j ACCEPT

La seule chose différente de cette ligne ou qui mérite d'être soulignée est: –Dport 22 (Port SSH que j'utilise)

En d'autres termes, j'accepte les tentatives de connexion à mon ordinateur portable via le port 22, tant qu'elles proviennent d'une IP de mon wifi, elles doivent également avoir mon IP comme destination spécifique et également passer par l'interface wlo1, c'est-à-dire celui de mon wifi (pas celui du réseau local, etc.)

Leur permettre de consulter votre site Web:

Ce n'est pas mon cas, mais si l'un d'entre vous a un site Web hébergé et ne veut pas refuser l'accès à qui que ce soit, c'est-à-dire que tout le monde de n'importe où peut accéder à ce site Web, c'est beaucoup plus simple que vous ne le pensez:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

En d'autres termes, ici, ils autorisent tout le trafic entrant (tcp) via le port 80. Comme vous pouvez le voir, je ne spécifie pas à partir de quelles adresses IP ou réseau j'autorise l'accès, en ne spécifiant pas de plage IP à autoriser, iptables suppose que je veux pour permettre l'accès à toutes les plages IP existantes, c'est-à-dire au monde entier 🙂

Autres combinaisons:

J'ai de nombreuses autres règles telles que, par exemple, accepter le ping pour les IP de mon LAN domestique (pour cela, il s'agit essentiellement de la même ligne que ci-dessus, en changeant les plages d'adresses IP), ce qui est plus ou moins le même que je viens d'expliquer ci-dessus. .dans mon ordinateur portable en tant que tel je n'utilise pas de choses vraiment complexes, celle de limiter les connexions, anti DDoS, je laisse ça pour les serveurs, sur mon ordinateur portable je n'en ai pas besoin 🙂

Quoi qu'il en soit, jusqu'à présent l'article.

Comme vous pouvez le voir, travailler avec iptables n'est en aucun cas si complexe, une fois que vous créez un script dans lequel vous écrivez vos règles, c'est très simple, puis modifiez-le, ajoutez ou supprimez des règles à votre pare-feu.

Je ne me considère pas comme un expert en la matière loin de là, malgré les doutes que vous pourriez avoir, commentent-ils ici, je vais essayer de vous aider autant que je peux.

salutations


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   risquer dit

    Très bien, très bien expliqué, super.
    J'adore ce type de message.

    1.    KZKG ^ Gaara dit

      Merci beaucoup pour vos commentaires 🙂

      Ce poste était une dette que j'avais depuis longtemps, c'est agréable et agréable au final de pouvoir le rembourser ^ _ ^

      salutations

      1.    FIXOCONNE dit

        une question êtes-vous à cuba?
        … Il arrive qu'il y a quelques jours en utilisant un Linksys AP (Access Point) j'ai mis un Wifi chez ma copine

        1.    KZKG ^ Gaara dit

          Oui bien sûr, je suis né et je vis à Cuba. pourquoi la question?

        2.    Sam burgos dit

          @FIXOCONN: Bonjour ami et pardonnez le hors-sujet de la question, mais comment définissez-vous Cinnamon pour apparaître comme un environnement de bureau dans l'agent utilisateur? J'utilise Mint 13 avec Cinnamon, mais en aucun cas le logo Cinnamon n'apparaît dans mon user-agent à chaque fois que je commente ce site

          Auriez-vous l'amabilité de me transmettre vos coordonnées d'agent utilisateur si ce n'est pas trop compliqué? J'aimerais connaître ces données pour les placer moi-même =)

          Je vous laisse une page pour que vous puissiez l'examiner et me donner les informations. Merci et admins, pardonnez le "trolling" (si vous pouvez l'appeler ainsi) de ma part avec cette information -> http://user-agent-string.info/

          1.    KZKG ^ Gaara dit

            Ajoutez "Cinnamon" (sans les guillemets) à n'importe quelle partie de UserAgent, puis le logo devrait apparaître dans les prochains commentaires 🙂

  2.   Bruno cascio dit

    Très bon le post! très clair 😀

    1.    KZKG ^ Gaara dit

      Merci d'avoir lu et merci pour votre commentaire 🙂

  3.   vallée dit

    Merci, ça m'aide vraiment!

  4.   Oscar Grenade dit

    Bonjour, tout d'abord bravo pour le blog, je trouve que c'est super.
    Il serait peut-être bon de mentionner que l'option de connexion avec ULOG ne fonctionne pas dans les systèmes d'exploitation qui ont ulogd2, dans ce cas, la règle devrait être:
    sudo iptables -A INPUT -p tcp -m tcp –tcp-flags FIN, SYN, RST, ACK SYN -j NFLOG

    1.    KZKG ^ Gaara dit

      Tout d'abord, merci beaucoup pour ce que vous dites sur le blog 🙂

      Dans Arch, j'ai installé ulogd v2.0.2-2, et la ligne que j'ai mise fonctionne sans problème (j'ai dû mettre un loglevel = 1 dans /etc/ulogd.conf, mais cela prend les journaux dans un autre fichier sans problème.

      Utilisez-vous ulogd v2 ou supérieur, la ligne que j'ai laissée fonctionne-t-elle mal pour vous?

      Cordialement et merci pour vos commentaires.

  5.   Ciux dit

    J'attendais toujours la deuxième partie, je me souviens quand j'ai lu la première (c'était mon initiation aux pare-feu). Merci @ KZKG ^ Gaara, salutations 🙂

    1.    KZKG ^ Gaara dit

      Merci de me lire 😀
      Et hehe oui, ce que j'ai dit ... ce post était une dette que j'avais il y a longtemps ^ _ ^

  6.   José Luis Gonzalez dit

    Cordialement. Très bien le poste. J'essaie de configurer les règles iptables pour rediriger le trafic de squid vers dansguardian et cela n'atteint toujours pas l'objectif. J'apprécierais de l'aide à cet égard.

    1.    KZKG ^ Gaara dit

      iptables pour ça? N'est-ce pas fait directement avec les ACL dans Squid?

  7.   sans nom dit

    "J'ai beaucoup d'autres règles comme .."
    C'est ce que j'appelle la paranoïa, garçon
    Un peu plus et vous mettez un pack de Rotwailer dans chaque port ouvert de votre modem / routeur 🙂

    1.    KZKG ^ Gaara dit

      HAHAHAHAHAHAHAHAHA Je meurs de rire avec les rottwailers hahahaha

  8.   Ivan dit

    Salutations ami, il arrive que j'ai besoin d'aide pour configurer IPTables de telle manière qu'il refuse l'accès uniquement pour le port 80 lorsque je tape l'adresse dans le navigateur de mes serveurs de noms personnalisés, c'est-à-dire lorsque je tape par exemple ns1.mydomain.com et ns2.mydomain. com (qui sont mes serveurs de noms) IPtables refuse l'accès au port 80 afin que le navigateur essaie de charger la page mais après un certain temps, elle expire et ne se charge jamais, il se trouve que j'ai déjà essayé avec des commandes comme celle-ci:

    iptables -A INPUT -d ns1.midomini.com -p tcp –dport 80 -j DROP
    iptables -A INPUT -d ns2.midomini.com -p tcp –dport 80 -j DROP

    Mais la seule chose qu'il fait est de refuser l'entrée au port 80 dans tous mes domaines (car ils partagent la même IP que Virtual Host), je veux que ce soit uniquement dans l'url de mes serveurs de noms et l'adresse IP vers laquelle mes serveurs de noms pointent, autrement dit, les tables IP refusent l'accès au port 80 dans:

    ns1.midomini.com (pointant A) -> 102.887.23.33
    ns2.midomini.com (pointant A) -> 102.887.23.34

    et les adresses IP vers lesquelles les serveurs de noms pointent

    102.887.23.33
    102.887.23.34

    Un exemple d'entreprise qui a ce système est: Dreamhost
    Leurs serveurs de noms: ns1.dreamhost.com et ns2.dreamhost.com et les adresses IP qu'ils indiquent ne répondent pas lorsqu'ils sont saisis dans la barre d'adresse du navigateur

    Merci d'avance pour votre attention, j'aimerais beaucoup que vous me donniez un coup de main, j'en ai vraiment besoin et de toute urgence !!

    Bonjour !!

    1.    KZKG ^ Gaara dit

      Bonjour Ivan,

      Contactez-moi par email (kzkggaara[at]desdelinux[dot]net) pour en parler plus calmement et mieux l'expliquer, demain sans faute je te répondrai (aujourd'hui je passe par là)

      Ce que vous voulez faire est simple, je ne sais pas pourquoi les lignes que vous me dites ne fonctionnent pas pour vous, elles devraient le faire, mais vous devez vérifier les journaux et autres choses qui seraient trop longues ici.

      Salutations et j'attends votre email

  9.   neysonv dit

    théoriquement avec iptables, je pourrais éviter de recevoir des demandes de déconnexion de programmes comme aircrack. je suis juste??? Eh bien, je vais faire des tests, mais si vous me dites que vous me rendriez très heureux

    1.    KZKG ^ Gaara dit

      En théorie, je pense que oui, maintenant, je ne sais pas comment cela pourrait être fait, je ne l'ai jamais fait ... mais je le répète, en théorie, je pense que cela pourrait.

  10.   Alex dit

    Après avoir appliqué les règles iptables, il m'est impossible d'accéder aux dossiers Windows partagés sur le réseau local. Quelle règle dois-je appliquer pour y remédier?
    Merci.

    1.    KZKG ^ Gaara dit

      Quelles règles iptables avez-vous appliquées?
      C'est la 2ème partie de "iptables pour les débutants", avez-vous lu la première? Je demande cela pour savoir si vous avez appliqué les règles qui figuraient dans le post précédent

      1.    Alex dit

        Oui, j'ai lu les deux parties. Pour le script, je me base sur un autre article que vous avez publié sur les règles de démarrage avec systemd.

        #! / Bin / bash
        # - UTF 8 -

        # Iptables binaire
        iptables = »/ usr / bin / iptables»

        chassèrent ""

        ## Effacer les tableaux ##
        $ iptables -F
        $ iptables -X
        $ iptables -Z
        #echo »- Fait FLUS vers iptables» && echo »»

        ## Établissement de journaux avec ULOGD ##
        $ iptables -A INPUT -p tcp -m tcp –tcp-flags FIN, SYN, RST, ACK SYN -j ULOG

        ## Définir la stratégie DROP par défaut ##
        $ iptables -P DROP D'ENTREE
        $ iptables -P DROP FORWARD
        #echo »- Politique DROP définie par défaut» && echo »»

        ## Autoriser tout sur localhost ##
        $ iptables -A INPUT -i lo -j ACCEPTER
        $ iptables -A OUTPUT -o lo -j ACCEPTER
        #echo »- Autorisé pour localhost» && echo »»

        ## Permettre d'entrer des paquets de connexions que j'initialise ##
        $ iptables -A INPUT -m état –état ESTABLISHED, ASSOCIÉ -j ACCEPTER
        #echo »- Autoriser les paquets de connexions initiées par moi» && echo »»

        chassèrent " ##############################"
        echo »## IPTABLES CONFIGURÉ OK! ## »
        chassèrent " ##############################"

        J'ai lu sur Internet que pour la samba, vous devriez avoir les règles suivantes dans le script:

        $ iptables -A INPUT -p tcp –dport 139 -j ACCEPTER
        $ iptables -A INPUT -p tcp –dport 445 -j ACCEPTER
        $ iptables -A INPUT -p udp –sport 137 -j ACCEPTER
        $ iptables -A INPUT -p udp –dport 137 -j ACCEPTER
        $ iptables -A INPUT -p udp –dport 138 -j ACCEPTER

        Cependant, même avec eux, je ne peux pas voir les groupes de travail Windows. : S

      2.    Alex dit

        Problème résolu. Modifiez le groupe de travail et les hôtes autorisent les paramètres dans le fichier de configuration de samba.

  11.   otkmanz dit

    Excellent article, tout simplement génial !!!!
    Je viens de le lire et j'aime à la fois la façon dont vous l'expliquez et l'utilisation vraiment utile d'iptables, j'aimerais vraiment apprendre à l'utiliser plus en profondeur.
    Salutations et excellent article, j'espère que vous en publierez plus sur Iptables! ^^

  12.   LION dit

    Chère;

    J'ai un proxy avec iptables et l'un de mes réseaux ne peut pas cingler http://www.google.cl pour cette raison, j'ai les ports bloqués et j'essaye mille façons d'ouvrir les ports et rien ne se passe. Si je ne peux pas cingler, je ne peux pas connecter Outlook

  13.   Borja dit

    Félicitations pour le message! Très bon. Mais j'ai une question. Parfois, l'adresse IP qui vous est attribuée dans le réseau peut changer (s'il est vrai que nous pourrions attribuer une adresse IP à nos adresses MAC), mais existe-t-il une possibilité avec Iptables d'autoriser l'accès à notre serveur via SSH par adresse MAC?

    J'espère que je me suis bien expliqué.

    Une salutation et merci beaucoup!

  14.   Fernando Martín Gan dit

    Salut, vous savez que j'avais un serveur linux configuré et après avoir mis ces commandes, j'ai tout bloqué et perdu l'accès, je pourrais récupérer presque tout mais il me manque 2 choses. * Je ne peux plus accéder depuis un navigateur web via le cname «serveur» si par ip, 10.10.10.5 et par contre je ne vois pas les ressources partagées de l'explorateur windows sur le réseau, avant de mettre \\ serveur et J'ai vu toutes les ressources partagées. J'espère que tu peux m'aider, je sais que c'est idiot mais je ne peux pas le résoudre, merci

  15.   tau dit

    Je cite textuellement:
    »
    Protocole Icmp, icmp = ping. Autrement dit, je n'autorise pas SSH ou quelque chose de similaire, je n'autorise que le ping (icmp)
    »

    ICMP et PING ne sont pas les mêmes. Le ping fait partie du protocole ICMP, mais ce n'est pas tout. Le protocole ICMP (Internet Control Message Protocol) a beaucoup plus d'utilisations, certaines avec certains dangers. Et vous acceptez tout le trafic ICMP. Vous auriez à vous limiter uniquement au ping.

    Saludos!

  16.   ozkr dit

    Je dois faire un stage mais je ne comprends pas grand-chose à iptables, pourriez-vous s'il vous plaît m'aider….
    Merci!!!!!!!