Debian logo [inetdoc.LINUX]

9. Fonctions réseau d'une interface

Sur tous les systèmes, un certain nombre de paramètres sont actifs par défaut sur les interfaces réseau. Avec le noyau Linux, ces paramètres sont placés dans le système de fichiers virtuel /proc.

9.1. Comment visualiser les paramètres du noyau ?

Dans le noyau Linux, la granularité du paramètrage de la pile de protocoles TCP/IP est très fine. Aussi le nombre de paramètres est important. Il suffit de visualiser le résultat des commandes ls /proc/sys/net/ipv4/ ou sysctl -A |grep net pour le constater.

Voici un petit script appelé show_proc.sh qui permet de visualiser les paramètres par protocole ou catégorie et leurs valeurs :

#!/bin/bash

for param in `find /proc/sys -type f -name "*$1*"`; do
 echo $param = `cat $param`
 done

Dans le cas des réglages ICMP on obtient le résultat suivant avec un noyau de distribution standard :

# ./bin/show_proc.sh icmp
/proc/sys/net/ipv4/netfilter/ip_conntrack_icmp_timeout = 30
/proc/sys/net/ipv4/icmp_ratemask = 6168
/proc/sys/net/ipv4/icmp_ratelimit = 1000
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses = 0
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts = 0
/proc/sys/net/ipv4/icmp_echo_ignore_all = 0

9.2. Comment changer les valeurs des paramètres ?

Pour changer les valeurs par défaut attribuées dans le noyau, il existe au moins trois solutions :

  • La première solution consiste à affecter les valeurs individuellement. Prenons l'exemple célèbre de la fonction de routage des paquets IP du noyau avec un extrait du guide NAT-HOWTO :

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  • La seconde solution utilise le fichier de configuration /etc/sysctl.conf de la commande sysctl appartenant au paquet procps. Ce fichier de configuration n'est pas limité aux fonctions réseau du noyau Linux comme le montre le résultat de la commande sysctl -A. Voici un exemple très simple de fichier /etc/sysctl.conf :

    # Activation de protection contre les mauvais messages d'erreurs ICMP
    net.ipv4.icmp_ignore_bogus_error_responses=1
    

    La commande sysctl -p active l'ensemble des valeurs indiquées dans le fichier ce configuration. On obtient alors :

    # ./bin/show_proc.sh icmp_ignore_bogus_error_responses
    /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses = 1
    

    Comme le fichier /etc/sysctl.conf est lu à chaque démarrage du système, les valeurs des paramètres ajustés seront reprises. Ce fichier de configuration est un moyen pratique de conserver les paramètres personnels des fonctions réseau d'une interface.

  • La troisième solution est présentée dans la section «Sécurations des accès réseau» du Manuel de sécurisation de Debian.

9.3. Travaux pratiques

Voici un exemple de fichier de configuration /etc/sysctl.conf type :

# Refuser la prise en charge des requêtes ARP pour d'autres hôtes
net.ipv4.conf.all.proxy_arp = 0

# Ignorer les mauvais messages d'erreurs ICMP
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignorer les messages de diffusion ICMP
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Journaliser les adresses sources falsifiées ou non routables
net.ipv4.conf.all.log_martians = 1

# Refuser les adresses sources falsifiées ou non routables
net.ipv4.conf.all.rp_filter = 1

# Refuser les messages ICMP redirect
net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.all.send_redirects = 0

# Refuser le routage source
net.ipv4.conf.all.accept_source_route = 0

1.

Quels sont les tests de communication ICMP à effectuer pour mettre en évidence le résultat du paramètre net.ipv4.icmp_echo_ignore_broadcasts = 1 ?

Retrouver l'adresse de diffusion du réseau local à utiliser avec la commande ping.

2.

Quels sont les tests de communication ICMP à effectuer pour mettre en évidence la journalisation des adresses falsifiées ?

La commande ping ne permet pas de modifier l'adresse source d'un message ICMP de type 8 (echo request). Il est donc nécessaire d'utiliser un autre outil tel que hping2. Voici 2 exemples d'utilisation de cette commande :

  • Syntaxe équivalente à celle de la commande ping :

    # hping2 -n -c 4 -1 192.168.1.1
    HPING 192.168.1.1 (eth1 192.168.1.1): icmp mode set, 28 headers + 0 data bytes
    len=46 ip=192.168.1.1 ttl=64 id=60429 icmp_seq=0 rtt=1.5 ms
    len=46 ip=192.168.1.1 ttl=64 id=60430 icmp_seq=1 rtt=1.4 ms
    len=46 ip=192.168.1.1 ttl=64 id=60431 icmp_seq=2 rtt=1.4 ms
    len=46 ip=192.168.1.1 ttl=64 id=60432 icmp_seq=3 rtt=1.4 ms
    
    --- 192.168.1.1 hping statistic ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 1.4/1.5/1.5 ms
    
  • Syntaxe utilisant l'adresse source falsifiée 192.168.2.2 :

    # hping2 -n -c 4 -1 -a 192.168.2.2 192.168.1.1
    HPING 192.168.1.1 (eth1 192.168.1.1): icmp mode set, 28 headers + 0 data bytes
    
    --- 192.168.1.1 hping statistic ---
    4 packets transmitted, 0 packets received, 100% packet loss
    round-trip min/avg/max = 0.0/0.0/0.0 ms
    

    Résultat produit dans le journal système de l'hôte 192.168.1.1 :

    kernel: martian source 192.168.1.1 from 192.168.2.2, on dev eth0
    kernel: ll header: 00:04:75:fd:13:cd:00:0d:bc:ef:a6:8e:08:00
    kernel: martian source 192.168.1.1 from 192.168.2.2, on dev eth0
    kernel: ll header: 00:04:75:fd:13:cd:00:0d:bc:ef:a6:8e:08:00
    kernel: martian source 192.168.1.1 from 192.168.2.2, on dev eth0
    kernel: ll header: 00:04:75:fd:13:cd:00:0d:bc:ef:a6:8e:08:00
    kernel: martian source 192.168.1.1 from 192.168.2.2, on dev eth0
    kernel: ll header: 00:04:75:fd:13:cd:00:0d:bc:ef:a6:8e:08:00
    

9.4. Pour aller plus loin !

Les quelques paramètres des fonctions réseau du noyau Linux présentés ci-avant ne constituent qu'une infime partie. Le document Ipsysctl tutorial présente l'ensemble des paramètres utilisables pour ajuster le fonctionnement de la pile de protocoles TCP/IP.