在 Linux 上使用动态静态条目防止 ARP 欺骗

信息安全 linux ARP欺骗 Debian
2021-08-17 00:16:14

ARP 欺骗检测/预防在这里似乎很流行。除了端口窃取等其他技术,我想知道以下是否可以防止它:

每当我的 Linux 工作站获得网络连接时,我可以自动添加一个静态 ARP 条目,该条目使用当时获得的默认网关的 MAC 地址指定。(据推测,网关 NIC 不只是在事后更改它们的 MAC。)

实现为类似于以下脚本的东西,可以放入/etc/network/if-{up,down}.d基于 Debian 的 GNU/Linux(或/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漫游?还有其他考虑吗?

2个回答

我没有分析你的脚本。然而,它看起来很复杂。

为什么不使用 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/

前段时间,我遇到了同样的问题:防止 ARP 欺骗。

使用您提供的脚本将起作用,直到您连接到已经欺骗的网络。

我的意思是,当您加入网络时,您的 SO 会自动将 ARP 条目添加到具有正确 MAC 地址的正确网关,但如果在那个正确的时刻您收到欺骗性 ARP 数据包,在您运行脚本之前,您将信任假MAC地址。

因为您使用的是 ,所以会有点困难dispatcher.d,但是没关系。

我采取的另一种方法是为我的公共网络创建一个 MAC 地址白名单,并通过 ARP 表检查一个任务,以查看我的默认网关 MAC 地址是否在我的受信任列表中。如果没有,只需自动断开连接并通知我。