Linux如何清理ARP缓存?

Linux如何清理ARP缓存?,第1张

命令红色字体标记

系统初始arp环境

[root@esx ~]# arp -n

Address                 HWtype  HWaddress             Flags Mask Iface

192.168.1.175           ether   00:24:1D:97:B6:7F   C  vswif0

192.168.1.120           ether   00:1F:C6:3A:DC:81      C  vswif0

192.168.1.51            (incomplete)         vswif0

执行清除所有arp 缓存命令

[root@esx ~]# arp -n|awk '/^[1-9]/{print "arp -d  " $1}'|sh -x

+ arp -d 192.168.1.175

+ arp -d 192.168.1.120

+ arp -d 192.168.1.51

Linux是一套免费使用和自由传播的类Unix *** 作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的 *** 作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络 *** 作系统。

组合命令清楚所有arp缓存:

[html] view plaincopy

arp -n|awk '/^[1-9]/{system("arp -d "$1)}'

以上命令必须 root 才可以执行。

使用ip命令清除某一网络接口的arp(下面命令是 eth0 接口)

[html] view plaincopy

ip neigh flush  dev eth0

Linux 清除arp缓存是把列表标记为(incomplete),在下一次系统清理垃圾是会清除。

以下是OMG小编为大家收集整理的文章,希望对大家有所帮助。

从原理和应用谈解决ARP攻击的方法:

很多网吧和企业网络不稳,无故掉线,经济蒙受了很大的损失。根据情况可以看出这是一种存在于网络中的一种普遍问题。出现此类问题的主要原因就是遭受了ARP攻击。现在ARP不只是协议的简写,还成了掉线的代名词。由于其变种版本之多,传播速度之快,很多技术人员和企业对其束手无策。下面就来给大家从原理到应用谈一谈这方面的话题。希望能够帮大家解决此类问题,净化网络环境。

在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址,实现局域网机器的通信。ARP协议对网络安全具有重要的意义。这是建立在相互信任的基础上。如果通过伪造IP地址和MAC地址实现ARP欺骗,将在网络中产生大量的ARP通信量使网络阻塞、掉线、重定向、嗅探攻击。

我们知道每个主机都用一个ARP高速缓存,存放最近IP地址到MAC硬件地址之间的映射记录。windows高速缓存中的每一条记录的生存时间一般为60秒,起始时间从被创建时开始算起。默认情况下,ARP从缓存中读取IP-MAC条目,缓存中的IP-MAC条目是根据ARP响应包动态变化的。因此,只要网络上有ARP响应包发送到本机,即会更新ARP高速缓存中的IP-MAC条目。如:X向Y发送一个自己伪造的ARP应答,而这个应答中的数据发送方IP地址是192.168.1.3(Z的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(Z的真实MAC地址却是CC-CC-CC-CC-CC-CC,这里被伪造了)。当Y接收到X伪造的ARP应答,就会更新本地的ARP缓存(Y可不知道被伪造了)。那么如果伪造成网关呢?

Switch上同样维护着一个动态的MAC缓存,它一般是这样,首先,交换机内部有一个对应的列表,交换机的端口对应MAC地址表Port n <->Mac记录着每一个端口下面存在那些MAC地址,这个表开始是空的,交换机从来往数据帧中学习。因为MAC-PORT缓存表是动态更新的,那么让整个 Switch的端口表都改变,对Switch进行MAC地址欺骗的Flood,不断发送大量假MAC地址的数据包,Switch就更新MAC-PORT缓存,如果能通过这样的办法把以前正常的MAC和Port对应的关系破坏了,那么Switch就会进行泛洪发送给每一个端口,让Switch基本变成一个 HUB,向所有的端口发送数据包,要进行嗅探攻击的目的一样能够达到。也将造成Switch MAC-PORT缓存的崩溃,如下面交换机中日志所示:

Internet 192.168.1.4 0000b.cd85.a193 ARPAVlan256

Internet 192.168.1.5 0000b.cd85.a193 ARPAVlan256

Internet 192.168.1.6 0000b.cd85.a193 ARPAVlan256

Internet 192.168.1.7 0000b.cd85.a193 ARPAVlan256

Internet 192.168.1.8 0000b.cd85.a193 ARPAVlan256

Internet 192.168.1.9 0000b.cd85.a193 ARPAVlan256

ARP攻击时的主要现象

网上银行、保密数据的频繁丢失。当局域网内某台主机运行ARP欺骗的木马程序时,会欺骗局域网内所有主机和路由器,让所有上网的流量必须经过病毒主机。其他用户原来直接通过路由器上网现在转由通过病毒主机上网,切换的时候用户会断一次线。切换到病毒主机上网后,如果用户已经登陆服务器,那么病毒主机就会经常伪造断线的假像,那么用户就得重新登录服务器,这样病毒主机就可以窃取所有机器的资料了。

网速时快时慢,极其不稳定,但单机进行光纤数据测试时一切正常。局域网内频繁性区域或整体掉线,重启计算机或网络设备后恢复正常

由于ARP欺骗的木马程序发作的时候会发出大量的数据包导致局域网通讯拥塞以及其自身处理能力的限制,用户会感觉上网速度越来越慢。当ARP欺骗的木马程序停止运行时,用户会恢复从路由器上网,切换过程中用户会再次断线。

ARP的解决办法:

目前来看普遍的解决办法都是采用双绑,具体方法:

先找到正确的 网关 IP 网关物理地址 然后 在客户端做对网关的arp绑定。

步骤一:

查找本网段的网关地址,比如192.168.1.1,以下以此网关为例。在正常上网时,“开始→运行→cmd→确定”,输入:arp -a,点回车,查看网关对应的Physical Address。

比如:网关192.168.1.1 对应0A-0B-0C-0D-0E-0F。

步骤二:

编写一个批处理文件rarp.bat,内容如下:

@echo off

arp -d

arp -s 192.168.1.1 0A-0B-0C-0D-0E-0F

保存为:rarp.bat。

步骤三:

运行批处理文件将这个批处理文件拖到“windows→开始→程序→启动”中。

但双绑并不能彻底解决ARP问题,IP冲突以及一些ARP变种是不能应对的。

再有就是采用防ARP的硬件路由,但价格很高,并且不能保证在大量攻击出现地情况下稳定工作.那么现在就没有,有效并能够彻底的解决办法了吗?有的,那就是采用能够以底层驱动的方式工作的软件,并全网部署来防范ARP问题.

此类软件是通过系统底层核心驱动,以服务及进程并存的形式随系统启动并运行,不占用计算机系统资源。这种方式不同于双绑。因为它是对通信中的数据包进行分析与判断,只有合法的包才可以被放行。非法包就被丢弃掉了。也不用担心计算机会在重启后新建ARP缓存列表,因为是以服务与进程相结合的形式 存在于计算机中,当计算机重启后软件的防护功能也会随 *** 作系统自动启动并工作。

目前满足这一要求的并能出色工作的软件推荐大家选用ARP卫士,此软件不仅仅解决了ARP问题,同时也拥有内网洪水防护功能与P2P限速功能。

ARP卫士在系统网络的底层安装了一个核心驱动,通过这个核心驱动过滤所有的ARP数据包,对每个ARP应答进行判断,只有符合规则的ARP包,才会被进一步处理.这样,就实现防御了计算机被欺骗. 同时,ARP卫士对每一个发送出去的ARP应答都进行检测,只有符合规则的ARP数据包才会被发送出去,这样就实现了对发送攻击的拦截...

洪水拦截:通过此项设置,可以对规则列表中出现了SYN洪水攻击、UDP洪水攻击、ICMP洪水攻击的机器进行惩罚。当局域网 内某台计算机所发送的SYN报文、UDP报文、ICMP报文超出此项设置中所规定的上限时,“ARP卫士”客户端将会按 照预设值对其进行相应惩罚。在惩罚时间内,这台计算机将不会再向网络内发送相应报文。但惩罚不会对已建立 的连接产生影响。

流量控制:通过此项设置,可以对规则列表中的所有计算机进行广域网及局域网的上传及下载流量进行限制(即所谓的网络 限速)。鼠标右键单击“排除机器列表”窗口即可对其中内容进行修改、编辑。存在于“排除机器列表”中的IP地址将不 会受到流量控制的约束。

ARP Guard(ARP卫士)的确可以从根本上彻底解 决ARP欺骗攻击所带来的所有问题。它不仅可以保护计算机不受ARP欺骗攻击的影响,而且还会对感染了ARP攻击病毒或欺骗木马的 病毒源机器进行控制,使其不能对局域网内其它计算机进行欺骗攻击。保持网络正常通讯,防止带有ARP欺骗攻击的机器对网内计 算机的监听,使浏览网页、数据传输时不受ARP欺骗者限制。

总体来看我觉得这个软件是目前市面上最好的了。同时在线客服工作也很负责。但有些时候对于网管来说还是不太方便。比如管理端换了IP。那么下面的客户端只能重新指向新的IP。再有软件不能对所有的无盘系统都支持。对LINUX *** 作系统也不能支持。希望这些能够尽快被软件开发商注意并及时更新。好了,说了这么多,希望能够给大家解决ARP掉线问题,提供帮助。

arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。这两个参数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正常。

首先看一下Linux内核文档中对于它们的描述:

arp_ignore - INTEGER

Define different modes for sending replies in response to

received ARP requests that resolve local target IP addresses:

0 - (default): reply for any local target IP address, configured

on any interface

1 - reply only if the target IP address is local address

configured on the incoming interface

2 - reply only if the target IP address is local address

configured on the incoming interface and both with the

sender's IP address are part from same subnet on this interface

3 - do not reply for local addresses configured with scope host,

only resolutions for global and link addresses are replied

4-7 - reserved

8 - do not reply for all local addresses

The max value from conf/{all,interface}/arp_ignore is used

when ARP request is received on the {interface}

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。

arp_ignore参数常用的取值主要有0,1,2,3~8较少用到:

0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

1:只响应目的IP地址为接收网卡上的本地地址的arp请求。

2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

4~7:保留未使用

8:不回应所有的arp请求

sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。

arp_announce - INTEGER

Define different restriction levels for announcing the local

source IP address from IP packets in ARP requests sent on

interface:

0 - (default) Use any local address, configured on any interface

1 - Try to avoid local addresses that are not in the target's

subnet for this interface. This mode is useful when target

hosts reachable via this interface require the source IP

address in ARP requests to be part of their logical network

configured on the receiving interface. When we generate the

request we will check all our subnets that include the

target IP and will preserve the source address if it is from

such subnet. If there is no such subnet we select source

address according to the rules for level 2.

2 - Always use the best local address for this target.

In this mode we ignore the source address in the IP packet

and try to select local address that we prefer for talks with

the target host. Such local address is selected by looking

for primary IP addresses on all our subnets on the outgoing

interface that include the target IP address. If no suitable

local address is found we select the first local address

we have on the outgoing interface or on all other interfaces,

with the hope we will receive reply for our request and

even sometimes no matter the source IP address we announce.

The max value from conf/{all,interface}/arp_announce is used.

arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。(比如系统准备通过网卡发送一个数据包a,这时数据包a的源IP和目的IP一般都是知道的,而根据目的IP查询路由表,发送网卡也是确定的,故源MAC地址也是知道的,这时就差确定目的MAC地址了。而想要获取目的IP对应的目的MAC地址,就需要发送arp请求。arp请求的目的IP自然就是想要获取其MAC地址的IP,而arp请求的源IP是什么呢? 可能第一反应会以为肯定是数据包a的源IP地址,但是这个也不是一定的,arp请求的源IP是可以选择的,控制这个地址如何选择就是arp_announce的作用)

arp_announce参数常用的取值有0,1,2。

0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。

1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。

2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。

sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。

(1)当arp_ignore参数配置为0时,eth1网卡上收到目的IP为环回网卡IP的arp请求,但是eth1也会返回arp响应,把自己的mac地址告诉对端。

(2)当arp_ignore参数配置为1时,eth1网卡上收到目的IP为环回网卡IP的arp请求,发现请求的IP不是自己网卡上的IP,不会回arp响应。

(3)当arp_announce参数配置为0时,系统要发送的IP包源地址为eth1的地址,IP包目的地址根据路由表查询判断需要从eth2网卡发出,这时会先从eth2网卡发起一个arp请求,用于获取目的IP地址的MAC地址。该arp请求的源MAC自然是eth2网卡的MAC地址,但是源IP地址会选择eth1网卡的地址。

(4)当arp_announce参数配置为2时,eth2网卡发起arp请求时,源IP地址会选择eth2网卡自身的IP地址。

因为DR模式下,每个真实服务器节点都要在环回网卡上绑定虚拟服务IP。这时候,如果客户端对于虚拟服务IP的arp请求广播到了各个真实服务器节点,如果arp_ignore参数配置为0,则各个真实服务器节点都会响应该arp请求,此时客户端就无法正确获取LVS节点上正确的虚拟服务IP所在网卡的MAC地址。假如某个真实服务器节点A的网卡eth1响应了该arp请求,客户端把A节点的eth1网卡的MAC地址误认为是LVS节点的虚拟服务IP所在网卡的MAC,从而将业务请求消息直接发到了A节点的eth1网卡。这时候虽然因为A节点在环回网卡上也绑定了虚拟服务IP,所以A节点也能正常处理请求,业务暂时不会受到影响。但时此时由于客户端请求没有发到LVS的虚拟服务IP上,所以LVS的负载均衡能力没有生效。造成的后果就是,A节点一直在单节点运行,业务量过大时可能会出现性能瓶颈。

所以DR模式下要求arp_ignore参数要求配置为1。

每个机器或者交换机中都有一张arp表,该表用于存储对端通信节点IP地址和MAC地址的对应关系。当收到一个未知IP地址的arp请求,就会再本机的arp表中新增对端的IP和MAC记录;当收到一个已知IP地址(arp表中已有记录的地址)的arp请求,则会根据arp请求中的源MAC刷新自己的arp表。

如果arp_announce参数配置为0,则网卡在发送arp请求时,可能选择的源IP地址并不是该网卡自身的IP地址,这时候收到该arp请求的其他节点或者交换机上的arp表中记录的该网卡IP和MAC的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。

所以DR模式下要求arp_announce参数要求配置为2。

arp_ignore和arp_announce参数分别有all,default,lo,eth1,eth2...等对应不同网卡的具体参数。当all和具体网卡的参数值不一致时,取较大值生效。

一般只需修改all和某个具体网卡的参数即可(取决于你需要修改哪个网卡)。下面以修改lo网卡为例:

net.ipv4.conf.all.arp_ignore=1

net.ipv4.conf.lo.arp_ignore=1

net.ipv4.conf.all.arp_announce=2

net.ipv4.conf.lo.arp_announce=2

sysctl -w net.ipv4.conf.all.arp_ignore=1

sysctl -w net.ipv4.conf.lo.arp_ignore=1

sysctl -w net.ipv4.conf.all.arp_announce=2

sysctl -w net.ipv4.conf.lo.arp_announce=2

echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7426391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存