我正在努力解决Google ComputeEngine上的mac地址过滤问题。
我要求我们在服务器上运行Web应用程序。将使用Web应用程序的相同用户还必须能够使用scp和ssh进入同一服务器。
到目前为止的想法:
客户端IP过滤是一个问题,因为在家中使用ADSL时IP会发生变化....
要设置和测试这个,我在本地办公室网络上使用三台不同的机器使用了以下环境: CentOS 7服务器在VM(VMWare)内运行。我启用了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
当从其他两台机器(一个窗口和一个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 VM中检索正确的mac地址或使用gcloud防火墙来实现同样的目的吗?
答案 0 :(得分:1)
传入IP数据包的源MAC地址未设置为数据包原始发送方的MAC地址,而是设置为最后一跳(路由器)的MAC地址。这意味着MAC过滤只能用于同一网络上的主机。这取决于TCP / IP如何工作并适用于任何网络。除此之外,GCE上的每个VM都有自己的本地网络(网络掩码为255.255.255.255),并且只能看到该网络上的网关(而不是其他主机)。