Maison  >  Article  >  Tutoriel système  >  Analyse approfondie de la façon d'utiliser iptables sous CentOS

Analyse approfondie de la façon d'utiliser iptables sous CentOS

WBOY
WBOYavant
2024-01-11 17:27:13659parcourir

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer