Le Guide du débutant d’iptables, le pare-feu Linux

Table des matières:

Le Guide du débutant d’iptables, le pare-feu Linux
Le Guide du débutant d’iptables, le pare-feu Linux

Vidéo: Le Guide du débutant d’iptables, le pare-feu Linux

Vidéo: Le Guide du débutant d’iptables, le pare-feu Linux
Vidéo: iPhone 12 vs iPhone 12 Pro: Which Do you Buy? - YouTube 2024, Avril
Anonim
Iptables est un utilitaire de pare-feu extrêmement flexible conçu pour les systèmes d'exploitation Linux. Que vous soyez un débutant en Linux ou un administrateur système, il est probable que iptables puisse vous être très utile. Lisez ce qui suit pour savoir comment configurer le pare-feu Linux le plus polyvalent.
Iptables est un utilitaire de pare-feu extrêmement flexible conçu pour les systèmes d'exploitation Linux. Que vous soyez un débutant en Linux ou un administrateur système, il est probable que iptables puisse vous être très utile. Lisez ce qui suit pour savoir comment configurer le pare-feu Linux le plus polyvalent.

photo par ezioman.

À propos d'iptables

iptables est un utilitaire de pare-feu en ligne de commande qui utilise des chaînes de règles pour autoriser ou bloquer le trafic. Lorsqu'une connexion tente de s'établir sur votre système, iptables recherche dans sa liste une règle à laquelle correspondre. S'il n'en trouve pas, il passe à l'action par défaut.

iptables est presque toujours pré-installé sur toutes les distributions Linux. Pour le mettre à jour / l'installer, récupérez simplement le paquet iptables:

sudo apt-get install iptables

Il existe des alternatives graphiques à iptables comme Firestarter, mais iptables n’est pas si difficile à faire une fois que vous avez quelques commandes en bas. Vous voulez être extrêmement prudent lors de la configuration des règles iptables, en particulier si vous êtes SSH dans un serveur, car une commande erronée peut vous verrouiller de manière permanente jusqu’à ce qu’elle soit fixée manuellement sur la machine physique.

Types de chaînes

iptables utilise trois chaînes différentes: entrée, transmission et sortie.

Contribution - Cette chaîne est utilisée pour contrôler le comportement des connexions entrantes. Par exemple, si un utilisateur tente de SSH sur votre PC / serveur, iptables tentera de faire correspondre l'adresse IP et le port à une règle de la chaîne de saisie.

Vers l'avant - Cette chaîne est utilisée pour les connexions entrantes qui ne sont pas réellement livrées localement. Pensez à un routeur - des données lui sont toujours envoyées mais rarement destinées au routeur lui-même; les données sont simplement transmises à la cible. À moins que vous n'effectuiez une sorte de routage, de NATing ou autre chose sur votre système nécessitant un transfert, vous n'utiliserez même pas cette chaîne.

Il existe un moyen sûr de vérifier si votre système utilise / nécessite la chaîne de transfert.

iptables -L -v

La capture d’écran ci-dessus est celle d’un serveur en fonctionnement depuis quelques semaines et n’a aucune restriction quant aux connexions entrantes ou sortantes. Comme vous pouvez le constater, la chaîne d'entrée a traité 11 Go de paquets et la chaîne de sortie, 17 Go. En revanche, la chaîne de transfert n’a pas eu besoin de traiter un seul paquet. En effet, le serveur n’effectue aucun transfert ni n’est utilisé en tant que périphérique intermédiaire.
La capture d’écran ci-dessus est celle d’un serveur en fonctionnement depuis quelques semaines et n’a aucune restriction quant aux connexions entrantes ou sortantes. Comme vous pouvez le constater, la chaîne d'entrée a traité 11 Go de paquets et la chaîne de sortie, 17 Go. En revanche, la chaîne de transfert n’a pas eu besoin de traiter un seul paquet. En effet, le serveur n’effectue aucun transfert ni n’est utilisé en tant que périphérique intermédiaire.

Sortie - Cette chaîne est utilisée pour les connexions sortantes. Par exemple, si vous essayez d'envoyer un ping à howtogeek.com, iptables vérifiera dans sa chaîne de sortie les règles relatives au ping et à howtogeek.com avant de décider d'autoriser ou de refuser la tentative de connexion.

La mise en garde

Même si la commande ping vers un hôte externe semble ne nécessiter que de traverser la chaîne de sortie, n'oubliez pas que pour renvoyer les données, la chaîne d'entrée sera également utilisée. Lorsque vous utilisez iptables pour verrouiller votre système, n'oubliez pas que de nombreux protocoles nécessitent une communication bidirectionnelle. Par conséquent, les chaînes d'entrée et de sortie doivent être configurées correctement. SSH est un protocole commun que les gens oublient d'autoriser les deux chaînes.

Comportement par défaut de la chaîne de stratégie

Avant de commencer et de configurer des règles spécifiques, vous devrez choisir le comportement par défaut des trois chaînes. En d’autres termes, que voulez-vous que iptables fasse si la connexion ne correspond à aucune règle existante?

Pour voir ce que vos chaînes de stratégie sont actuellement configurées pour faire avec un trafic sans correspondance, exécutez la commande

iptables -L

commander.

Comme vous pouvez le constater, nous avons également utilisé la commande grep pour obtenir une sortie plus propre. Dans cette capture d'écran, nos chaînes sont actuellement configurées pour accepter le trafic.
Comme vous pouvez le constater, nous avons également utilisé la commande grep pour obtenir une sortie plus propre. Dans cette capture d'écran, nos chaînes sont actuellement configurées pour accepter le trafic.

Plus souvent, vous souhaiterez que votre système accepte les connexions par défaut. Sauf si vous avez déjà modifié les règles de la chaîne de stratégies, ce paramètre doit déjà être configuré. Quoi qu’il en soit, voici la commande permettant d’accepter les connexions par défaut:

iptables --policy INPUT ACCEPT

iptables --policy OUTPUT ACCEPT

iptables --policy FORWARD ACCEPT

En utilisant par défaut la règle d'acceptation, vous pouvez utiliser iptables pour refuser des adresses IP ou des numéros de port spécifiques, tout en continuant d'accepter toutes les autres connexions. Nous allons arriver à ces commandes dans une minute.

Si vous préférez refuser toutes les connexions et spécifier manuellement celles que vous souhaitez autoriser, vous devez modifier la stratégie par défaut de vos chaînes. Cela ne serait probablement utile que pour les serveurs contenant des informations sensibles et ne disposant que des mêmes adresses IP.

iptables --policy INPUT DROP

iptables --policy OUTPUT DROP

iptables --policy FORWARD DROP

Réponses spécifiques à la connexion

Avec vos stratégies de chaîne par défaut configurées, vous pouvez commencer à ajouter des règles à iptables pour qu'il sache quoi faire lorsqu'il rencontre une connexion depuis ou vers une adresse IP ou un port particulier. Dans ce guide, nous allons passer en revue les trois «réponses» les plus élémentaires et les plus couramment utilisées.

Acceptez - Autoriser la connexion.

Laissez tomber - Lâche la connexion, fais comme si de rien n'était. C’est mieux si vous ne voulez pas que la source réalise que votre système existe.

Rejeter - N'autorisez pas la connexion, mais renvoyez une erreur. Cela est préférable si vous ne souhaitez pas qu'une source particulière se connecte à votre système, mais que vous sachiez que votre pare-feu les a bloqués.

Le meilleur moyen de montrer la différence entre ces trois règles consiste à indiquer à quoi ça ressemble quand un PC tente d’envoyer une requête ping à une machine Linux avec iptables configuré pour chacun de ces paramètres.

Permettre la connexion:

Rejeter la connexion:
Rejeter la connexion:
Image
Image

Autoriser ou bloquer des connexions spécifiques

Avec vos chaînes de stratégies configurées, vous pouvez maintenant configurer iptables pour autoriser ou bloquer des adresses, des plages d'adresses et des ports spécifiques. Dans ces exemples, nous allons définir les connexions sur

DROP

mais vous pouvez les changer pour

ACCEPT

ou

REJECT

en fonction de vos besoins et de la manière dont vous avez configuré vos chaînes de stratégies.

Remarque: dans ces exemples, nous allons utiliser

iptables -A

pour ajouter des règles à la chaîne existante. iptables commence en haut de sa liste et parcourt chaque règle jusqu'à ce qu'elle en trouve une à laquelle elle correspond. Si vous devez insérer une règle au-dessus d’une autre, vous pouvez utiliser

iptables -I [chain] [number]

pour spécifier le numéro, il devrait être dans la liste.

Connexions à partir d'une seule adresse IP

Cet exemple montre comment bloquer toutes les connexions à partir de l'adresse IP 10.10.10.10.

iptables -A INPUT -s 10.10.10.10 -j DROP

Connexions à partir d'une plage d'adresses IP

Cet exemple montre comment bloquer toutes les adresses IP de la plage réseau 10.10.10.0/24. Vous pouvez utiliser un masque de réseau ou une notation barre oblique standard pour spécifier la plage d'adresses IP.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

ou

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Connexions à un port spécifique

Cet exemple montre comment bloquer les connexions SSH à partir de 10.10.10.10.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Vous pouvez remplacer «ssh» par n’importe quel protocole ou numéro de port. le

-p tcp

Une partie du code indique à iptables le type de connexion utilisé par le protocole. Si vous bloquiez un protocole qui utilise UDP plutôt que TCP, alors

-p udp

serait nécessaire à la place.

Cet exemple montre comment bloquer les connexions SSH à partir de n'importe quelle adresse IP.

iptables -A INPUT -p tcp --dport ssh -j DROP

États de connexion

Comme nous l'avons mentionné précédemment, de nombreux protocoles nécessiteront une communication à double sens. Par exemple, si vous souhaitez autoriser les connexions SSH sur votre système, une règle doit être ajoutée aux chaînes d'entrée et de sortie. Mais que se passe-t-il si vous souhaitez uniquement que SSH entrant dans votre système soit autorisé? L'ajout d'une règle à la chaîne de sortie ne permettra-t-il pas également des tentatives SSH sortantes?

C’est là que les états de connexion entrent en jeu, ce qui vous donne la possibilité d’autoriser la communication bidirectionnelle, mais uniquement l’établissement de connexions unidirectionnelles. Jetez un coup d'œil à cet exemple, où les connexions SSH À PARTIR DE 10.10.10.10 sont autorisées, mais les connexions SSH À 10.10.10.10 ne le sont pas. Cependant, le système est autorisé à renvoyer des informations sur SSH tant que la session a déjà été établie, ce qui permet une communication SSH entre ces deux hôtes.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Enregistrer les modifications

Les modifications que vous apportez à vos règles iptables seront annulées lors du prochain redémarrage du service iptables, à moins que vous n'exécutiez une commande pour enregistrer les modifications. Cette commande peut différer selon votre distribution:

Ubuntu:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

Ou

/etc/init.d/iptables save

Autres commandes

Répertoriez les règles iptables actuellement configurées:

iptables -L

Ajout du

-v

Cette option vous donnera des informations sur les paquets et les octets, en ajoutant

-n

va lister tout numériquement. En d'autres termes, les noms d'hôte, les protocoles et les réseaux sont répertoriés sous forme de nombres.

Pour effacer toutes les règles actuellement configurées, vous pouvez émettre la commande flush.

iptables -F

Conseillé: