Recherche de site Web

IPTABLES VS PARE-FEU


Aujourd'hui, nous allons parcourir iptables et firewalld et nous découvrirons l'historique de ces deux-là ainsi que leur installation et comment nous pouvons les configurer pour nos distributions Linux.

Commençons sans perdre plus de temps.

Tout d’abord, nous devons savoir ce qu’est iptables. La plupart des professionnels de l'informatique expérimentés le savent et ont également travaillé avec. Iptables est une application/un programme qui permet à un utilisateur de configurer les tables de sécurité ou de pare-feu fournies par le pare-feu du noyau Linux et les chaînes afin qu'un utilisateur puisse y ajouter/supprimer des règles de pare-feu en conséquence pour répondre à ses exigences de sécurité. Iptables utilise différents modules de noyau et différents protocoles afin que l'utilisateur puisse en tirer le meilleur parti. Par exemple, iptables est utilisé pour IPv4 (version IP 4/32 bits) et ip6tables pour IPv6 (version IP 6/64 bits) pour TCP et UDP. Normalement, les règles iptables sont configurées par l'administrateur système, l'analyste système ou le responsable informatique. Vous devez disposer des privilèges root pour exécuter chaque règle iptables. Le noyau Linux utilise le framework Netfilter afin de pouvoir fournir diverses opérations liées au réseau qui peuvent être effectuées à l'aide d'iptables. Auparavant, ipchains était utilisé dans la plupart des distributions Linux dans le même but. Toutes les règles iptables sont directement gérées par le noyau Linux lui-même et sont connues sous le nom de devoir du noyau. Quels que soient les outils GUI ou autres outils de sécurité que vous utilisez pour configurer la sécurité du pare-feu de votre serveur, en fin de compte, ils sont convertis en règles iptables et fournis au noyau pour effectuer l'opération.

L'essor des iptables commence avec netfilter. Paul Rusty Russell était l'auteur initial et le principal groupe de réflexion derrière netfilter/iptables. Plus tard, il a été rejoint par de nombreux autres techniciens, puis a formé et construit l'équipe principale de Netfilter et a développé et maintenu le projet netfilter/iptables dans le cadre d'un effort commun comme de nombreux autres projets open source. Harald Welte a été l'ancien leader jusqu'en 2007, puis Patrick McHardy a été à la tête jusqu'en 2013. Actuellement, le chef de l'équipe principale de Netfilter est Pablo Neira Ayuso.

Pour en savoir plus sur netfilter, veuillez visiter ce lien. Pour en savoir plus sur l'histoire de netfilter, veuillez visiter ce lien.

Pour en savoir plus sur l'historique d'iptables, veuillez visiter ce lien.

De nos jours, chaque noyau Linux est livré avec iptables et peut être trouvé pré-construit ou préinstallé sur toutes les distributions Linux modernes célèbres. Sur la plupart des systèmes Linux, iptables est installé dans ce répertoire /usr/sbin/iptables. Il peut également être trouvé dans /sbin/iptables, mais comme iptables ressemble plus à un service qu'à un « binaire essentiel », l'emplacement préféré reste dans le répertoire /usr/sbin.

Pour Ubuntu ou Debian

sudo apt-get install iptables

Pour CentOS

sudo yum install iptables-services

Pour RHEL

sudo yum install iptables

Pour connaître votre version iptables, tapez la commande suivante dans votre terminal.

sudo iptables --version

Pour OpenSUSE 42.1, saisissez ce qui suit pour arrêter.

sudo /sbin/rcSuSEfirewall2 stop

Pour recommencer

sudo /sbin/rcSuSEfirewall2 start

Pour Ubuntu, saisissez ce qui suit pour arrêter.

sudo service ufw stop

Pour recommencer

sudo service ufw start

Pour Debian et RHEL, saisissez ce qui suit pour arrêter.

sudo /etc/init.d/iptables stop

Pour recommencer

sudo /etc/init.d/iptables start

Pour CentOS, saisissez ce qui suit pour arrêter.

sudo service iptables stop

Pour recommencer

sudo service iptables start

Pour connaître toutes les règles actuellement présentes et actives dans vos iprables, ouvrez simplement un terminal et tapez ce qui suit.

sudo iptables -L

S'il n'y a pas de sortie de règles sur iptables, cela signifie que s'il n'y a pas de règles ajoutées jusqu'à présent dans votre pare-feu iptables, vous verrez quelque chose comme l'image ci-dessous.

Dans cette image ci-dessus, vous pouvez voir qu'il y a trois (3) chaînes et elles sont INPUT, FORWARD, OUTPUT et il n'y a aucune règle. En fait, je n'en ai pas encore ajouté.

Tapez ce qui suit pour connaître l'état des chaînes de votre pare-feu iptables.

sudo iptables -S

Avec la commande ci-dessus, vous pouvez savoir si vos chaînes acceptent ou non.

Effacer toutes les règles iptables

Pour effacer toutes les règles de votre pare-feu iptables, veuillez taper ce qui suit. Ceci est normalement connu sous le nom de vidage de vos règles iptables.

sudo iptables -F

Si vous souhaitez vider la chaîne INPUT uniquement, ou toute chaîne individuelle, émettez les commandes ci-dessous selon vos besoins.

sudo iptables -F INPUT
sudo iptables -F OUTPUT
sudo iptables -F FORWARD

ACCEPTER ou SUPPRIMER les chaînes

Pour accepter ou supprimer une chaîne particulière, exécutez l'une des commandes suivantes sur votre terminal pour répondre à vos besoins.

iptables --policy INPUT DROP

La règle ci-dessus n'acceptera rien de ce qui arrive sur ce serveur. Pour revenir à ACCEPTER, procédez comme suit

iptables --policy INPUT ACCEPT

Il en va de même pour d'autres chaînes comme

iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

Remarque : Par défaut, toutes les chaînes d'iptables ( INPUT, OUTPUT, FORWARD ) sont en mode ACCEPT. C’est ce qu’on appelle le comportement par défaut de la chaîne de politiques.

Autoriser n'importe quel port

Si vous exécutez un serveur Web sur votre hôte, vous devez autoriser votre pare-feu iptables pour que votre serveur écoute ou réponde au port 80. Par défaut, le serveur Web s'exécute sur le port 80. Faisons-le alors.

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Sur la ligne ci-dessus, A signifie append signifie que nous ajoutons une nouvelle règle à la liste iptables. INPUT signifie la chaîne INPUT. P signifie protocole et dport signifie port de destination. Par défaut, tout serveur Web s'exécute sur le port 80. De même, vous pouvez également autoriser le port SSH.

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Par défaut, SSH s'exécute sur le port 22. Mais il est recommandé de ne pas exécuter SSH sur le port 22. Exécutez toujours SSH sur un autre port. Pour exécuter SSH sur un autre port, ouvrez le fichier /etc/ssh/sshd_config sur votre éditeur préféré et remplacez le port 22 par un autre port.

Disons que nous voulons bloquer le port 135. Nous pouvons le faire en

sudo iptables -A INPUT -p tcp --dport 135 -j DROP

si vous souhaitez empêcher votre serveur d'initier toute connexion SSH du serveur vers un autre hôte/serveur, exécutez la commande suivante

sudo iptables -A OUTPUT -p tcp --dport 22 -j DROP

Ce faisant, personne ne peut utiliser votre serveur pour établir une connexion SSH à partir du serveur. La chaîne OUPUT filtrera et supprimera toute connexion TCP sortante vers un autre hôte.

Autoriser une adresse IP spécifique avec le port

sudo iptables -A INPUT -p tcp -s 0/0 --dport 22  -j ACCEPT

Ici, -s 0/0 représente toute source entrante avec n'importe quelle adresse IP. Il n'y a donc aucun moyen que votre serveur réponde à un paquet TCP dont le port de destination est 22. Si vous souhaitez autoriser uniquement une adresse IP particulière, utilisez la suivante.

sudo iptables -A INPUT -p tcp -s 12.12.12.12/32 --dport 22  -j ACCEPT

Dans l'exemple ci-dessus, vous autorisez uniquement l'adresse IP 12.12.12.12 à se connecter au port SSH. Les adresses IP restantes ne pourront pas se connecter au port 22. De même, vous pouvez l'autoriser en utilisant les valeurs CIDR. Tel que

sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22  -j ACCEPT

L'exemple ci-dessus montre comment autoriser un bloc IP entier pour accepter la connexion sur le port 22. Il acceptera les adresses IP allant de 12.12.12.1 à 12.12.12.255.

Si vous souhaitez bloquer une telle plage d'adresses IP, faites l'inverse en remplaçant ACCEPT par DROP comme suit

sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22  -j DROP

Ainsi, cela ne permettra pas d'obtenir une connexion sur le port 22 à partir des adresses IP 12.12.12.1 à 12.12.12.255.

Blocage d'ICMP

Si vous souhaitez bloquer les requêtes ICMP (ping) vers et depuis votre serveur, vous pouvez essayer ce qui suit. Le premier empêchera de ne pas envoyer de demande d'écho ping ICMP à un autre hôte.

sudo iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP

Maintenant, essayez d'envoyer une requête ping à google.com. Votre serveur OpenSUSE ne pourra pas envoyer de requête ping à google.com.

Si vous souhaitez bloquer la demande d'écho ICMP (ping) entrante pour votre serveur, tapez simplement ce qui suit sur votre terminal.

sudo iptables -I INPUT -p icmp --icmp-type 8 -j DROP

Désormais, il ne répondra à aucune demande d’écho ping ICMP. Disons que l'adresse IP de votre serveur est 13.13.13.13. Et si vous cinglez cette adresse IP de votre serveur, vous verrez que votre serveur ne répond pas à cette requête ping.

Blocage du port MySql/MariaDB

Comme Mysql détient votre base de données, vous devez donc protéger votre base de données contre les attaches extérieures. Autorisez uniquement les adresses IP de votre serveur d'applications de confiance à se connecter à votre serveur MySQL. Pour bloquer les autres

sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

Ainsi, aucune connexion MySql ne sera nécessaire, à l'exception du bloc IP 192.168.1.0/24. Par défaut, MySql s'exécute sur le port 3306.

Bloquer SMTP

Si vous n'exécutez aucun serveur de messagerie sur votre serveur hôte ou si votre serveur n'est pas configuré pour agir comme un serveur de messagerie, vous devez bloquer SMTP afin que votre serveur n'envoie aucun spam ni aucun courrier vers aucun domaine. Vous devez faire cela pour bloquer tout courrier sortant de votre serveur. Faire cela,

sudo iptables -A OUTPUT -p tcp --dport 25 -j DROP

Bloquer les DDoS

Nous connaissons tous le terme DDoS. Pour vous en débarrasser, exécutez la commande suivante dans votre terminal.

iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT

Vous devez configurer la valeur numérique pour répondre à vos besoins. Ce n'est qu'une norme à maintenir.

Vous pouvez protéger davantage en

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling 
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog

Blocage de l'analyse des ports

Il existe des centaines de personnes pour analyser les ports ouverts de votre serveur et tenter de briser la sécurité de votre serveur. Pour le bloquer

sudo iptables -N block-scan
sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN
sudo iptables -A block-scan -j DROP

Ici, block-scan est le nom d'une nouvelle chaîne.

Bloquer les mauvais ports

Vous devrez peut-être également bloquer certains ports défectueux pour votre serveur. Voici comment procéder.

badport="135,136,137,138,139,445"
sudo iptables -A INPUT -p tcp -m multiport --dport $badport -j DROP
sudo iptables -A INPUT -p udp -m multiport --dport $badport -j DROP

Vous pouvez ajouter plus de ports selon vos besoins.

Firewalld fournit un pare-feu géré dynamiquement avec prise en charge des zones réseau/pare-feu qui définissent le niveau de confiance des connexions ou interfaces réseau. Il prend en charge les paramètres de pare-feu IPv4, IPv6, les ponts Ethernet et les ensembles IP. Il existe une séparation entre les options d'exécution et de configuration permanente. Il fournit également une interface permettant aux services ou applications d'ajouter directement des règles de pare-feu.

L'ancien modèle de pare-feu avec system-config-firewall/lokkit était statique et chaque modification nécessitait un redémarrage complet du pare-feu. Cela comprenait également le déchargement des modules du noyau Netfilter du pare-feu et le chargement des modules nécessaires à la nouvelle configuration. Le déchargement des modules cassait le pare-feu dynamique et les connexions établies. Le démon du pare-feu, quant à lui, gère le pare-feu de manière dynamique et applique les modifications sans redémarrer l'ensemble du pare-feu. Il n'est donc pas nécessaire de recharger tous les modules du noyau du pare-feu. Mais l'utilisation d'un démon de pare-feu nécessite que toutes les modifications du pare-feu soient effectuées avec ce démon pour garantir que l'état du démon et celui du pare-feu dans le noyau sont synchronisés. Le démon de pare-feu ne peut pas analyser les règles de pare-feu ajoutées par les outils de ligne de commande iptables et ebtables. Le démon fournit des informations sur les paramètres de pare-feu actifs actuels via D-BUS et accepte également les modifications via D-BUS à l'aide des méthodes d'authentification PolicyKit.

Ainsi, firewalld utilise des zones et des services au lieu d'une chaîne et de règles pour effectuer les opérations et peut gérer les règles de manière dynamique, permettant les mises à jour et les modifications sans interrompre les sessions et les connexions existantes.

Il a les fonctionnalités suivantes.

  • API D-Bus.
  • Règles de pare-feu temporisées.
  • Rich Language pour des règles de pare-feu spécifiques.
  • Prise en charge des NAT IPv4 et IPv6.
  • Zones de pare-feu.
  • Prise en charge des ensembles IP.
  • Journal simple des paquets refusés.
  • Interface directe.
  • Verrouillage : Liste blanche des applications susceptibles de modifier le pare-feu.
  • Prise en charge des backends de pare-feu iptables, ip6tables, ebtables et ipset.
  • Chargement automatique des modules du noyau Linux.
  • Intégration avec Puppet.

Pour en savoir plus sur firewalld, veuillez visiter ce lien.

Avant d'installer pare-feu, assurez-vous d'arrêter iptables et assurez-vous également qu'iptables n'est plus utilisé ou ne fonctionne plus. Faire cela,

sudo systemctl stop iptables

Cela arrêtera iptables de votre système.

Et puis assurez-vous que iptables ne sont plus utilisés par votre système en exécutant la commande ci-dessous dans le terminal.

sudo systemctl mask iptables

Maintenant, vérifiez l'état d'iptables.

sudo systemctl status iptables

Nous sommes maintenant prêts à installer firewalld sur notre système.

Pour Ubuntu

Pour l'installer sur Ubuntu, vous devez d'abord supprimer UFW, puis vous pouvez installer Firewalld. Pour supprimer UFW, exécutez la commande ci-dessous sur le terminal.

sudo apt-get remove ufw

Après avoir supprimé UFW, exécutez la commande ci-dessous dans le terminal

sudo apt-get install firewall-applet

Ou

Vous pouvez ouvrir le Centre logiciel Ubuntu et rechercher « applet de pare-feu », puis l'installer sur votre système Ubuntu.

Pour RHEL, CentOS et Fedora

Tapez la commande ci-dessous pour installer firewalld sur votre système CentOS.

sudo yum install firewalld firewall-config -y

Avant de configurer Firewalld, nous devons connaître l'état de Firewalld après l'installation. Pour le savoir, tapez ce qui suit.

sudo systemctl status firewalld

Comme firewalld fonctionne par zones, nous devons vérifier toutes les zones et tous les services, même si nous n'avons pas encore effectué de configuration.

Pour les zones

sudo firewall-cmd --get-active-zones

ou

sudo firewall-cmd --get-zones

Pour connaître la zone par défaut, exécutez la commande ci-dessous

sudo firewall-cmd --get-default-zone

Et, Pour les services

sudo firewall-cmd --get-services

Ici, vous pouvez voir les services couverts par firewalld.

Une remarque importante est qu'après chaque modification, vous devez recharger firewalld pour que vos modifications puissent prendre effet.

Pour définir la zone par défaut

sudo firewall-cmd --set-default-zone=internal

ou

sudo firewall-cmd --set-default-zone=public

Après avoir modifié la zone, vérifiez si elle change ou non.

sudo firewall-cmd --get-default-zone
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp

Cela ajoutera le port TCP 80 dans la zone publique de firewalld. Vous pouvez également ajouter le port souhaité en remplaçant 80 par le vôtre.

Rechargez maintenant le pare-feu.

sudo firewall-cmd --reload

Maintenant, vérifiez l’état pour voir si le port TCP 80 a été ajouté ou non.

sudo firewall-cmd --zone=public --list-ports

Ici, vous pouvez voir que le port TCP 80 a été ajouté.

Ou même vous pouvez essayer quelque chose comme ça.

sudo firewall-cmd --zone=public --list-all

Pour supprimer le port TCP 80 de la zone publique, tapez ce qui suit.

sudo firewall-cmd --zone=public --remove-port=80/tcp

Vous verrez un texte « succès » résonner dans votre terminal.

Vous pouvez également indiquer le port souhaité en remplaçant 80 par votre propre port.

Pour ajouter le service FTP dans Firewall, exécutez la commande ci-dessous

sudo firewall-cmd --zone=public --add-service=ftp

Vous verrez un texte « succès » résonner dans votre terminal.

De même, pour ajouter le service SMTP, exécutez la commande ci-dessous

sudo firewall-cmd --zone=public --add-service=smtp

Remplacez ftp et smtp par votre propre service que vous souhaitez ajouter dans le pare-feu.

Pour supprimer les services ftp et smtp de firewalld, exécutez la commande ci-dessous dans le terminal.

sudo firewall-cmd --zone=public --remove-service=ftp
sudo firewall-cmd --zone=public --remove-service=smtp

Si vous le souhaitez, vous pouvez bloquer tous les paquets/connexions entrants ou sortants à l'aide de pare-feu. C'est ce qu'on appelle la « panique » de firewalld. Pour ce faire, exécutez la commande ci-dessous.

sudo firewall-cmd --panic-on

Vous verrez un texte « succès » résonner dans votre terminal.

Après cela, vous ne pourrez plus envoyer de requête ping à un hôte ni même parcourir de sites Web.

Pour désactiver cela, exécutez la commande ci-dessous dans votre terminal.

sudo firewall-cmd --panic-off
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" accept'

Ce faisant, firewalld acceptera les paquets IP v4 de l'IP source 192.168.1.4.

De même, pour bloquer toute adresse IP

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" reject'

Ce faisant, firewalld supprimera tous les paquets IP v4 de l'IP source 192.168.1.4.

Je suis resté fidèle aux bases de Firewalld ici afin que vous puissiez facilement en comprendre la méthodologie de travail et ses différences avec iptables.

C'est tout pour aujourd'hui. J'espère que vous apprécierez la lecture de cet article.

Prends soin de toi.

Articles connexes: