web-dev-qa-db-fra.com

Empêcher l'entrepoiffage ARP avec une entrée statique dynamique sur Linux

La détection/prévention de l'entrepooftage ARP semble être assez populaire ici. Avec d'autres techniques telles que port volant Mis à part, je me demande si ce qui suit pourrait travailler pour l'empêcher:

Chaque fois que mon poste de travail Linux obtient une connexion réseau, je pourrais ajouter automatiquement une entrée ARP statique désignée avec l'adresse MAC de la passerelle par défaut ainsi obtenue à ce moment-là. (Soi-disant, la passerelle Nics ne change pas simplement leurs macs après.)

Mis en œuvre comme quelque chose à l'autre du script suivant qui peut être mis en /etc/network/if-{up,down}.d sur un GNU/Linux basé à Debian (ou dans /etc/NetworkManager/dispatcher.d partout où ça est utilisé):

#!/bin/sh

# If not Debian, account for NetworkManager's dispatcher.d
IFACE="${IFACE:-$1}" MODE="${MODE:-$2}"

# Support eth/wlan/wwan interfaces
case "$IFACE" in en*|eth*|wl*|ww*) ;; *) exit 0; esac

neighbors="/run/ifup.$(basename "$0").$IFACE"

case "$MODE" in
    start|*up*)
        sleep 6
        arp -an -i "$IFACE" | cut -d' ' -f 2,4 | tr -d '()' > "$neighbors"
        while read Host hwaddr; do arp -s $Host $hwaddr; done < "$neighbors"
        ;;
    stop|*down*)
        [ ! -f "$neighbors" ] && exit 0
        while read Host _hwaddr; do arp -d $Host; done < "$neighbors"
        rm "$neighbors"
        ;;
esac

Je suppose qu'il existe une condition de course juste après la création de la connexion, mais autre que cela, pour sécuriser le Mac de la passerelle par défaut si rien d'autre, serait quelque chose de léger comme ce travail et de bien fonctionner Pour la définir et l'oublier? serait-il dans la voie du wifi itinérant? Y a-t-il d'autres considérations?

8
K3---rnc

Je n'ai pas analysé votre script. Cependant, il a l'air complexe.

Pourquoi n'utilisez-vous pas arptables? C'est comme des iptables, mais pour ARP.

Block ARP traffic from all machines (default: DENY)
arptables -P INPUT DROP

Allow router (fixed ARP)
arptables -A INPUT --source-mac d8:d7:21:22:5a:f4 -j ACCEPT

De cette façon, vous n'échangerez que des paquets ARP avec votre routeur.

Source: http://linux-audit.com/filtering-arp-Traffic-with-linux-Arptables/

3
Nate

Il y a quelque temps, j'ai été coincé avec le même problème: empêcher l'éclabonnement d'arp.

L'utilisation du script que vous fournissez fonctionnera, jusqu'à ce que vous vous connectiez au réseau déjà usurisé.

Je veux dire, lorsque vous vous joignez à un réseau, votre SO Automaticaly ajoutez une entrée ARP à la bonne passerelle avec une adresse MAC correcte, mais si dans ce moment, vous recevez un paquet ARP bloqué, avant de vous Exécutez votre script, vous ferez confiance à la fausse adresse MAC.

Ce sera un peu plus difficile puisque vous utilisez le dispatcher.d, mais d'accord.

L'autre approche que j'ai prise était de créer une hiteliste d'adresse MAC pour mes réseaux communs et une tâche à vérifier par table ARP afin de voir si mon adresse MAC de passerelle par défaut est dans ma liste de confiance. Sinon, il suffit de vous déconnecter automatiquement et de m'avoir notifier.

1
Fábio Pires