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.