我有一个包含 20 个树莓派(客户端)和 1 个服务器的网络。我想检查客户端请求的 MAC,可以吗?
此外,可能在客户不知道(也不可见)的情况下吗?
注意:我的目的是检查客户是否是假货/仿制品。 NB2:我已经运行了 VPN 选项。但我还是想检查一下MAC。
答案1
你的服务器是Linux主机吗?
如果您有客户端白名单,则可以iptables
仅在特定输入端口上接受来自它们的请求。您还可以在 dmesg 中记录来自不良客户端的请求。
以下脚本定义MACCHECK
链以接受来自已批准的 3 个 MAC 的数据包,并通过日志记录丢弃其他数据包。然后将INPUT
链中的所有 tcp/80 或 tcp/443 数据包路由到MACCHECK
.
iptables -N MACCHECK
iptables -A MACCHECK -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -A MACCHECK -m mac --mac-source yy:yy:yy:yy:yy:yy -j ACCEPT
iptables -A MACCHECK -m mac --mac-source zz:zz:zz:zz:zz:zz -j ACCEPT
iptables -A MACCHECK -m limit --limit 3/hour -j LOG --log-prefix "Bad host: "
iptables -A MACCHECK -j DROP
iptables -A INPUT -p tcp -m tcp --dport 80 -j MACCHECK # Checking all HTTP requests
iptables -A INPUT -p tcp -m tcp --dport 443 -j MACCHECK # Checking all HTTPS requests
请注意,您的所有客户端都应与服务器位于同一网络中。
答案2
如果有一个直接的Raspberry Pi 和客户端之间的连接,即没有路由和两者都在同一个部分, 这是可能的。只需使用 ARP 解析,例如:arp <client_ip_address>
。
答案3
仅当客户端位于同一网段(即中间没有路由器(交换机也可以))时,才能检查客户端的 MAC。您可以通过跟踪路由看到这一点:如果您traceroute 192.0.2.1
从服务器运行,其中 192.0.2.1 是其中一个设备的地址,则它必须仅报告单个跃点,即目标。娜莎的和yaegashi 的答案解释了如何做到这一点。
然而,即使可以,检查 MAC 并不能真正提供任何安全性,因为 MAC 很容易被伪造。大多数以太网设备都可以在软件中设置 MAC。
要识别硬件设备,基本上有一种方法:密码学。存储一个私钥并让它执行身份验证操作,证明它拥有私钥。
由于您显然正在使用网络应用程序,因此有一个工具可以实现此目的:TLS 客户端证书。使用 HTTPS 协议并让客户端使用其私钥向 Web 服务器进行身份验证。
不过,根据您使用此 VPN 的方式,它可能(或可能不)提供类似的功能。