首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止IP欺骗使用MAC和退潮?

如何防止IP欺骗使用MAC和退潮?
EN

Server Fault用户
提问于 2011-11-23 16:24:35
回答 1查看 6K关注 0票数 11

我正在尝试创建IP-MAC配对规则。有很少的教程和相关的问题,1可用,但我有某种特定的设置。

环境:我有很多物理宿主。每个主机都有少量的以太网卡,连接在一起并用作桥接器的从站。每个主机上都有许多虚拟机(kvm、qemu、libvirt)。每个虚拟机通过名为vnet0-9+的新端口连接到其物理主机的一个桥上。根本没有纳特。网络正常工作,所有的物理主机都可以点击,所有的虚拟机也可以。每个虚拟机都有自己的IP地址和MAC地址。

问题:在虚拟机内部,IP地址可以更改为另一个地址。

找到的解决方案:退潮站点2上有已知的解决方案,但当只使用一个主机时,此解决方案是可使用的。它允许所有的流量,如果有一个来自IP的数据包与另一个MAC比允许的,数据包被下垂。如果有多台主机,则需要在所有主机上注册所有现有的IP-MAC对。有必要采取反向政策解决方案。

精心设计的解决方案:我尝试以倒置的方式使用退潮。下面是我尝试过的一个例子。

例1

代码语言:javascript
复制
Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: DROP
-i bond0 -j ACCEPT 
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

例2

代码语言:javascript
复制
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: DROP
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

我想要的核心是拥有默认的策略删除,并且只允许来自虚拟机的流量,并在给定的主机上部署正确的IP对。然而,这些解决办法不起作用。

问题:如何只允许运行虚拟机的指定IP-MAC对桥接通信,并删除从vnet0-9+端口开始的所有未知IP-MAC对?

非常感谢你的回答。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2011-11-24 13:45:04

我终于想出了一个可行的解决办法。

  1. 解决方案使用退潮和IP-MAC对。
  2. 只有需要的表才是默认的“过滤器”表。
  3. 不需要向输入链添加任何规则或策略,因为输入链与运行虚拟机无关。对过滤器表中输入、输出和前向链的含义的解释载于退潮手册中。
  4. 由于退潮在以太网级别上工作,并且IP-MAC配对仅适用于IP数据包,因此需要清空规则中的这些内容,以避免阻塞ARP帧和其他重要的通信量。

所以,在开始的时候,没有任何规则,所有的政策都是可以接受的。没有用户定义的链。过滤器表如下所示:

代码语言:javascript
复制
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

加了一条新的链子。该链包含所有允许的IP-MAC对。这叫做VMS。

代码语言:javascript
复制
# ebtables -N VMS

现在最重要的是。对于从端口vnet0-9+通过网桥的每一个包含IP包(或其部分)的帧,应用链式VMS的链式策略和规则。换句话说,对于从任何虚拟机开始的每一个IP数据包,应用VMS链。

代码语言:javascript
复制
# ebtables -A FORWARD -p ip -i vnet+ -j VMS

链式VMS的默认策略必须删除。这样,从任何虚拟机开始的每一个IP数据包在默认情况下都会下降。稍后,允许的IP-MAC对异常被添加.默认策略删除会导致来自任何具有未知IP-MAC对的虚拟机的所有通信量同时下降,从而使IP欺骗变得不可能。

代码语言:javascript
复制
# ebtables -P VMS DROP

表过滤器现在看起来是这样的。同样,在没有虚拟机运行(允许)的情况下,它看起来也是如此。

代码语言:javascript
复制
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: ACCEPT
-p IPv4 -i vnet+ -j VMS
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Bridge chain: VMS, entries: 0, policy: DROP

假设有两台正在运行的机器。如果我们试图与他们/从他们切换,流量就会被丢弃,目的地是无法到达的。这是期望的结果,因为这个流量还没有被允许。只有一个命令就足以允许每个虚拟机通信量。

代码语言:javascript
复制
# ebtables -A VMS -p ip --ip-src 192.168.11.125 -s 54:52:00:cc:35:fa -j ACCEPT
# ebtables -A VMS -p ip --ip-src 192.168.11.122 -s 54:52:00:98:d7:b6 -j ACCEPT

现在,允许的虚拟机的流量是正常的,IP欺骗是可以防止的。

这个解决方案可能不完美,如果您有任何评论或改进,我会很高兴地听到它们.

票数 13
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/334139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档