【问题标题】:Determine incomin MAC address on Google ComputeEngine在 Google Compute Engine 上确定传入的 MAC 地址
【发布时间】:2026-01-05 15:40:01
【问题描述】:

我正在努力解决 Google ComputeEngine 上的 mac 地址过滤问题。

我有一个要求,我们有一个在服务器上运行的 Web 应用程序。将使用 Web 应用程序的相同用户也必须能够使用 scp 和 ssh 访问同一台服务器。

所以到目前为止的想法:

  1. 仅为网络应用启用 HTTPS - 工作
  2. 在禁用密码访问的情况下启用基于 DSA 的 KEY-ONLY ssh - 工作正常。
  3. 对 Web 应用程序和 ssh 启用 mac 过滤。这个想法是,未经授权的人甚至无法看到该服务器 IP 上有什么东西。

客户端IP过滤有点问题,因为在家里使用ADSL时IP会发生变化......

为了设置和测试这个,我在本地办公网络上使用了三台不同的机器,使用了以下环境: 在 VM (VMWare) 内运行的 CentOS 7 服务器。我启用了 IP 表并禁用了防火墙。然后我添加了以下规则:

这将只允许 ssh(端口 22)到 mac 地址

iptables -A INPUT -p tcp --dport 22 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT

现在拒绝其余的 ssh 尝试...

iptables -A INPUT -p tcp --dport 22 -j REJECT

在其他两台机器(一台 Windows 和一台 Ubuntu)上进行测试时,这对 ssh 100% 有效。到目前为止一切顺利。

我现在已经转移到 Google ComputeEngine 上的目标环境(运行 CentOS 7 VM)。但是,所有连接都显示与源相同的 MAC 地址。使用 arp -a 检索用户列表及其 mac 地址。

这是arp结果:

arp 
Address                  HWtype  HWaddress           Flags Mask            Iface
10.xxx.xxx.1               ether   xx:xx:xx:xx:xx:xx   C                     eth0

问题是使用不同的用户/不同的机器和不同的互联网服务提供商在 ComputeEngine 端都显示相同的 mac 地址(根据 arp)。

使用 gcloud 防火墙似乎无法过滤 mac 地址。所有可用的文档仅引用 ip/port 过滤。这就是我在转储现有防火墙规则(VM 外部)时得到的结果

gcloud compute firewall-rules list
NAME                   NETWORK SRC_RANGES    RULES                        SRC_TAGS TARGET_TAGS
default-allow-http     default 0.0.0.0/0     tcp:80                                http-server
default-allow-https    default 0.0.0.0/0     tcp:443                               https-server
default-allow-icmp     default 0.0.0.0/0     icmp
default-allow-internal default 10.240.0.0/16
tcp:1-65535,udp:1-65535,icmp
default-allow-rdp      default 0.0.0.0/0     tcp:3389
default-allow-ssh      default 0.0.0.0/0     tcp:22

有人知道我如何在 CentOS 虚拟机中检索正确的 mac 地址或使用 gcloud 防火墙来实现相同的目的吗?

【问题讨论】:

  • 你能学markdown吗?否则将<br> 放在每行的末尾是非常低效的。另外,通过在前面放置四个空格而不是引号来格式化您的代码

标签: google-compute-engine iptables mac-address


【解决方案1】:

传入 IP 数据包的源 MAC 地址未设置为数据包原始发送者的 MAC 地址,而是设置为最后一跳(路由器)的 MAC 地址。这意味着 MAC 过滤只能用于同一网络上的主机。这取决于 TCP/IP 如何工作并适用于任何网络。除此之外,GCE 上的每个虚拟机都有自己的本地网络(网络掩码为 255.255.255.255),并且只能看到该网络上的网关(而没有其他主机)。

【讨论】:

  • 谢谢安德烈亚斯。这就解释了为什么它在同一个网络中运行良好,但在您遍历多个交换机/路由器时不可见。