Créez votre propre pare-feu avec iptables en utilisant ce script simple

J'ai passé un certain temps à réfléchir à deux choses à propos de cet iptables: la plupart de ceux qui recherchent ces tutoriels sont des débutants et deuxièmement, beaucoup recherchent déjà quelque chose d'assez simple et déjà élaboré.

Cet exemple concerne un serveur Web, mais vous pouvez facilement ajouter d'autres règles et les adapter à vos besoins.

Lorsque vous voyez "x" changer pour votre adresse IP


#!/bin/bash

# Nous nettoyons les tables iptables -F iptables -X # Nous nettoyons NAT iptables -t nat -F iptables -t nat -X # mangle table pour des choses comme PPPoE, PPP et ATM iptables -t mangle -F iptables -t mangle -X # Politiques Je pense que c'est le meilleur moyen pour les débutants et # toujours pas mal, je vais vous expliquer la sortie (sortie) tout parce que ce sont des connexions sortantes #, l'entrée nous supprimons tout, et aucun serveur ne doit transférer. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Conserver l'état. Tout ce qui est déjà connecté (établi) est laissé comme ceci: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, nous ne spécifions pas l'interface car # nous voulons qu'elle soit tous iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh uniquement en interne et à partir de cette plage d'iptables d'ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # surveillance par exemple s'ils ont zabbix ou un autre service snmp iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPTER # icmp, ping bien c'est à vous iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPTER #mysql avec postgres est le port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPTER #sendmail bueeeh si vous voulez envoyer du courrier #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - le vrai wan ip de votre serveur LAN_RANGE = "192.168.xx / 21" # LAN range de votre réseau ou de vos # Ip vlan qui ne doivent jamais entrer dans l'extranet,est d'utiliser un peu de # logique si nous avons une interface purement WAN, il ne faut jamais entrer de trafic de type LAN via cette interface SPOOF_IPS = "0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 / 16 "# Action par défaut - à effectuer lorsqu'une règle correspond à ACTION =" DROP "# Paquets avec la même adresse IP de mon serveur via le wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paquets avec la plage LAN pour le wan, je le mets comme ceci au cas où vous auriez # un réseau particulier, mais c'est redondant avec la règle # suivante dans la boucle " pour "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Tous les réseaux SPOOF non autorisés par le wan pour ip dans $ SPOOF_IPS faire iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION terminé

Comme toujours j'attends vos commentaires, restez à l'écoute dans ce blog, merci


12 commentaires, laissez le vôtre

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.   HO2Gi dit

    Cela m'aide à continuer à apprendre un peu plus grâce copié.

    1.    Brody Dalle dit

      vous êtes le bienvenu, heureux de vous aider

  2.   Xavier dit

    Je suis vraiment désolé, mais j'ai deux questions (et une en cadeau 😉):

    Arriveriez-vous avec cette configuration pour qu'Apache fonctionne et ferme le reste sauf SSH?

    #Nous nettoyons les tables
    iptables -F
    iptables -X

    Nous nettoyons NAT

    iptables -t nat -F
    iptables -t nat -X

    iptables -A INPUT -p tcp –dport 80 -j ACCEPTER

    ssh uniquement en interne et à partir de cette gamme d'adresses IP

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j ACCEPTER

    Deuxième question: 7659 est-il le port utilisé en SSH dans cet exemple?

    Et troisième et dernier: dans quel fichier cette configuration doit-elle être enregistrée?

    Merci beaucoup pour le tutoriel, c'est dommage que vous soyez un débutant et que vous ne puissiez pas bien l'utiliser.

    1.    Brody Dalle dit

      c'est la règle dont vous avez besoin pour http depuis apache
      iptables -A INPUT -p tcp –dport 80 -j ACCEPTER

      mais vous devez également déclarer les politiques de dépôt par défaut (c'est dans le script)
      iptables -P BAISSE D'ENTRÉE
      iptables -P OUTPUT ACCEPT
      iptables -P DROP FORWARD

      et cela parce que si vous êtes éloigné, cela vous jettera.
      iptables -A INPUT -m state -state ESTABLISHED, RELATED -j ACCEPT

      si 7659 est le port de ce ssh dans l'exemple, il est par défaut 22, bien que je vous recommande de changer pour un port "pas bien connu"
      mec je ne sais pas, comme tu veux ... firewall.sh et tu le mets dans rc.local (sh firewall.sh) pour qu'il s'exécute automatiquement, cela dépend du système d'exploitation que tu as, il y a des fichiers où tu peux mettre les règles directement.

  3.   jge dit

    Hé, votre script est très bon, en l’analysant… Savez-vous comment je pourrais refuser toutes les requêtes de mes utilisateurs à un site Web spécifique?…. mais ce site Web a beaucoup de serveurs….

    1.    Brody Dalle dit

      Je recommande d'autres options:
      1) Vous pouvez créer une fausse zone dans votre DNS ...
      2) Vous pouvez placer un proxy avec acl
      cependant
      Pour iptables, vous pouvez aimer ça ... ce n'est pas toujours la meilleure option (il y a plus de façons)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A OUTPUT -d blog.desdelinux.net -j DROP

      Dis moi si ça a marché

  4.   Xavier dit

    Merci pour la réponse, tout s'est éclairci. Je posais des questions sur le port parce que j'ai été surpris d'utiliser le 7659, puisque les ports privés démarrent dans le 49152, et cela pourrait interférer avec un service ou quelque chose.
    Encore une fois, merci pour tout, c'est sympa!

    Salutations.

  5.   sic dit

    BrodyDalle, comment puis-je vous contacter? Très intéressant votre script.

  6.   Carlos dit

    L'avant dernière ligne "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" sert à empêcher l'usurpation de votre propre machine? Ou est-il possible qu'un paquet empoisonné entre et puisse repartir avec cette source empoisonnée et c'est pourquoi la règle est également incluse avec OUTPUT?
    Merci beaucoup pour la clarification !!!

  7.   fran dit

    c'est mon propre script iptables, il est très complet:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables pour l'héritage et pour nft
    #
    # ports de pare-feu
    ##########################
    #! / Bin / bash
    #
    # effacer l'écran
    ############################# début de /etc/f-iptables/default.cfg |||||
    clair
    # laisser une ligne vide
    echo
    export oui = »» non = »écho désactivé»
    # les variables que vous pouvez modifier pour autoriser l'accès
    ##################### variables à modifier avec $ yes ou $ no
    export hayexcepciones = »$ non»
    # il y a des exceptions: $ yes pour autoriser les hôtes exceptionnels et $ no pour désactiver
    export hayping = »$ non»
    # hayping: $ yes pour autoriser les pings tiers et $ no pour refuser
    export haylogserver = »$ non»
    # haylogeosserver: $ yes pour pouvoir enregistrer tcp $ no pour ne pas pouvoir enregistrer tcp
    ######
    ##################### variables à modifier en ajoutant "," ou avec des plages de ":"
    exceptions d'exportation = »baldras.wesnoth.org»
    # exceptions autorisent un ou plusieurs hôtes du pare-feu ou aucune valeur
    export logserver = supprimer, ipp, dict, ssh
    # ports de serveur TCP qui sont enregistrés lorsque les paquets arrivent
    export redserver = 0/0
    # redserver: le réseau pour les ports du serveur réseau local préférable ou plusieurs ips
    client d'exportation rouge = 0/0
    # clientnet: le réseau pour les ports clients préférable à tous les réseaux
    export servidortcp = ignorer, ipp, dict, 6771
    # servidortcp: les ports de serveur tcp spécifiés
    export serverudp = supprimer
    #udpserver: les ports de serveur udp spécifiés
    export clientudp = domaine, bootpc, bootps, ntp, 20000: 45000
    #udp client: les ports client udp spécifiés
    export clienttcp = domaine, http, https, ipp, git, dict, 14999: 15002
    # tcp client: les ports client tcp spécifiés
    ########################### fin de /etc/f-iptables/default.cfg |||||
    ############################## fin des variables à modifier
    pare-feu d'exportation = 1 $ variables = 2 $
    if ["$ variables" = "$ NULL"]; puis source /etc/f-iptables/default.cfg;
    autre source / etc / f-iptables / $ 2; Fi
    ############################# ou écrasera les variables avec un fichier .cfg
    ################################################ #######################################
    pare-feu d'exportation = 1 $ variables d'exportation = 2 $
    ######################################## variables système automatiques
    if ["$ firewall" = "déconnecté"]; puis echo FIREWALL DISCONNECTED;
    export activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; then echo FIREWALL CLIENT;
    export activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "serveur"]; puis echo FIREWALL SERVER;
    export activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client et serveur"]; puis echo FIREWALL CLIENT AND SERVER;
    export activer le serveur = »»; export activateclient = »»; export wet = »$ no»;
    elif ["$ firewall" = "permissif"]; puis echo PARE-FEU PERMISSIF;
    export activateserver = »$ no» activateclient = »$ no» wet = »»;
    d'autre
    $ check sudo echo iptables-legacy:
    $ check sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L OUTPUT
    $ check sudo echo iptables-nft:
    $ vérifier sudo iptables-nft -v -L INPUT
    $ check sudo iptables-nft -v -L SORTIE
    echo _____paramètres____ $ 0 $ 1 $ 2
    echo "cast sans paramètres est de lister iptables."
    echo "Le premier paramètre (activer iptables): déconnecté ou client ou serveur ou client et serveur ou permissif."
    echo "Le second paramètre: (optionnel): le fichier default.cfg choisit /etc/f-iptables/default.cfg"
    echo "Paramètres des variables:" $ (ls / etc / f-iptables /)
    sortie 0; Fi
    #################
    echo
    echo Lance $ 0 déconnecté ou client ou serveur ou client et serveur ou permissif ou variables ou sans utiliser de paramètre pour lister les iptables.
    echo Le fichier $ 0 contient des variables modifiables à l'intérieur.
    ############################## les variables ci-dessus sont activées
    ###############################
    echo définition des variables iptables
    variables activées par écho
    echo
    ########################## les règles iptables
    echo Réglage iptables-legacy
    sudo / usr / sbin / iptables-legacy -t filtre -F
    sudo / usr / sbin / iptables-legacy -t nat -F
    sudo / usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filtre -F
    sudo / usr / sbin / ip6tables-legacy -t nat -F
    sudo / usr / sbin / ip6tables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ il y a des exceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ exceptions -j ACCEPT> / dev / null
    $ activer le serveur sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activer le serveur sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m état –état établi -s $ clientnet -d $ clientnet -j ACCEPTER> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m état –état établi -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ exceptions -j ACCEPTER> / dev / null
    $ activer le serveur sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
    $ activer le serveur sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    echo iptables-legacy activé
    echo
    echo Réglage iptables-nft
    sudo / usr / sbin / iptables-nft -t filtre -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t filtre -F
    sudo / usr / sbin / ip6tables-nft -t nat -F
    sudo / usr / sbin / ip6tables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ exceptions -j ACCEPTER> / dev / null
    $ activer le serveur sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
    $ activer le serveur sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m état –état établi -s $ clientnet -d $ clientnet -j ACCEPTER> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m état –état établi -s $ clientnet -d $ clientnet -j ACCEPTER> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER> / dev / null
    $ il y a des exceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ exceptions -j ACCEPTER> / dev / null
    $ activer sudo server / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
    $ activer le serveur sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft activé
    echo
    $ sudo humide / usr / sbin / iptables-legacy -F> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state –state établi -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $ sudo humide / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m state –state établi -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    #########################
    echo vous avez jeté $ 0 $ 1 $ 2
    # quitte le script
    sortie 0

  8.   louis duran dit

    Comment définirais-je une règle si ce pare-feu l'utilisait pour ma passerelle et avait un calmar dans le LAN ???