确定 Google Compute Engine 上的传入 MAC 地址

Determine incomin MAC address on Google ComputeEngine

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

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

到目前为止的想法是:

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

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

为了设置和测试它,我使用了以下环境,在我们的本地办公网络上使用了三个不同的 mac 网络: 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

当从其他两个 mac 网络(一个 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

问题在于,使用不同的 users/different mac 网络和不同的互联网服务提供商都会在 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 VM 中检索正确的 mac 地址或使用 gcloud 防火墙来实现相同的目的吗?

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