【发布时间】:2026-01-05 15:40:01
【问题描述】:
我正在努力解决 Google ComputeEngine 上的 mac 地址过滤问题。
我有一个要求,我们有一个在服务器上运行的 Web 应用程序。将使用 Web 应用程序的相同用户也必须能够使用 scp 和 ssh 访问同一台服务器。
所以到目前为止的想法:
- 仅为网络应用启用 HTTPS - 工作
- 在禁用密码访问的情况下启用基于 DSA 的 KEY-ONLY ssh - 工作正常。
- 对 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