Vérifier la configuration du pare-feu et les paramètres réseau (Linux)

Cet article énumère les commandes les plus importantes dont vous avez besoin pour vérifier la configuration du réseau et du pare-feu.

Effectuer un scan des ports

Pour effectuer un scan de port, vous pouvez utiliser le programme netcat. netcat (nc), est un outil de ligne de commande universel. Il peut être utilisé dans le terminal ou dans des scripts pour la communication sur des connexions réseau TCP et UDP (Protocole Internet Version 4 et Version 6).

Le programme netcat fait partie de toute installation Ubuntu, mais peut être installé via le paquet netcat-openbsd si nécessaire.

Pour installer netcat sur un serveur exécutant la distribution CentOS, entrez la commande suivante :

CentOS 7

[root@localhost ~]# yum install nc.x86_64
CentOS 8

[root@localhost ~]# dnf install nmap

 

Pour effectuer un scan de port avec netcat, entrez la commande suivante :

nc -v ADDRESSE-IP-DU-SERVEUR NUMERO-DE-PORT
Exemple :

[root@localhost ~]# nc -v 192.168.1.1 22

Vérifier les services de réseau

Pour obtenir une liste des services, des daemons et des programmes du réseau d'écoute, entrez la commande suivante :

netstat -tulips

Vous pouvez alors vérifier si les services, les daemons et les programmes du réseau concernés sont actifs et à l'écoute sur le bon port. De plus, après avoir entré la commande, vous pouvez déterminer si le port requis doit être déverrouillé.

Exemple :

[root@localhost ~]# netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      193        27635      1368/systemd-resolv
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          29477      1582/sshd
tcp6       0      0 :::5355                 :::*                    LISTEN      193        27638      1368/systemd-resolv
tcp6       0      0 :::22                   :::*                    LISTEN      0          29479      1582/sshd
udp        0      0 0.0.0.0:5355            0.0.0.0:*                           193        27634      1368/systemd-resolv
udp        0      0 127.0.0.53:53           0.0.0.0:*                           193        27640      1368/systemd-resolv
udp        0      0 0.0.0.0:68              0.0.0.0:*                           0          27510      1314/dhclient
udp        0      0 127.0.0.1:323           0.0.0.0:*                           0          25505      1174/chronyd
udp6       0      0 :::5355                 :::*                                193        27637      1368/systemd-resolv
udp6       0      0 ::1:323                 :::*                                0          25506      1174/chronyd

Vérifier la configuration du réseau

Pour afficher les interfaces configurées, entrez la commande ip addr. Après avoir entré la commande, l'état de chaque interface est affiché :

Exemple :

root@localhost:~# ip addr
1 : lo : <LOOPBACK,UP,LOWER_UP>mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.</LOOPBACK,UP,LOWER_UP>0.1<LOOPBACK,UP,LOWER_UP>/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2 : ens192 : <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:00:00:f1:5b brd ff:ff:ff:ff:ff:ff:ff
inet 217.</BROADCAST,MULTICAST,UP,LOWER_UP>1<BROADCAST,MULTICAST,UP,LOWER_UP>60.173.123/32 brd 217.160.173.123 scope global ens192
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe00:f15b/64 scope link
valid_lft forever preferred_lft forever</BROADCAST,MULTICAST,UP,LOWER_UP></LOOPBACK,UP,LOWER_UP>


Vous pouvez réactiver une interface désactivée avec la commande suivante :

sudo ifup NOM_DES_INTERFACES


Exemple :

[root@localhost ~]# sudo ifup ens192
Si cette commande échoue, l'interface peut se trouver dans un état inconnu du script de commande. Dans ce cas, entrez la même commande avec le paramètre --force :

sudo ifup --force NOM_DES_INTERFACES
Exemple :

[root@localhost ~]# sudo ifup --force ens192

Vérifiez ensuite si vous pouvez établir une connexion réseau cryptée avec votre serveur. Si cela n'est pas possible, vérifiez la configuration réseau du serveur.

Pour ce faire, ouvrez les fichiers de configuration énumérés ci-dessous avec l'éditeur vi. Vérifiez et modifiez les paramètres, puis redémarrez le réseau si nécessaire pour appliquer les changements à la configuration du réseau :

Ubuntu

/etc/network/interfaces

CentOS 7 et CentOS 8

/etc/sysconfig/network-scripts/


Pour redémarrer le réseau, entrez la ou les commandes suivantes :

Ubuntu

[root@localhost ~]# /etc/init.d/networking restart
CentOS 7

[root@localhost ~]# /etc/init.d/network restart
CentOS 8

[root@localhost ~]# nmcli networking off
[root@localhost ~]# nmcli networking on

Afficher et configurer la table de routage IP avec itinéraire

Vous pouvez utiliser le programme de routage pour afficher et configurer la table de routage IP. Pour ce faire, entrez la commande suivante :

[root@localhost ~]# route

Après avoir entré la commande, les informations suivantes s'affichent, par exemple :

[root@localhost home]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens192
gateway 0.0.0.0 255.255.255.255 UH 100 0 0 ens192
169.254.169.254 gateway 255.255.255.255 UGH 100 0 0 ens192
172.17.0.0 0.0.0.0.0 255.255.0.0 U 0 0 0 docker0
localhost 0.0.0.0 255.255.255.255.255 UH 100 0 0 ens192

Vérifier la configuration du pare-feu (CentOS 6, CentOS 7 et Ubuntu)

Le noyau Linux intègre par défaut un filtre de paquets, qui est fourni par des modules du logiciel Netfilter. Pour le configurer, un programme supplémentaire est nécessaire.

Si vous êtes un administrateur, vous pouvez utiliser le programme iptables pour créer, modifier ou supprimer des règles. iptables est un programme permettant de configurer les tables fournies par le pare-feu dans le noyau Linux.

Les réglages que vous faites avec iptables seront perdus au redémarrage. Vous pouvez utiliser les outils iptables-save et iptables-restore pour sauvegarder et restaurer les règles créées.

Attention

Chaque fois que vous apportez des modifications à iptables, assurez-vous que les ports nécessaires à l'accessibilité du serveur, comme le port 22, ne sont pas bloqués.

Avec un script d'initialisation, cela se fait automatiquement pendant le processus de démarrage. iptables est limité au protocole IPv4. Pour les autres protocoles, il existe des variantes correspondantes telles que ip6tables pour IPv6 ou ebtables pour les paquets Ethernet, qui sont également incluses dans le module du noyau.

Sous Linux, iptables est généralement préinstallé. iptables nécessite des privilèges système avancés et ne peut être exécuté qu'en tant que root ou avec des privilèges d'administrateur.
La vérification des paquets et les règles de filtrage à créer avec iptables ont une structure à trois niveaux. Il y a des tables, des chaînes et des règles.

Les tables chargées avec le programme et précédemment créées par le noyau contiennent des chaînes de règles qui définissent comment les paquets de données entrants et sortants doivent être traités. Ces paquets sont transmis d'une règle à l'autre au sein d'une chaîne. Chaque règle peut déclencher une action (cible de saut) ou passer à une autre chaîne (chaîne goto).

Les actions suivantes peuvent être déclenchées :

ACCEPT : Le paquet est accepté.

DROP : Le paquet est abandonné.

QUEUE : Déplace le paquet dans les processus utilisateurs ; nécessite un gestionnaire de file d'attente qui transmet les paquets à une application.

RETURN : Le paquet est renvoyé à la chaîne précédente, s'il s'agit d'une chaîne définie par l'utilisateur. Dans les chaînes standard, la politique de la chaîne est exécutée. Sans configuration, l'action ACCEPT est exécutée par défaut.

Tableaux

Les règles de filtrage sont regroupées dans les tableaux. Ceux-ci sont répartis en fonction de la tâche de base. Il existe quatre tableaux importants dans lesquels vous pouvez stocker les règles de filtrage :

filtre : Il s'agit du tableau par défaut.

nat : Utilisé pour modifier les paquets qui établissent une nouvelle connexion et qui sont utilisés pour la traduction d'adresse réseau (NAT).

mangle : Cette table est généralement utilisée pour certains types de manipulation de paquets.

raw : Ce tableau est généralement utilisé pour définir les exceptions de suivi de connexion en combinaison avec la cible NOTRACK.

Chaines

Chaque tableau contient des chaînes différentes. Les chaînes déterminent le moment où un paquet est contrôlé. Il y a les chaînes suivantes :

Chaîne Tableau Description
INPUT filter, mangle S'applique à tous les paquets dirigés vers un processus local.
OUTPUT filter, nat, mangle, raw S'applique à tous les paquets provenant d'un processus local.
FORWARD filter, mangle S'applique à tous les paquets qui sont acheminés.
PREROUTING nat, mangle, raw S'applique à tous les paquets avant qu'ils ne soient acheminés.
POSTROUTING nat, mangle S'applique à tous les paquets après leur acheminement.

Les ensembles de règles de filtrage sont définis dans les tableaux et les chaînes. Cela se fait en appelant iptables dans le terminal.

Un aperçu détaillé du fonctionnement du logiciel de filtrage de paquets est fourni dans la page de manuel. Vous pouvez l'appeler avec la commande suivante :

[root@localhost ~]# man iptables
Vous trouverez également plus d'informations sur la page suivante :

http://www.netfilter.org

Pour afficher le comportement par défaut d'iptables, entrez la commande suivante :

[root@localhost ~]# iptables -L

Pour vérifier quelles règles de filtrage sont déjà stockées, entrez les commandes suivantes :

[root@localhost ~]# sudo iptables -t filter -L

[root@localhost ~]# sudo iptables -t nat -L

[root@localhost ~]# sudo iptables -t mangle -L

[root@localhost ~]# sudo iptables -t raw -L
Pour supprimer toutes les règles, entrez la commande suivante :

[root@localhost ~]# iptables -F

Autres commandes importantes

D'autres commandes importantes pour iptables sont énumérées ci-dessous.


Créer une nouvelle chaîne :

sudo iptables -N NOM_DE_LA_CHAINE
Exemple :

[root@localhost ~]# sudo iptables -N Test

 

Supprimer une chaîne :

sudo iptables -X NOM_DE_LA_CHAINE
Exemple :

[root@localhost ~]# sudo iptables -X Test

 

Liste des règles de la chaîne nommée Test :

sudo iptables -L NOM_DE_LA_CHAINE


Exemple : Exemple :

[root@localhost ~]# sudo iptables -L Test

 

Supprimer les règles dans la chaîne Test :

sudo iptables -F NOM_DE_LA_CHAINE
Exemple :

[root@localhost ~]# sudo iptables -F Test

 

Définir une politique pour la chaîne :

Dans l'exemple ci-dessous, le paquet est automatiquement accepté si les règles de filtrage de la chaîne INPUT ne s'appliquent pas.

[root@localhost ~]# sudo iptables -P INPUT ACCEPT

 

Attacher une nouvelle règle à une chaîne sélectionnée :

sudo iptables -A NOM_DE_LA_CHAINE -s ADDRESSE-IP -j DROP
Dans l'exemple ci-dessous, la règle permettant de déposer des paquets de données à partir de l'adresse IP 217.160.172.48 est ajoutée à la chaîne Test.

[root@localhost ~]# sudo iptables -A Test -s 217.160.172.48 -j DROP

 

Supprimez la règle spécifiée dans la chaîne sélectionnée :

sudo iptables -D NOM_DE_LA_CHAINE -s ADRESSE-IP -j DROP
Exemple :

[root@localhost ~]# sudo iptables -D Test -s 217.160.172.48 -j DROP

 

Insérez la nouvelle règle à la position sélectionnée dans la chaîne :

sudo iptables -I NOM_DE_LA_CHAINE 1 -s ADDRESSE-IP -j DROP
Dans cet exemple, la chaîne est insérée à la position 1.

Exemple :

[root@localhost ~]# sudo iptables -I Test 1 -s 217.160.172.48 -j DROP

 

Supprimez la règle de la chaîne sélectionnée en précisant la position :

sudo iptables -D NOM_DE_LA_CHAINE 1
Exemple :

[root@localhost ~]# sudo iptables -D Test 1

Sauvegarder les résultats

Pour enregistrer de façon permanente dans un fichier les réglages que vous effectuez avec iptables, entrez la commande suivante :

Ubuntu

sudo iptables-save > /etc/iptables/rules.v4
CentOS

iptables-save > /etc/sysconfig/iptables

 

Pour recharger le fichier pour IPv4, entrez la commande suivante :

Debian/Ubuntu

iptables-restore /etc/iptables/rules.v4
CentOS

iptables-restore /etc/sysconfig/iptables

 

Pour charger les règles automatiquement, vous pouvez utiliser les méthodes suivantes :

Ubuntu

Avec iptables-persistent, les règles du pare-feu sont stockées dans les fichiers de configuration sous /etc/iptables/. Ceux-ci sont rechargés au démarrage du serveur et sont donc réactivés. À cette fin, les règles doivent être stockées dans le fichier /etc/iptables/rules.v4 pour IPv4.

Pour utiliser iptables-persistent, vous devez installer le paquet suivant :

apt-get install iptables-persistent

CentOS 7

Pour sauvegarder définitivement les règles iptables, le service iptables-services doit être installé.

yum install -y iptables-services
Pour pouvoir continuer à utiliser iptables, le service firewalld doit d'abord être désactivé.

systemctl stop firewalld
systemctl mask firewalld

Ensuite, le service doit être activé.

systemctl enable iptables.service
systemctl -t service | grep iptables

Les règles sont stockées dans le fichier /etc/sysconfig/iptables pour IPv4.

Le script suivant peut également être utilisé pour sauvegarder les règles actuelles :

[root@localhost ~]# /usr/libexec/iptables/iptables.init save

Note

Après avoir configuré iptables et enregistré les règles de façon permanente, vérifiez qu'elles sont bien chargées après le redémarrage du serveur.

Vous pouvez afficher les règles après avoir redémarré avec la commande suivante :

iptables -L
Alternativement, vous pouvez entrer la commande suivante pour vérifier le statut d'ip-tables :

systemctl stautus iptables.service

Vérifier la configuration du pare-feu (CentOS 8)

CentOS 8 met en place des pare-feu avec l'infrastructure nftables par défaut et utilise nftables comme backend par défaut.

Par défaut, nftables ne crée pas de tableaux et de chaînes comme son prédécesseur iptables. En tant qu'administrateur, vous créez d'abord les tables et y ajoutez des chaînes, qui s'accrochent dans le noyau Linux comme des crochets de netfilter. Ensuite, vous créez les règles appropriées pour les chaînes.

D'autres différences importantes entre les nftables et les iptables sont :

  • Les tableaux et les chaînes sont entièrement configurables.

  • Il n'y a plus de distinction entre les correspondances et les cibles.

  • Vous pouvez spécifier plusieurs actions dans une seule règle.

  • Meilleure prise en charge des mises à jour dynamiques des ensembles de règles.


Pour plus d'informations sur les différences entre iptables et nftables :

https://wiki.nftables.org/wiki-nftables/index.php/Main_differences_with_iptables

Syntaxe des commandes

Les commandes de base pour les tableaux, les chaînes et les règles sont toujours structurées comme suit :

nft <add|list|flush|delete> <table|chain|rule> <AutresOptions>

Créer un tableau

Pour créer un tableau et un ensemble de règles, entrez la commande suivante :

[root@localhost ~]# nft add table inet my_table
nft list ruleset
table inet my_table { }


Pour créer une chaîne, entrez la commande ci-dessous. Lors de la création de la chaîne, vous devez préciser à quelle tableau la chaîne appartient. Vous devez également définir le type, le crochet et la priorité.

nft add chain inet my_table my_filtrer_chain { type filter hook input priority 0 \ ; }

Note

La barre oblique inversée (\) est nécessaire pour que le shell n'interprète pas le point-virgule comme la fin de la commande.

Les chaînes peuvent également être créées sans spécifier de crochet. Les chaînes que vous créez sans spécifier de crochet sont équivalentes aux chaînes iptables personnalisées. Les règles peuvent utiliser les déclarations "jump" ou "goto" pour exécuter les règles dans la chaîne. Cela est utile pour séparer logiquement des règles ou pour partager un sous-ensemble de règles qui, autrement, existeraient deux fois.

L'une des principales innovations des nftables est le concept de familles : les nftables fournissent un certain nombre de familles d'adresses pour la création de règles. Les prédéfinis sont arp (ARP), bridge (précédemment fourni par Ebtables), inet (comprend IPv4 et IPv6), ip (pour IPv4), ip6 (pour IPv6) et netdev. Tous les tableaux apparentés doivent être de la même famille. Ceci est particulièrement pertinent pour la génération de tableaux et de chaînes.

Par exemple, pour créer une règle pour la chaîne qui permet une connexion SSH, entrez la commande suivante :

nft add rule address family my_table my_filter_chain tcp dport ssh accept
Exemple :

root@localhost ~]# nft add rule inet my_table my_filter_chain tcp dport ssh accept
La suppression des règles se fait à l'aide de gestionnaires de règles. Pour supprimer une règle, vous devez trouver l'identifiant de la règle que vous souhaitez supprimer. Exemple :

[root@localhost ~]# nft --handle list ruleset
table inet my_table { # handle 21
chain my_filter_chain { # handle 1
type filter hook input priority 0 ; policy accept ;
tcp dport http accept # handle 3
tcp dport 1234 accept # handle 8
tcp dport nfs accept # handle 7
tcp dport ssh accept # handle 2 }

}

Vous utilisez ensuite la poignée pour supprimer la règle. Pour ce faire, entrez la commande suivante :

nft delete rule [<family>] <table><chain>[handle</chain></table></family><handle>]</handle>
Exemple :

[root@localhost ~]# nft delete rule inet my_table my_filter_chain handle 8
[root@localhost ~]# nft --handle list ruleset
table inet my_table { # handle 21
chain my_filter_chain { # handle 1
type filter hook input priority 0 ; policy accept ;
tcp dport http accept # handle 3
tcp dport nfs accept # handle 7
tcp dport ssh accept # handle 2 }

}

Lister les règles

Pour lister un tableau, utilisez les commandes suivantes :

nft list tables [<family>]
<family ><name> nft</name></family> list table []<family ><name> [-n] [-a]
nft (add | delete | flush) table</name></family></family> [<name><family >]</family></name> <name>

Pour appeler toutes les règles d'un tableau particulier, entrez la commande suivante :

[root@localhost ~]# nft list table inet my_table
table inet my_table {
chain my_filter_chain {
type filter hook input priority 0 ; policy accept ;
tcp dport http accept
tcp dport nfs accept
tcp dport ssh accept }



Pour appeler toutes les règles d'une chaîne, entrez la commande suivante :[root@localhost ~]# nft list chain inet my_table my_other_chain
table inet my_table {
chain my_filter_chain { udp
dport 12345 log prefix "UDP-12345" }

}


Avec la commande suivante, vous pouvez sauvegarder un ensemble de règles :

nft list ruleset > /root/nftables.conf

Vous pouvez créer un ensemble de règles avec la commande suivante :

nft -f /root/nftables.conf

Pour activer le service systemd et faire rétablir vos règles au redémarrage, entrez la commande suivante :

systemctl enable nftables
nft list ruleset > /etc/sysconfig/nftables.conf

Vous pouvez trouver plus d'informations sur les nftables ici :

https://wiki.nftables.org/wiki-nftables/index.php/Main_Page