当前位置: 首页 > article >正文

Ubuntu防火墙管理(六)——ARP防火墙过滤防御自定义系统服务

起因

在ubuntu24.04中检查arp表,输出异常

arp -a

? (10.162.242.142) 位于 74:3a:20:b9:e8:02 [ether] 在 wlp2s0
? (10.162.0.1) 位于 在 wlp2s0
ubuntu环境中,这是否表示ARP攻击,本地网关为10.162.0.1,可用arptables防御吗?

GPT分析与ARP攻击判定

根据你提供的信息,以下是对该情况的分析和建议:

  1. ARP表项解释

    • ? (10.162.242.142) 位于 74:3a:20:b9:e8:02 [ether] 在 wlp2s0:这表示IP地址为10.162.242.142的设备在MAC地址为74:3a:20:b9:e8:02的网络接口wlp2s0上。
    • ? (10.162.0.1) 位于 <incomplete> 在 wlp2s0:这表示IP地址为10.162.0.1的设备(通常是本地网关)的MAC地址未解析完成。
  2. ARP攻击的迹象

    • ARP攻击通常表现为网络中设备ARP表项的频繁变化或异常MAC地址。
    • 在你的情况下,10.162.0.1的MAC地址未解析完成(<incomplete>),这可能是网络问题或ARP攻击的迹象。
  3. 使用arptables进行防御

    • arptables是一个用于管理ARP包过滤的工具,可以用来防御ARP攻击。
    • 你可以通过设置规则来限制ARP包的流量,确保只有合法的ARP包能够通过。

修改Arp规则过滤报文

以下是如何使用arptables进行基本防御的步骤:

  1. 安装arptables

    sudo apt-get install arptables
    
  2. 设置基本规则

sudo arptables -A INPUT --src-ip 10.162.0.1 --src-mac 74:3a:20:b9:e8:02 -j ACCEPT
sudo arptables -P INPUT DROP
  1. 查看当前的ARP规则
   sudo arptables -L

结果如下:

$ sudo arptables -L
Chain INPUT (policy DROP)
-j ACCEPT -s _gateway --src-mac 74:3a:20:b9:e8:02

Chain OUTPUT (policy ACCEPT)
  1. 保存规则

    sudo arptables-save > /etc/arptables.rules
    
  2. 开机自动加载规则
    /etc/rc.local文件中添加以下内容:

    arptables-restore < /etc/arptables.rules
    

但由于ubuntu24不存在/etc/rc.local,要想开机执行arptables规则,有两种方法

开机执行arptables规则

方法1——将开机更改arptables规则写入系统服务

如果你的 Ubuntu 系统中没有 /etc/rc.local,你可以使用 systemd 创建一个自定义服务来在系统启动时执行 arptables-restore 命令。以下是具体步骤:

创建 Systemd 服务

  1. 创建服务文件

    使用文本编辑器创建一个新的服务文件,例如 arptables.service

    sudo nano /etc/systemd/system/arptables.service
    
  2. 添加服务配置

    在文件中添加以下内容:

    [Unit]
    Description=Restore arptables rules
    After=network.target
    
    [Service]
    Type=oneshot
    ExecStart=/sbin/arptables-restore < /etc/arptables.rules
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target
    

    这里的 After=network.target 确保在网络服务启动后再执行 arptables-restore

  3. 保存并退出

    CTRL + X,然后按 Y 确认保存,最后按 Enter 退出编辑器。

启用和启动服务

  1. 启用服务

    运行以下命令以启用服务,使其在系统启动时自动运行:

    sudo systemctl enable arptables.service
    
  2. 启动服务(可选):

    如果你想立即启动服务并测试它,可以运行:

    sudo systemctl start arptables.service
    

验证服务状态

你可以通过以下命令检查服务的状态,确保它已成功启动:

$ sudo systemctl status arptables.service
/etc/systemd/system# sudo systemctl status arptables.service
● arptables.service - Restore arptables rules
     Loaded: loaded (/etc/systemd/system/arptables.service; enabled; preset: enabled)
     Active: active (exited) since Mon 2024-12-09 22:59:44 CST; 8s ago
   Main PID: 43281 (code=exited, status=0/SUCCESS)
        CPU: 2ms

12月 09 22:59:44 star systemd[1]: Starting arptables.service - Restore arptables rules...
12月 09 22:59:44 star systemd[1]: Finished arptables.service - Restore arptables rules.

查看日志

如果需要查看服务的输出或错误信息,可以使用以下命令:

journalctl -u arptables.service

方法2——用netfilter-persistent

netfilter-persistent 是一个更通用的工具,旨在管理与 Linux 内核中的 Netfilter 框架相关的所有类型的规则,包括 iptables、ip6tables(用于 IPv6)和 arptables(用于 ARP).

安装iptables-persistent,会顺带安装netfilter-persistent

sudo apt install iptables-persistent

保存当前规则

sudo netfilter-persistent save
  • 这条指令的作用是将当前的 iptables 和 arptables 规则保存到配置文件中,以便在系统重启后能够自动恢复这些规则。

重新加载iptables、arptables规则

sudo netfilter-persistent reload	#
  • 命令的作用是重新加载已保存的 iptables 和 arptables 规则。这意味着它会从配置文件中读取规则并应用到当前的防火墙设置中。
  • 当你修改了防火墙规则文件(例如,添加、删除或更改规则)后,可以使用 netfilter-persistent reload 命令来立即应用这些更改。

开机启动nftables服务

  • netfilter-persistent作用于nftables的配置文件
  • 因此相当于把规则借助于nftables服务来执行
  • 所以要保证nftables服务正常执行
sudo systemctl enable nftables
sudo systemctl start nftables

可查看

sudo systemctl status nftables

http://www.kler.cn/a/429329.html

相关文章:

  • Mongodb相关内容
  • YOLOv10-1.1部分代码阅读笔记-build.py
  • 核密度估计(Kernel Density Estimation, KDE)是一种非参数统计方法
  • idea上git log面板的使用
  • 【Kotlin】上手学习之类型篇
  • 内联变量(inline variables):在多个文件中共享全局常量
  • RFDiffusion中的ContigMap类介绍
  • linux 命令获取apk 的安装应用的包名
  • 使用ssh免密登录实现自动化部署rsync+nfs+lsync(脚本)
  • 20 设计模式之职责链模式(问题处理案例)
  • Android 事件分发机制详解/ 及Activity启动流程浅谈
  • Flutter如何调用java接口如何导入java包
  • 【数据结构】堆的概念、结构、模拟实现以及应用
  • SQL注入:sqli-labs靶场通关(第九关 时间盲注)
  • 【单元测试】单元测试介绍
  • Java 装饰器模式详解:动态增强对象功能
  • 宝塔面板-java项目 spring 无法正常启动 java spring 宝塔 没有显示日志 问题解决方案-spring项目宝塔面板无日志
  • 如何实现 3D GPR的仿真模拟
  • Scala 隐式转换
  • 【前端】JavaScript 的装箱(Boxing)机制详解
  • k8s-持久化存储之StorageClass(2)
  • 【算法练习】852. 山脉数组的峰顶索引
  • Python + OpenCV 系列:图像阈值处理
  • 【CC++】fatal error: curses.h: No such file or directory(Ubuntu 22.04)
  • 使用 ASP.NET Core HttpLoggingMiddleware 记录 http 请求/响应
  • 六、Prompt工程——进阶迭代