确定 Google Compute Engine 上的传入 MAC 地址
Determine incomin MAC address on Google ComputeEngine
我正在努力解决 Google ComputeEngine 上的 mac 地址过滤问题。
我有一个要求,我们在服务器上有一个 Web 应用程序 运行。将使用 Web 应用程序的相同用户还必须能够使用 scp 和 ssh 进入同一服务器。
到目前为止的想法是:
- 仅为 Web 应用启用 HTTPS - 工作
- 启用基于 DSA 的 KEY-ONLY ssh,禁用密码访问 - 工作。
- 启用 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)并且只能在该网络上看到网关(而没有其他主机)。
我正在努力解决 Google ComputeEngine 上的 mac 地址过滤问题。
我有一个要求,我们在服务器上有一个 Web 应用程序 运行。将使用 Web 应用程序的相同用户还必须能够使用 scp 和 ssh 进入同一服务器。
到目前为止的想法是:
- 仅为 Web 应用启用 HTTPS - 工作
- 启用基于 DSA 的 KEY-ONLY ssh,禁用密码访问 - 工作。
- 启用 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)并且只能在该网络上看到网关(而没有其他主机)。