Comment configurer un pare-feu iptables pour permettre l'accès à distance aux services dans Linux - partie 8

Comment configurer un pare-feu iptables pour permettre l'accès à distance aux services dans Linux - partie 8
Ingénieur certifié de la Fondation Linux - Partie 8

Présentation du programme de certification de la Fondation Linux

Vous vous en souviendrez de la partie 1 - à propos des iptables de cela LFCE (Ingénieur certifié de la Fondation Linux ) série que nous avons donné une description de base de ce qu'est un pare-feu: un mécanisme pour gérer les paquets qui entrent et quitter le réseau. Par «gérer», nous voulons réellement dire:

  1. Pour permettre ou empêcher certains paquets d'entrer ou de quitter notre réseau.
  2. Pour transmettre d'autres paquets d'un point du réseau à un autre.

basé sur des critères prédéterminés.

Dans cet article, nous discuterons de la façon de mettre en œuvre le filtrage de base des paquets et comment configurer le pare-feu avec des iptables, un frontend à NetFilter, qui est un module de noyau natif utilisé pour le pare-feu.

Veuillez noter que le pare-feu est un vaste sujet et cet article n'est pas destiné à être un guide complet pour comprendre tout ce qu'il y a à savoir, mais plutôt comme point de départ pour une étude plus profonde de ce sujet. Cependant, nous revisiterons le sujet en Partie 10 de cette série lorsque nous explorons quelques cas d'utilisation spécifiques d'un pare-feu à Linux.

Vous pouvez considérer un pare-feu comme un aéroport international où les avions de passagers vont et viennent presque 24/7. Sur la base d'un certain nombre de conditions, telles que la validité du passeport d'une personne, ou son pays d'origine (pour nommer quelques exemples) qu'il peut ou non, ou non, être autorisé à entrer ou à quitter un certain pays.

Dans le même temps, les officiers de l'aéroport peuvent demander aux gens de passer d'un endroit de l'aéroport à un autre si nécessaire, par exemple lorsqu'ils ont besoin de passer par des services de douane.

Nous pouvons trouver l'analogie de l'aéroport utile pendant le reste de ce tutoriel. Gardez simplement à l'esprit les relations suivantes au fur et à mesure que nous procédons:

  1. Personnes = paquets
  2. Pare-feu = aéroport
  3. Pays n ° 1 = réseau n ° 1
  4. Pays # 2 = réseau n ° 2
  5. Règlements sur l'aéroport appliqués par les officiers = règles de pare-feu

Iptables - les bases

Au niveau bas, c'est le noyau lui-même qui «décider«Que faire des paquets en fonction des règles regroupées Chaînes, ou phrases. Ces chaînes définissent quelles actions doivent être prises lorsqu'un package correspond aux critères spécifiés par eux.

La première action prise par Iptables consistera à décider quoi faire avec un paquet:

  1. Acceptez-le (laissez-le passer dans notre réseau)?
  2. Rejetez-le (empêchez-le d'accéder à notre réseau)?
  3. Le transmettre (vers une autre chaîne)?

Juste au cas où vous vous demanderiez pourquoi cet outil est appelé iptables, c'est parce que ces chaînes sont organisées en tables, avec le table de filtre Être le plus connu et celui utilisé pour implémenter le filtrage des paquets avec ses trois chaînes par défaut:

1. Le SAISIR La chaîne gère les paquets entrant dans le réseau, qui sont destinés aux programmes locaux.

2. Le SORTIR La chaîne est utilisée pour analyser les paquets originaires du réseau local, qui doivent être envoyés à l'extérieur.

3. Le AVANT La chaîne traite les paquets qui devraient être transmis à une autre destination (comme dans le cas d'un routeur).

Pour chacune de ces chaînes, il existe une stratégie par défaut, qui dicte ce qui doit être fait par défaut lorsque les paquets ne correspondent à aucune des règles de la chaîne. Vous pouvez afficher les règles créées pour chaque chaîne et la stratégie par défaut en exécutant la commande suivante:

# iptables -l 

Les politiques disponibles sont les suivantes:

  1. ACCEPTER → laisse le paquet à travers. Tout paquet qui ne correspond à aucune règle dans la chaîne est autorisé dans le réseau.
  2. GOUTTE → laisse tomber le paquet tranquillement. Tout paquet qui ne correspond à aucune règle dans la chaîne est empêché d'entrer dans le réseau.
  3. REJETER → rejette le paquet et renvoie un message informatif. Celui-ci en particulier ne fonctionne pas comme une stratégie par défaut. Au lieu de cela, il est destiné à compléter les règles de filtrage des paquets.
Politiques Linux Iptables

Lorsqu'il s'agit de décider quelle politique vous allez mettre en œuvre, vous devez considérer le avantages et les inconvénients de chaque approche comme expliqué ci-dessus - Notez qu'il n'y a pas de solution unique.

Ajout de règles

Pour ajouter une règle au pare-feu, invoquez la commande iptables comme suit:

# iptables -a chain_name Critères -J Target 

où,

  1. -UN signifie ajouter (ajouter la règle actuelle à la fin de la chaîne).
  2. chain_name est soit l'entrée, la sortie ou le transfert.
  3. cible L'action ou la politique s'applique-t-elle dans ce cas (accepter, rejeter ou tomber).
  4. critère est l'ensemble des conditions par rapport auxquelles les paquets doivent être examinés. Il est composé d'au moins un (très probablement plus) des drapeaux suivants. Les options à l'intérieur des supports, séparées par une barre verticale, sont équivalentes les unes aux autres. Le reste représente des commutateurs facultatifs:
[--protocol | -p] protocole: Spécifie le protocole impliqué dans une règle. [- Source-Port | -Sport] Port: [Port]: définit le port (ou la gamme de ports) où le paquet est originaire. [- Destination-Port | -dport] port: [port]: définit le port (ou la gamme de ports) auquel le paquet est destiné. [--source | -s] adresse [/ masque]: représente l'adresse source ou le réseau / le masque. [- Dostination | -d] adresse [/ masque]: représente l'adresse de destination ou le réseau / le masque. [- États] État (précédé par -m État): Gérer les paquets selon qu'ils font partie d'une connexion d'État, où l'état peut être nouveau, établi, lié ou invalide. [--interface | -I] interface: Spécifie l'interface d'entrée du paquet. [- interface-interface | -o] interface: l'interface de sortie. [- Jump | -j] cible: que faire lorsque le paquet correspond à la règle. 

Notre environnement de test

Collecons tout cela dans 3 exemples classiques en utilisant l'environnement de test suivant pour les deux premiers:

Pare-feu: Debian Wheezy 7.5 Nom d'hôte: Dev2.gabrielcanepa.Adresse IP com: 192.168.0.15 
Source: Centos 7 Nom d'hôte: Dev1.gabrielcanepa.Adresse IP com: 192.168.0.17 

Et ceci pour le dernier exemple

Serveur NFSV4 et pare-feu: Debian Wheezy 7.5 Nom d'hôte: Debian IP Adresse: 192.168.0.dix 
Source: Debian Wheezezy 7.5 Nom d'hôte: Dev2.gabrielcanepa.Adresse IP com: 192.168.0.15 
Exemple 1: Analyse de la différence entre les politiques de dépôt et de rejet

Nous définirons un GOUTTE Politique d'abord pour les pings d'entrée à notre pare-feu. C'est-à-dire que les paquets ICMP seront déposés tranquillement.

# ping -c 3 192.168.0.15 
# iptables -a entrée --protocol ICMP - Interface eth0 -j Drop 
Demande de ping ICMP supprime

Avant de procéder avec le REJETER En partie, nous allons vider toutes les règles de la chaîne d'entrée pour nous assurer que nos paquets seront testés par cette nouvelle règle:

# iptables -f entrée # iptables -a entrée --protocol ICMP - Interface eth0 -j rejet 
# ping -c 3 192.168.0.15 
Rejeter la demande de ping ICMP en pare-feu
Exemple 2: désactiver / réactiver les connexions SSH de Dev2 à Dev1

Nous allons affronter le SORTIR Chaîne comme nous manipulons le trafic sortant:

# iptables -a output --protocol tcp --destation-port 22 --out-interface eth0 - jump rejeter 
Bloquer la connexion SSH dans le pare-feu
Exemple 3: Autoriser / prévenir les clients NFS (à partir de 192.168.0.0/24) pour monter des actions NFS4

Exécutez les commandes suivantes dans le serveur / pare-feu NFSV4 pour fermer les ports 2049 et 111 pour toutes sortes de trafic:

# iptables -f # iptables -a entrée -i eth0 -s 0/0 -p tcp --dport 2049 -j rejet # iptables -a entrée -i eth0 -s 0/0 -p tcp --dport 111 -j rejet 
Bloquer les ports NFS dans le pare-feu

Maintenant, ouvrons ces ports et voyons ce qui se passe.

# iptables -a entrée -i eth0 -s 0/0 -p tcp --dport 111 -j accepter # iptables -a entrée -i eth0 -s 0/0 -p tcp --dport 2049 -j accepter 
Ouvrez les ports NFS dans le pare-feu

Comme vous pouvez le voir, nous avons pu monter le partage NFSV4 après avoir ouvert le trafic.

Règles d'insertion, d'ajouter et de supprimer

Dans les exemples précédents, nous avons montré comment ajouter les règles SAISIR et SORTIR Chaînes. Si nous voulons les insérer à la place à une position prédéfinie, nous devons utiliser le -je (majuscules i) Communiquez à la place.

Vous devez vous rappeler que les règles seront évaluées les unes après les autres et que l'évaluation s'arrête (ou saute) lorsqu'un GOUTTE ou ACCEPTER La stratégie est appariée. Pour cette raison, vous pouvez vous retrouver dans la nécessité de monter des règles vers le haut ou vers le bas dans la liste des chaînes au besoin.

Nous utiliserons un exemple trivial pour le démontrer:

Vérifiez les règles du pare-feu iptables

Placez la règle suivante,

# iptables -i entrée 2 -p tcp --dport 80 -j accepter 

en position 2) dans la chaîne d'entrée (déplace ainsi la précédente # 2 comme # 3)

Iptables accepte la règle

En utilisant la configuration ci-dessus, le trafic sera vérifié pour voir s'il est dirigé vers le port 80 Avant de vérifier le port 2049.

Alternativement, vous pouvez supprimer une règle et modifier la cible des règles restantes pour REJETER (en utilisant le -R changer):

# iptables -d entrée 1 # iptables -nl -v --line-numbers # iptables -r entrée 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j rejet # iptables -r entrée 1 -p tcp --Dport 80 -J Rejet 
Règle de chute iptables

En dernier, mais non le moindre, vous devrez vous rappeler que pour que les règles du pare-feu soient persistantes, vous devrez les enregistrer dans un fichier, puis les restaurer automatiquement lors du démarrage (en utilisant la méthode préférée de votre choix ou celle qui est disponible pour votre distribution).

Économiser des règles de pare-feu:

# iptables-save> / etc / iptables / règles.v4 [sur ubuntu] # iptables-save> / etc / sysconfig / iptables [sur centos / opensuse] 

Restauration des règles:

# iptables-restore < /etc/iptables/rules.v4 [On Ubuntu] # iptables-restore < /etc/sysconfig/iptables [On CentOS / OpenSUSE] 

Ici, nous pouvons voir une procédure similaire (enregistrer et restaurer les règles de pare-feu à la main) à l'aide d'un fichier factice appelé iptables.décharge au lieu de celui par défaut comme indiqué ci-dessus.

# iptables-save> iptables.décharge 
Dump Linux iptables

Pour rendre ces changements persistants à travers les bottes:

Ubuntu: Installer le iptables package, qui chargera les règles enregistrées dans le / etc / iptables / règles.v4 déposer.

# apt-get install iptables persistant 

Centos: Ajouter les 2 lignes suivantes à / etc / sysconfig / iptables-config déposer.

Iptables_save_on_stop = "oui" iptables_save_on_restart = "oui" 

Ouverte: Liste des ports autorisés, des protocoles, des adresses, etc. (séparés par des virgules) / etc / sysconfig / susefirewall2.

Pour plus d'informations, reportez-vous au fichier lui-même, qui est fortement commenté.

Conclusion

Les exemples fournis dans cet article, sans couvrir toutes les cloches et les sifflets des iptables, servent à illustrer comment activer et désactiver le trafic entrant ou sortant.

Pour ceux d'entre vous qui sont des fans de pare-feu, gardez à l'esprit que nous revisiterons ce sujet avec des applications plus spécifiques dans Partie 10 de cela LFCE série.

N'hésitez pas à me faire savoir si vous avez des questions ou des commentaires.

Devenir ingénieur certifié Linux