当前位置:

首页 > 系统应用 > Linux系统如何配置静态ARP绑定 防止局域网ARP欺骗攻击【教程】

Linux系统如何配置静态ARP绑定 防止局域网ARP欺骗攻击【教程】

直接敲个sudo arp -s就能绑定IP和MAC,这事儿谁都会。但问题在于,这操作只管当前这一次,机器一重启,绑定就没了。真要防住ARP欺骗,得让这个绑定在重启后依然坚挺,并且还得配合内核层面的防护和验证机制,才算把漏洞堵严实了。 用 arp -s 添加静态ARP条目 这是最基础的一步,命令格式固

直接敲个sudo arp -s就能绑定IP和MAC,这事儿谁都会。但问题在于,这操作只管当前这一次,机器一重启,绑定就没了。真要防住ARP欺骗,得让这个绑定在重启后依然坚挺,并且还得配合内核层面的防护和验证机制,才算把漏洞堵严实了。

linux系统如何配置静态arp绑定 防止局域网arp欺骗攻击【教程】

用 arp -s 添加静态ARP条目

这是最基础的一步,命令格式固定:sudo arp -s 。比如,你想把网关192.168.1.1和它的真实MAC地址00:1a:2b:3c:4d:5e锁死,就这么敲:

sudo arp -s 192.168.1.1 00:1a:2b:3c:4d:5e

命令执行后立刻生效,但有几个关键点得注意:

  • arp -s添加的条目,在arp -n的输出里会带一个PERM标记,这表示它是永久的,而不是普通的C(缓存)或者INCOMPLETE状态。
  • 这个命令本身不校验你输入的MAC地址是否真实存在。万一输错了,它也会照绑不误,结果就是后续通信直接中断。
  • 系统重启,或者网络服务重载(比如执行systemctl restart networking),这些静态条目都会被清空。
  • 它默认作用于系统第一个可用的网络接口。如果你的机器有多块网卡,建议使用更可控的ip neigh add命令,并显式指定设备名。

让静态ARP绑定开机自动加载

靠手动执行命令肯定不行,必须得让绑定持久化,开机自动加载。这里推荐两种主流方法:

方法一:写入/etc/ethers文件 + arp -f加载

创建一个/etc/ethers文件,里面每行写一个 对,例如:

192.168.1.1 00:1a:2b:3c:4d:5e

然后运行sudo arp -f就能加载文件里的所有绑定。不过要注意,arp -f不指定设备,它会尝试在所有接口上加载绑定。如果同一个IP地址在多个子网里都存在,可能会绑定到错误的网卡上。

方法二:使用systemd服务启动脚本(更可靠)

这个方法更稳妥。先创建一个脚本,比如/usr/local/bin/configure-static-arp.sh,里面用arp -s或者更推荐的ip neigh add命令,并且明确指定dev参数。然后,再配置一个对应的static-arp.service服务单元,确保它在network-online.target之后运行。这样做的好处是能完美避开网络还没就绪时就执行绑定命令导致失败的问题。

验证绑定是否真正生效且抗干扰

别光看到arp -n里显示PERM就以为万事大吉了。在实际的攻击场景下,你得确认三件事:

  1. 运行ip neigh show,检查对应的条目是否包含PERMANENT字样,并且dev字段显示的网卡(比如eth0)和你预期的完全一致。
  2. 主动触发一次ARP请求:执行arping -c 2 -I eth0 192.168.1.1,看看返回的MAC地址是不是和你绑定的那个一致。如果返回了别的MAC,说明绑定可能被绕过了,或者根本没生效。
  3. 有条件的话,可以做一次模拟欺骗测试:用另一台机器发送伪造的ARP响应(例如使用arpspoof工具),然后再查一下arp -n | grep 192.168.1.1——在绑定和防护都生效的情况下,显示的MAC地址应该纹丝不动。

必须同步开启的内核级防护

光靠静态绑定,只能算“堵”了一个漏洞。如果不开内核防护,攻击者仍然可能通过其他路径污染你的ARP邻居表。下面这几个内核参数,几乎是必选项:

  • rp_filter(反向路径过滤):防止IP源地址伪造的数据包进入系统。设置命令:echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/rp_filter
  • arp_ignore:控制本机对ARP请求的响应行为。设置为2表示“只响应目标IP是本机地址的ARP请求”。设置命令:echo 2 | sudo tee /proc/sys/net/ipv4/conf/all/arp_ignore
  • arp_announce:限制ARP通告时使用的源IP,避免在多网卡环境下从错误的接口应答。设置命令:echo 2 | sudo tee /proc/sys/net/ipv4/conf/all/arp_announce

敲黑板了:这些设置必须写入/etc/sysctl.conf配置文件,然后执行sudo sysctl -p使其生效并持久化,否则重启后就会失效。如果只做了arp -s绑定,却忽略了这三项内核防护,那就好比把大门锁好了,却留着窗户大敞四开,攻击者照样能登堂入室。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
系统应用
相关文章 更多
Linux系统怎么重启和关机 常用shutdown命令
Linux系统怎么重启和关机 常用shutdown命令

Linux系统的重启和关机,看似基础,实则暗藏玄机。一个核心原则是:首选 shutdown 命令。这并非因为它“最酷”,而是因为它遵循了完整的系统关闭流程——通知所有登录用户、冻结新的登录请求、并安全地终止服务。相比之下,直接使用 reboot 或 poweroff 在生产环境中,无异于埋下了一颗定

Linux系统swap分区怎么增加?解决内存不足死机问题【教程】
Linux系统swap分区怎么增加?解决内存不足死机问题【教程】

Linux系统跑着跑着突然卡成幻灯片,甚至直接死机?这多半是物理内存(RAM)告急,而Swap空间又没起到缓冲作用。Swap,你可以把它理解成内存的“应急仓库”,当物理内存不够用时,系统会把一些暂时不用的数据挪到这里,给紧急任务腾出地方。如果这个仓库太小或者压根没开,系统自然就容易“撑死”。 别担心

Linux系统查看TCP连接状态分布 统计命令汇总
Linux系统查看TCP连接状态分布 统计命令汇总

排查网络问题、监控服务状态,或者做容量规划时,一个绕不开的环节就是查看TCP连接的状态分布。哪些连接还活跃着,哪些正在挥手告别,哪些在排队等待,这些数字背后往往藏着性能瓶颈的线索。今天,我们就来聊聊,在Linux系统下,用什么命令来统计这些状态最稳、最快、也最准。 查 TCP 各状态连接数用什么命令

Linux系统僵尸进程怎么清理?彻底解决无法kill掉的进程【详解】
Linux系统僵尸进程怎么清理?彻底解决无法kill掉的进程【详解】

僵尸进程,状态标识为Z,是已经执行完毕、只在内核中留下一个待回收表项的“空壳”。直接对它使用kill -9是无效的,正确的清理思路要么是终止其父进程,要么是在父进程代码中通过处理SIGCHLD信号并调用waitpid来主动回收。 怎么确认进程是不是僵尸(Z状态) 识别僵尸进程其实很简单。在ps或to

Linux系统查看磁盘UUID信息 blkid命令使用方法
Linux系统查看磁盘UUID信息 blkid命令使用方法

Linux系统查看磁盘UUID信息:blkid命令使用方法 在Linux系统里管理磁盘,UUID是个绕不开的关键标识。它比传统的设备名(比如/dev/sda1)更稳定,不会因为硬盘插拔顺序改变而“漂移”。但有时候,你信心满满地敲下blkid,却发现它要么沉默不语,要么给出的信息和预期对不上。别急,这

Linux系统怎么查看服务启动失败的原因 journalctl排查技巧
Linux系统怎么查看服务启动失败的原因 journalctl排查技巧

Linux服务启动失败?别慌,journalctl排查技巧全解析 服务启动失败,是运维工作中最常遇到的“老朋友”。一个核心技巧是:直接运行 journalctl -u 服务名 -n 50 -e,90%的问题根源就藏在最后那几行日志里。 这相当于直接翻到故障剧本的最后一页,往往答案就在那里。但有时候,

Linux系统查看硬件配置信息 常用命令汇总【教程】
Linux系统查看硬件配置信息 常用命令汇总【教程】

Linux系统硬件信息查看:四条命令覆盖九成日常场景 想快速摸清一台Linux服务器的硬件底细?其实不必翻箱倒柜找文档。日常工作中,九成以上的硬件信息查询需求,靠下面这四条命令就能搞定。其余的,大多属于特定场景下的补漏方案,或是权限不足时的替代选择。 lscpu、free -h、lsblk、lspc

教你如何在Linux系统中使用Nginx进行日志切割和保存
教你如何在Linux系统中使用Nginx进行日志切割和保存

当涉及到Nginx日志切割和保存时,可以使用logrotate工具。下面是一个简单的教程来帮助您实现这一目标:首先,确保您已经安装了logrotate工具。在大多数Linux发行版上,可以使用以下命令进行安装:sudoapt-getinstalllogrotate#Debian/Ubuntusudoyuminstalllogrotate#CentOS/RHEL创建一个用于Nginx日志的配置文件。在终端中,使用文本编辑器(如vi或nano)创建一个新文件,例如nginx-logrotate.conf:su

在Linux系统上安装Go语言的完整步骤
在Linux系统上安装Go语言的完整步骤

在Linux系统上安装Go语言是非常简单的,只需要几个简单的步骤就可以完成。Go语言是一种由Google开发的开源编程语言,被广泛应用于云计算和大数据领域。在Linux系统上安装Go语言会为开发人员提供更多的选择和灵活性,本文将详细介绍如何在Linux系统上安装Go语言,并提供具体的代码示例。步骤一:下载Go语言安装包首先,我们需要下载Go语言的安装包。你可

探究Go语言在Linux系统的适用性
探究Go语言在Linux系统的适用性

Go语言作为一种高效的编程语言,其在构建各种应用程序时展现了出色的性能和可靠性。与此同时,Linux系统作为一种稳定且广泛应用的操作系统,在服务器端和嵌入式设备中得到了广泛应用。本文将探讨Go语言与Linux系统之间的兼容性,并给出一些具体的代码示例来阐述两者之间的无缝集成。首先,Go语言对于不同平台的兼容性十分出色,包括Linux系统。Go语言的编译器能够

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

Android Studio Windows版
Android Studio Windows版
Windows

Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,