Maison > Article > Tutoriel système > Analyse approfondie de la façon d'utiliser iptables sous CentOS
1 : Avant-propos
Les pare-feu, pour parler franchement, sont utilisés pour mettre en œuvre des fonctions de contrôle d'accès sous Linux. Ils se divisent en deux types : les pare-feu matériels ou logiciels. Quel que soit le réseau dans lequel vous vous trouvez, l'endroit où fonctionne le pare-feu doit être en périphérie du réseau. Notre tâche est de définir le fonctionnement du pare-feu. Il s'agit des politiques et des règles du pare-feu, afin qu'il puisse détecter l'IP et les données entrant et sortant du réseau.
À l'heure actuelle, les pare-feu les plus courants sur le marché comprennent les pare-feu de couche 3 et 4, appelés pare-feu de couche réseau, et les pare-feu de couche 7, qui sont en fait des passerelles au niveau de la couche proxy.
Pour le modèle à sept couches de TCP/IP, nous savons que la troisième couche est la couche réseau, et le pare-feu à trois couches détectera l'adresse source et l'adresse de destination au niveau de cette couche. Mais pour un pare-feu à sept couches, quel que soit votre port source ou port de destination, votre adresse source ou votre adresse de destination, toutes vos informations seront vérifiées. Par conséquent, en termes de principes de conception, les pare-feu à sept couches sont plus sécurisés, mais cela se traduit par une efficacité moindre. Les solutions de pare-feu habituelles sur le marché sont donc une combinaison des deux. Et comme nous devons tous accéder via le port contrôlé par le pare-feu, l'efficacité du pare-feu est devenue le contrôle le plus important sur la quantité de données auxquelles les utilisateurs peuvent accéder. Une mauvaise configuration peut même devenir un goulot d'étranglement pour le trafic.
2 : L'histoire et le principe de fonctionnement d'iptables
1. Développement d'iptables :
Le prédécesseur d'iptables s'appelle ipfirewall (ère du noyau 1.x). Il s'agit d'un simple outil de contrôle d'accès que l'auteur a transplanté de freeBSD et peut fonctionner dans le noyau pour détecter les paquets de données. Cependant, la fonction de travail d'ipfirewall est extrêmement limitée (il doit mettre toutes les règles dans le noyau pour que les règles puissent s'exécuter, et le mettre dans le noyau est généralement extrêmement difficile). Lorsque le noyau s'est développé vers les 2. Fonctions de contrôle d'accès.
Ce sont des outils qui fonctionnent dans l'espace utilisateur et définissent des règles, et ne sont pas eux-mêmes des pare-feu. Les règles qu'ils définissent peuvent être lues par netfilter dans l'espace noyau et permettent au pare-feu de fonctionner. L'endroit où il est placé dans le noyau doit être un emplacement spécifique, où passe la pile de protocole tcp/ip. L'endroit où doit passer la pile de protocole tcp/ip et où les règles de lecture peuvent être implémentées s'appelle netfilter (Network filter)
.L'auteur a sélectionné un total de 5 emplacements dans l'espace du noyau,
1. Dans l'espace noyau : provenant d'une interface réseau et allant vers une autre interface réseau
2. Les paquets de données circulent du noyau vers l'espace utilisateur
3. Les paquets de données sortent de l'espace utilisateur
4. Entrez/quittez l'interface réseau externe de cette machine
5. Entrez/quittez l'interface du réseau local
2. Mécanisme de fonctionnement d'iptables
D'après le développement ci-dessus, nous savons que l'auteur a choisi 5 emplacements comme lieux de contrôle, mais avez-vous découvert qu'en fait, les trois premiers emplacements peuvent fondamentalement bloquer complètement le chemin, mais pourquoi ont-ils été placés à l'entrée et à la sortie ? si je reste coincé à l'intérieur après avoir passé le niveau ? Étant donné que les décisions de routage n'ont pas encore été prises pour les paquets de données et que l'on ne sait pas encore où vont les données, il n'existe aucun moyen de mettre en œuvre un filtrage des données lors de l'importation et de l'exportation. Par conséquent, il est nécessaire de définir le niveau de transfert dans l'espace noyau, le niveau d'entrée dans l'espace utilisateur et le niveau de sortie de l'espace utilisateur. Alors, s’ils ne servent à rien, pourquoi les place-t-on ? Parce que lorsque nous faisons du NAT et du DNAT, la traduction de l'adresse cible doit être traduite avant le routage. Il faut donc définir le point de contrôle à l’interface du réseau externe puis du réseau interne.
Ces cinq positions sont aussi appelées cinq fonctions de crochet, également appelées cinq chaînes de règles.
1.PREROUTING (avant le routage)
2.INPUT (entrée du flux de paquets)
3.FORWARD (Carte de gestion Forward)
4.OUTPUT (exportation de paquets de données)
5.POSTROUTING (après routage)
Ce sont les cinq chaînes de règles spécifiées par NetFilter. Tout paquet de données qui passe par cette machine passera certainement par l'une de ces cinq chaînes.
3. Stratégie de pare-feu
Les politiques de pare-feu sont généralement divisées en deux types, l'une est appelée politique de « pass » et l'autre est appelée politique de « blocage ». Dans la politique de pass, la porte est fermée par défaut et il est nécessaire de définir qui peut. entrer. La stratégie de blocage est que la porte est ouverte, mais vous devez avoir une authentification d'identité, sinon vous ne pouvez pas entrer. Il faut donc définir, laisser entrer ceux qui entrent et laisser sortir ceux qui sortent, donc ouvrir c'est permettre à tous, et bloquer c'est choisir. Lorsque nous définissons la politique, nous devons définir respectivement plusieurs fonctions, notamment : définir les politiques autorisées ou non dans le paquet de données, la fonction de filtrage et l'option nat qui définit la fonction de traduction d'adresse. Afin de permettre à ces fonctions de fonctionner en alternance, nous avons formulé la définition de « table » pour définir et distinguer diverses fonctions de travail et méthodes de traitement.
Nous utilisons actuellement trois fonctions :
1.filter définit ce qui est autorisé ou non
2.nat définit la traduction d'adresse
Fonction 3.mangle : modifie les données originales du message
Nous modifions les données originales du message pour modifier le TTL. Il est possible de démonter les métadonnées du paquet de données et de marquer/modifier le contenu à l'intérieur. Les balises de pare-feu sont en fait implémentées par mangle.
Petite extension :
Pour les filtres, généralement cela ne peut se faire que sur 3 chaînes : INPUT, FORWARD, OUTPUT
Pour le NAT, généralement cela ne peut se faire que sur 3 chaînes : PREROUTING, OUTPUT, POSTROUTING
Mangle peut réaliser les 5 chaînes : PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
iptables/netfilter (ce logiciel) fonctionne dans l'espace utilisateur. Il peut faire prendre effet aux règles. Ce n'est pas un service en soi, et les règles prennent effet immédiatement. Et notre iptables est désormais transformé en un service qui peut être démarré et arrêté. Si elles sont démarrées, les règles prendront effet directement ; si elles sont arrêtées, les règles seront révoquées.
iptables prend également en charge la définition de votre propre chaîne. Mais la chaîne que vous définissez doit être associée à une chaîne spécifique. Dans un paramètre de niveau, spécifiez que lorsqu'il y a des données, accédez à une chaîne spécifique pour le traitement, puis revenez une fois cette chaîne traitée. Continuez ensuite à vérifier la chaîne spécifique.
Remarque : L'ordre des règles est très critique. Plus les règles sont strictes, plus elles doivent être placées haut. Lors de la vérification des règles, elles sont vérifiées de haut en bas.
Trois. Comment rédiger les règles :
La façon dont iptables définit les règles est plus compliquée :
Format : iptables [-t table] Chaîne de COMMANDES CRETIRIA -j ACTION
-t table : 3 filtres nat mangle
COMMANDE : Définir comment gérer les règles
chain : spécifiez sur quelle chaîne votre prochaine règle fonctionnera. Cela peut être omis lors de la définition de la stratégie
.CRETIRIA : Préciser les critères de correspondance
-j ACTION : Préciser comment traiter
Par exemple : 172.16.0.0/24 n'est pas autorisé à accéder.
iptables -t filtre -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
Bien sûr, si vous souhaitez refuser de manière plus approfondie :
iptables -t filtre -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT
iptables -L -n -v #Afficher les informations détaillées des règles définies
Quatre : Explication détaillée COMMANDE :
1.Commandes de gestion de la chaîne (celles-ci sont efficaces immédiatement)
-P : Définir la politique par défaut (définir si la porte par défaut est fermée ou ouverte)
Il n'existe généralement que deux stratégies par défaut
iptables -P INPUT (DROP | ACCEPT) La valeur par défaut est désactivée/la valeur par défaut est activée
Par exemple :
iptables -P INPUT DROP Ceci rejette la règle par défaut. Et aucune action n'est définie, donc toutes les règles concernant les connexions externes, y compris les connexions Xshell, et les connexions distantes sont rejetées.
-F : FLASH, efface la chaîne de règles (notez les droits de gestion de chaque chaîne)
iptables -t nat -F PRÉROUTAGE
iptables -t nat -F efface toutes les chaînes de la table nat
-N:NEW aide les utilisateurs à créer une nouvelle chaîne
iptables -N inbound_tcp_web indique qu'il est attaché à la table TCP pour vérifier le Web.
-X : utilisé pour supprimer les liens vides définis par l'utilisateur
La méthode d'utilisation est la même que -N, mais les liens à l'intérieur doivent être effacés avant la suppression
-E : Utilisé pour renommer la chaîne, principalement utilisé pour renommer les chaînes définies par l'utilisateur
-E ancien nom nouveau nom
-Z : Effacer la chaîne et les compteurs des règles par défaut dans la chaîne (il y a deux compteurs, combien de paquets et d'octets correspondent)
iptables -Z : Effacer
2. Commandes de gestion des règles
-A : Ajouter, ajouter une règle à la fin de la chaîne actuelle
-I num : Insérer, insérer la règle actuelle dans quel numéro.
-I 3 : Insérer comme troisième élément
-R num : Rejoue quelle règle remplacer/modifier
Format : iptables -R 3…………
-D num : supprimer, préciser clairement quelle règle supprimer
3. Visualisez la commande de gestion «-L»
Ajouter des sous-commandes
-n : affiche l'adresse IP sous forme numérique. Il affichera l'adresse IP directement. Si -n n'est pas ajouté, l'adresse IP sera résolue de manière inverse dans le nom d'hôte.
-v : Afficher des informations détaillées
-vv
-vvv : Plus il y en a, plus c'est détaillé
-x : Afficher la valeur exacte sur le compteur sans conversion d'unité
--line-numbers : Afficher les numéros de ligne des règles
-t nat : Afficher des informations sur tous les niveaux
Five : Explication détaillée des critères de correspondance
1. Correspondance universelle : correspondance de l'adresse source et de l'adresse cible
-s : Spécifiez comme adresse source à correspondre, le nom d'hôte ne peut pas être spécifié ici, il doit être IP
IP | IP/MASQUE | 0.0.0.0/0.0.0.0
Et l'adresse peut être inversée, ajoutez un "!" pour indiquer sauf quelle IP
-d : indique l'adresse cible correspondante
-p : utilisé pour faire correspondre les protocoles (il y a généralement 3 protocoles ici, TCP/UDP/ICMP)
-i eth0 : données provenant de cette carte réseau
Inflow est généralement utilisé pour INPUT et PREROUTING
-o eth0 : Données sortant de cette carte réseau
Outflow est généralement sur OUTPUT et POSTROUTING
2.Correspondance étendue
2.1 Extension implicite : extension du protocole
-p tcp : Une extension du protocole TCP. Il existe généralement trois types d'extensions
--dport XX-XX : Spécifiez le port cible. Plusieurs ports non consécutifs ne peuvent pas être spécifiés. Un seul port peut être spécifié, par exemple
.--dport 21 ou --dport 21-23 (cela signifie 21,22,23)
--sport : Spécifiez le port source
--tcp-fiags : indicateurs TCP (SYN, ACK, FIN, PSH, RST, URG)
Pour cela, il doit généralement être suivi de deux paramètres :
1. Vérifiez le drapeau
2. Bit de drapeau qui doit être 1
--tcpflags syn,ack,fin,rst syn = --syn
signifie vérifier ces 4 bits, syn doit être 1 parmi ces 4 bits, et les autres doivent être 0. Cela signifie donc qu'il est utilisé pour détecter le premier paquet de la négociation à trois. Pour ce genre de paquet qui correspond spécifiquement au premier paquet dont SYN est 1, il existe aussi une abréviation appelée --syn
-p udp : extension du protocole UDP
-déport-
-Sport--p icmp : extension du message de données icmp
--icmp-type :
echo-request (requête d'écho), généralement représenté par 8
Donc --icmp-type 8 correspond à la demande de paquets d'écho
echo-reply (paquet de données de réponse) est généralement représenté par 0
2.2 Expansion explicite (-m)
Développez divers modules
-m multiport : indique l'activation de l'extension multiport
Après cela, nous pouvons activer par exemple --dports 21,23,80
Six : Explication détaillée-j ACTION ACTIONS couramment utilisées :
DROP : Jeter tranquillement
Généralement, nous utilisons DROP pour cacher notre identité et masquer notre liste chaînée
REJETER : exprimer son rejet
ACCEPTER : Accepter
custom_chain : passer à une chaîne personnalisée
DNAT
SNAT
MASQUERADE : masquage de l'adresse source
REDIRECT : Redirection : principalement utilisé pour implémenter la redirection de port
MARQUE : marque de pare-feu
RETOUR:Retour
Utilisez return après l'exécution de la chaîne personnalisée pour revenir à la chaîne de règles d'origine.
Question d'exercice 1 :
Tant qu'il provient du segment de réseau 172.16.0.0/16, il est autorisé à accéder au service SSHD de mon 172.16.100.1 local
Analyse : Tout d'abord, elle doit être définie dans la table d'autorisation. Parce qu'il n'est pas nécessaire de faire une traduction d'adresse NAT, etc., vérifiez notre service SSHD. Sur le port 22, le mécanisme de traitement est l'acceptation. Pour cette table, il doit y avoir deux règles, une d'avant en arrière, pour savoir si nous l'autorisons. ou le refuser, pour accéder aux services locaux, il est préférable de le définir sur la chaîne INPUT, puis de définir OUTPUT. (La fin initiale de la séance est définie en premier), donc la règle ajoutée est :
La définition entre : iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT
Défini : iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
Changez la politique par défaut en DROP :
iptables -P INPUT DROP
iptables -P GOUTTE DE SORTIE
iptables -P FORWARD DROP
Seven : Détection d'état : est une extension explicite utilisée pour détecter la relation de connexion entre les sessions. Avec la détection, nous pouvons réaliser l'expansion des fonctions inter-sessions
.Qu'est-ce que la détection de statut ? Pour l'ensemble du protocole TCP, il s'agit d'un protocole de connexion. Dans la prise de contact à trois, la première prise de contact est appelée NOUVELLE connexion. À partir de la deuxième prise de contact, l'accusé de réception est 1, ce qui correspond à une transmission de données normale. La troisième poignée de main de TCP est appelée connexions établies (ESTABLISHED). Il existe également un état assez étrange, tel que : SYN=1 ACK=1 RST=1. Pour ce genre de chose que nous ne pouvons pas reconnaître, nous l'appelons tous INVALID. méconnu. Il existe également un quatrième type, une fonctionnalité ancienne de FTP. Chaque port est indépendant. Les ports 21 et 20 vont et reviennent entre eux. Nous appelons cette relation pour RELATED.
Nous avons donc quatre états au total :
NOUVEAU
ÉTABLI
RELATED
INVALIDE
Nous pouvons donc ajouter la détection de statut aux questions d'exercice tout à l'heure. Par exemple, seuls ceux ayant le statut NEW et ESTABLISHED sont autorisés à entrer, et seuls les statuts ESTABLISHED sont autorisés à sortir. Cela peut fournir un bon mécanisme de contrôle pour les chevaux de Troie de rebond les plus courants.
Extensions pour les questions pratiques :
Ceux qui entrent refusent l'autorisation de sortir, ceux qui entrent ne laissent entrer que les ÉTABLIS, et ceux qui sortent ne laissent sortir que les ÉTABLIS. Les règles par défaut utilisent toutes le refus
iptables -L -n --line-number : affiche la ligne où se trouve la règle précédente
Réécrire INPUT
iptables -R INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NOUVEAU, ÉTABLI -j ACCEPT
iptables -R OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT
Si vous souhaitez libérer un autre port 80 à ce moment-là, comment pouvez-vous le libérer ?
iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -R INPUT 1 -d 172.16.100.1 -p udp --dport 53 -j ACCEPT
Question d'exercice 2 :
Et si nous nous autorisons à envoyer un ping aux autres, mais que les autres ne peuvent pas nous envoyer un ping ?
Analyse : Pour le protocole ping, ce qui entre est 8 (ping) et ce qui sort est 0 (réponse). Afin d'atteindre notre objectif, nous avons besoin de 8 pour sortir et permettre à 0 d'entrer
.Sur le port sortant : iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
Sur le port entrant : iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
Petite extension : 127.0.0.1 est particulière, il faut la définir clairement
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER
iptables -A SORTIE -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER
Huit : Mise en œuvre du SNAT et du DNAT
Étant donné que nos adresses IP sont désormais rares et ont été allouées, nous devons effectuer une traduction d'adresses pour économiser nos ressources IP restantes. Alors, comment implémenter la traduction d'adresses NAT via iptables ?
1. Conversion SNAT basée sur l'adresse d'origine
La conversion basée sur l'adresse d'origine est généralement utilisée lorsqu'un grand nombre d'utilisateurs de notre réseau interne accèdent à Internet via un port réseau externe. À l'heure actuelle, nous convertissons notre adresse réseau interne en une adresse IP de réseau externe et nous pouvons nous connecter à d'autres réseaux externes. . Fonctions IP.
Il faut donc définir comment convertir en iptables :
Style défini :
Par exemple, nous devons maintenant convertir toutes les adresses IP du segment de réseau 192.168.10.0 en l'adresse réseau externe supposée de 172.16.100.1 lors du passage :
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1
De cette façon, toute personne du réseau local qui tente d'accéder au réseau via la carte réseau sera convertie en IP 172.16.100.1.
Et si le 172.16.100.1 n'est pas corrigé ?
Nous savons tous que lorsque nous utilisons China Unicom ou China Telecom pour accéder à Internet, une adresse IP externe est généralement générée de manière aléatoire à chaque fois que vous allumez l'ordinateur, ce qui signifie que l'adresse du réseau externe est modifiée de manière dynamique. À ce stade, nous devons changer l'adresse du réseau externe en MASQUERADE (camouflage dynamique) : il peut trouver automatiquement l'adresse du réseau externe et la remplacer automatiquement par l'adresse du réseau externe correcte. Nous devons donc le configurer comme ceci :
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
Remarque ici : le masquage d’adresse ne s’applique pas à tous les lieux.
2.Conversion d'adresse cible DNAT
Pour la traduction d'adresse cible, le sens du flux de données va de l'extérieur vers l'intérieur. L'extérieur est le client et l'intérieur est le serveur. Grâce à la traduction d'adresse cible, nous pouvons permettre à l'adresse IP extérieure d'accéder à différents serveurs de notre serveur via notre réseau externe. IP, mais nos services sont placés sur différents serveurs du serveur intranet.
Comment effectuer une conversion d'adresse cible ? :
iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --todestination 172.16.100.2
La conversion de l'adresse cible doit être effectuée avant d'atteindre la carte réseau, elle doit donc être effectuée en position PREROUTING
9 : Contrôler le stockage et l'ouverture des règles
Remarque : tout le contenu que vous définissez sera invalide au redémarrage. Si nous voulons qu'il prenne effet, nous devons utiliser une commande pour le sauvegarder
.1.service iptables save commande
Il sera enregistré dans le fichier /etc/sysconfig/iptables
2.commande iptables-save
iptables-save > /etc/sysconfig/iptables
3.commande iptables-restore
Lors du démarrage, il chargera automatiquement /etc/sysconfig/iptabels
S'il ne peut pas être chargé ou n'est pas chargé au démarrage et que vous souhaitez qu'un fichier de configuration écrit par vous-même (supposé être iptables.2) prenne effet manuellement :
iptables-restore /etc/sysconfig/iptables.2
Ensuite, vous avez terminé d'appliquer manuellement les règles définies dans iptables
Dix : Résumé
Iptables est un outil très important. C'est un paramètre presque nécessaire sur chaque pare-feu. C'est également quelque chose que nous devons configurer pour de nombreuses raisons lorsque nous construisons un grand réseau. Bien apprendre Iptables peut nous donner une compréhension plus approfondie de la structure de l'ensemble du réseau. En même temps, nous pouvons également avoir une compréhension approfondie de la direction des données dans l'espace du noyau et de la sécurité de Linux. Lorsque nous apprenons, nous essayons de combiner divers projets et expériences pour le compléter. Cela vous sera très utile pour approfondir la configuration d'iptables et diverses techniques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!