jjzjj

[H3C]配置命令之MAC地址表项应用:封禁MAC地址

CINOCT 2024-06-07 原文

MAC(Media Access Control,媒体访问控制)地址表记录了 MAC 地址与接口的对应关系,以及接口所属的 VLAN 等信息。设备在转发报文时,根据报文的目的 MAC 地址查询 MAC 地址表,如果MAC地址表中包含与报文目的MAC地址对应的表项,则直接通过该表项中的出接口转发该报文;如果 MAC 地址表中没有包含报文目的 MAC 地址对应的表项时,设备将采取广播方式通过对应VLAN 内除接收接口外的所有接口转发该报文。

MAC地址表记录了目的MAC地址、MAC地址对应的出接口以及所属的VLAN ID。在转发数据时,设备根据报文中的目的MAC地址查询MAC地址表,快速定位出接口,从而减少广播。

MAC 地址表项的分类

  • 静态 MAC 地址表项:由用户手工配置,用于目的是某个 MAC 地址的报文从对应接口转发出去,表项不老化。静态 MAC 地址表项优先级高于自动生成的 MAC 地址表项。
  • 动态 MAC 地址表项:可以由用户手工配置,也可以由设备通过源 MAC 地址学习自动生成,用于目的是某个 MAC 地址的报文从对应接口转发出去,表项有老化时间。手工配置的动态MAC 地址表项优先级等于自动生成的 MAC 地址表项。
  • 黑洞 MAC 地址表项:由用户手工配置,用于丢弃源 MAC 地址或目的 MAC 地址为指定 MAC地址的报文(例如,出于安全考虑,可以禁止某个用户发送和接收报文),表项不老化。黑洞MAC 地址表项优先级高于自动生成的 MAC 地址表项。

一、示例:静态MAC地址表项及MAC黑洞

# 增加一个静态 MAC 地址表项,目的地址为 000f-e235-dc71,出接口为 GE1/0/1,且该接口属于 VLAN 2

<H3C> system-view

[H3C] mac-address static 000f-e235-dc71 interface GigabitEthernet 1/0/1 vlan 2

# 增加一个黑洞 MAC 地址表项,地址为 000f-e235-abcd,MAC地址或端口属于 VLAN 10

[H3C] mac-address blackhole 000f-e235-abcd vlan 10

# 配置动态 MAC 地址表项的老化时间为 500 秒

[H3C] mac-address timer aging 500

二、步骤:封禁MAC地址(MAC地址黑洞)

示例1:查找并封禁网络中私接路由器

说明:局域网中发现IP为192.168.1.1的TP-Link设备,此可能存在私接网络设备,通过IP地址查找对应MAC地址,然后在交换机中从上到下逐级查找该MAC所连接的接口。

1. 在PC的cmd命令行,使用arp -a命令查询IP对应的MAC地址,假设所得MAC为8C-16-45-F1-EB-A6

# 显示(所有)IP到MAC地址的地址转换表;也即在自动缓存中读取IP地址和mac地址的对应表

C:\>arp -a

# 显示指定IP地址192.168.1.1的对应MAC地址

C:\>arp -a 192.168.1.1

注:ARP是地址解析协议,通过IP地址找到设备的MAC地址。

2. 在交换机上逐级查询该MAC地址对应的接口,假设对应接口为接入交换机SW1中的G1/0/10口,VLAN为50

# 显示所有MAC地址信息(状态、接口、VLAN、Aging等)

<H3C> display mac-address

# 显示某一MAC为8C-16-45-F1-EB-A6的MAC地址信息(状态、接口、VLAN、Aging等)

<H3C> display mac-address 8C16-45F1-EBA6

3. 在对应交换机SW1中,将该MAC加入MAC地址黑洞,从而禁用该MAC地址

# 将8C-16-45-F1-EB-A6(所属vlan为50)加入MAC地址黑洞禁用该MAC

[SW1] mac-address blackhole 8C16-45F1-EBA6 vlan 50

注:通过display mac-address查看该MAC地址状态变化,State由Learned变为Blackhole。

4. 若需要禁用该MAC的对应接口,可直接关闭该接口

# 将交换机SW1接口G1/0/10关闭,禁用该接口

[SW1] interface GigabitEthernet 1/0/10

[SW1] shutdown

示例2:封禁中病毒IP地址对应PC机

说明:安全设备发现网络中感染病毒的PC的IP地址为10.131.102.72,封禁这台IP地址的PC。

1. 通过ping该IP地址测试PC是否在线:

A. 若PC在线,在交换机中通过arp命令显示IP地址对应的MAC地址及交换机接口,根据该IP对应的接口信息逐级查找该IP的接入交换机及其MAC地址,假设MAC地址为8C-16-45-F1-EB-A6

<H3C> display arp 10.131.102.72

B. 若PC不在线,则无法通过arp命令显示IP地址的MAC地址及交换机接口,此时可以通过查看DHCP服务器为客户端分配的IP地址信息,来获取该IP对应的MAC地址,假设得到的MAC地址为8C-16-45-F1-EB-A6

<H3C> display dhcp server ip-in-use

# 显示DHCP服务器为客户端分配的某一IP地址的信息

<H3C> display dhcp server ip-in-use ip 10.131.102.72

2. 在对应接入交换机SW1中,查找该IP对应的MAC和vlan,假设vlan为50,将该MAC加入MAC地址黑洞,从而禁用该MAC地址

[SW1] mac-address blackhole 8C16-45F1-EBA6 vlan 50

3. 在交换机SW1中,查看该MAC地址的状态,Blackhole为封禁状态,Learned为正常学习状态

[SW1] display mac-address 8C16-45F1-EBA6

三、命令格式

3.1 配置MAC地址表

# 全局配置静态/动态MAC地址表项

[H3C] mac-address { dynamic | static } mac-address interface interface-type interface-number vlan vlan-id

# 接口配置静态/动态MAC地址表项

[H3C-GigabitEthernet1/0/1] mac-address { dynamic | static } mac-address vlan vlan-id

# 配置目的黑洞MAC地址表项

[H3C] mac-address blackhole mac-address vlan vlan-id

# 关闭接口的MAC地址学习功能。注,关闭MAC地址学习功能可以有效防止这种攻击:黑客使用大量源MAC地址不同的报文攻击设备,导致设备MAC地址表资源耗尽,造成设备无法根据网络的变化更新MAC地址表。

[H3C-GigabitEthernet1/0/1] undo mac-address mac-learning enable

# 配置动态 MAC 地址表项的老化时间,缺省时间为为300秒

[H3C] mac-address timer { aging seconds | no-aging }

3.2 MAC地址表显示和维护

# 查看MAC地址表信息

<H3C> display mac-address [ mac-address [ vlan vlan-id ] | [ [ dynamic | static ] [ interface interface-type interface-number ] | blackhole ] [ vlan vlan-id ] [ count ] ]

# 显示MAC地址表动态表项的老化时间

<H3C> display mac-address aging-time

# 显示MAC地址学习功能的使能状态

<H3C> display mac-address mac-learning [ interface interface-type interface-number ]

有关[H3C]配置命令之MAC地址表项应用:封禁MAC地址的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  4. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  5. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  6. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  9. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  10. ruby-on-rails - 如何在 mac os snow leopard 中升级 ruby​​ 和 rails - 2

    我想将我的MacSnowLeopardruby​​从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai

随机推荐