web-dev-qa-db-ja.com

Linuxで動的静的エントリを使用してARPスプーフィングを防止する

ARPスプーフィングの検出/防止は、ここでは非常に人気があるようです。 port stealing のような他のテクニックを別にして、次の方法でそれを防ぐことができるかどうか疑問に思っています:

Linuxワークステーションがネットワーク接続を取得するたびに、その瞬間に取得したデフォルトゲートウェイのMACアドレスで指定された静的ARPエントリを自動追加できました。 (おそらく、ゲートウェイNICは後でMACを変更するだけではありません。)

DebianベースのGNU/Linuxの/etc/network/if-{up,down}.d(または/etc/NetworkManager/dispatcher.dのどこにでもを挿入できる次のスクリプトのようなものとして実装されています使用されている):

#!/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

接続が確立された直後に競合状態が発生すると思いますが、それ以外は、デフォルトゲートウェイのMACを保護するためにこのように軽量で十分機能します設定して忘れてしまいませんか?wifiローミングの邪魔になりますか?その他の考慮事項はありますか?

8
K3---rnc

私はあなたのスクリプトを分析しませんでした。ただし、複雑に見えます。

ARPtablesを使用しないのはなぜですか? IPtablesに似ていますが、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

この方法では、ルーターとのみARPパケットを交換します。

ソース: http://linux-audit.com/filtering-arp-traffic-with-linux-arptables/

3
Nate

しばらく前、私は同じ問題に悩まされてきました。ARPスプーフィングを防ぐことです。

既にスプーフィングされたネットワークに接続するまで、提供したスクリプトを使用できます。

つまり、ネットワークに参加すると、SOは自動的にARPエントリを正しいMACアドレスで正しいゲートウェイに追加しますが、その瞬間に偽のARPパケットを受信した場合、スクリプトを実行すると、偽のMACアドレスが信頼されます。

dispatcher.dを使用しているため、少し難しくなりますが、大丈夫です。

私が取ったもう1つのアプローチは、私の一般的なネットワークのMACアドレスのホワイトリストを作成し、デフォルトゲートウェイのMACアドレスが信頼できるリストにあるかどうかを確認するためにARPテーブルでチェックするタスクでした。そうでない場合は、自動的に切断して通知してください。

1
Fábio Pires