内网网络 rp_filter 参数配置

rp_filter 的功能可以简单概括为 源进源出

net.ipv4.conf.all.rp_filter 是 Linux 内核中的一个网络功能,它用于控制逆路径过滤(Reverse Path Filtering),该功能旨在防止 IP 假冒和网络攻击。

作用

  • rp_filter = 0 表示禁用逆路径过滤,这意味着系统将不会检查传入数据包的源地址是否从其路由的正确接口到达。
  • rp_filter = 1 表示启用严格模式的逆路径过滤,系统将仅对来自合法接口的流量进行响应。如果数据包的源地址与出接口不一致,则会被丢弃。
  • rp_filter = 2 表示启用松散模式的逆路径过滤,数据包的源地址可以通过任意接口到达,系统仅会检查路由表以确保源地址是有效的。如果数据包的源地址可通过其他接口路由,请求将被允许。

安全和性能影响

安全影响

  • 如果设为 0(禁用)
    • 增加了 IP 假冒的风险,攻击者可以通过伪造的源地址发送恶意流量,渗透网络安全防护机制。
    • 更容易受到中间人攻击等网络攻击的威胁。
  • 如果设为 1(启用严格模式)
    • 提高了安全性,通过确保数据包的源地址与路由一致,可以有效防止伪造和路由相关的攻击。
  • 如果设为 2(启用松散模式)
    • 提供了平衡,既能防止伪造攻击,又允许某些合法的场景(如 VPN 和负载均衡器)通过多条路径传递流量。

性能影响

  • 启用逆路径过滤会增加一些系统开销,因为需要对每个接收的数据包进行额外的源地址检查。
  • 在高流量或高负载的网络环境中,这种检查可能会导致一些性能下降,特别是在低配置的设备上。
  • 对于小型或低流量的环境,影响通常不明显。

如何修改

要修改 net.ipv4.conf.all.rp_filter 的值,可以使用以下命令:

  1. 临时修改(重启后失效):

    bash 复制代码
    sudo sysctl -w net.ipv4.conf.all.rp_filter=1  # 启用严格模式
    sudo sysctl -w net.ipv4.conf.all.rp_filter=0  # 禁用
    sudo sysctl -w net.ipv4.conf.all.rp_filter=2  # 启用松散模式
  2. 永久修改 (在系统重启后依然有效): 编辑 /etc/sysctl.conf 文件,添加或修改以下行:

    conf 复制代码
    net.ipv4.conf.all.rp_filter = 1  # 启用严格模式
    net.ipv4.conf.all.rp_filter = 0  # 禁用
    net.ipv4.conf.all.rp_filter = 2  # 启用松散模式

    然后运行以下命令使更改生效:

    bash 复制代码
    sudo sysctl -p

总结

在大多数情况下,建议将 rp_filter 设置为 1 或 2,尤其是当网络环境较复杂时,以提高安全性。若在特定场景下对于性能有严格要求并且充分了解网络环境的情况下,可以考虑将其设置为 0,但需谨慎评估可能带来的安全风险。

环境测试

bash 复制代码
▶ sysctl -a | grep rp_filter | grep -v arp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.bond0.rp_filter = 0
net.ipv4.conf.bond0/12.rp_filter = 0
net.ipv4.conf.bond0/34.rp_filter = 0
net.ipv4.conf.bond0/56.rp_filter = 0
net.ipv4.conf.br-28205e3147e3.rp_filter = 0
net.ipv4.conf.br-800d2a03a456.rp_filter = 0
net.ipv4.conf.br-dc00623f6fbe.rp_filter = 0
net.ipv4.conf.br0.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.docker0.rp_filter = 0
net.ipv4.conf.enp44s0.rp_filter = 0
net.ipv4.conf.enp45s0.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.tap0.rp_filter = 0
net.ipv4.conf.utun.rp_filter = 0
net.ipv4.conf.veth21e5fe3.rp_filter = 0
net.ipv4.conf.veth304353d.rp_filter = 0
net.ipv4.conf.veth4908770.rp_filter = 0
net.ipv4.conf.veth60d6c7f.rp_filter = 0
net.ipv4.conf.veth659f826.rp_filter = 0
net.ipv4.conf.veth784e37e.rp_filter = 0
net.ipv4.conf.veth7fcd4e9.rp_filter = 0
net.ipv4.conf.vethd5fb89c.rp_filter = 0
net.ipv4.conf.vethdade94f.rp_filter = 0
net.ipv4.conf.vethf4946f6.rp_filter = 0
net.ipv4.conf.wlo1.rp_filter = 0

如果一开始 net.ipv4.conf.all.rp_filter 为 0,那么操作系统启动后,所有网卡接口都为0,但是如果后来想启用源进源出的限制,那么就必须要把 net.ipv4.conf.all.rp_filter 设置为 1,同时把其他接口都手动改掉(当然重启一次操作系统也行)。

否则就会出现全局不一致的情况。

在Linux内核中,rp_filter(反向路径过滤)是一种用于增强网络安全性的功能,它可以防止IP欺骗攻击。rp_filter的配置可以在全局级别和接口级别进行。

  1. 全局配置:

    • net.ipv4.conf.all.rp_filter = 0:这表示对所有网络接口关闭反向路径过滤,即全局级别的反向路径过滤禁用。
  2. 接口特定配置:

    • net.ipv4.conf.enp45s0.rp_filter = 1:这表示对特定接口enp45s0启用反向路径过滤。

整体效果:

  • 虽然全局配置已禁用反向路径过滤,但由于接口enp45s0的配置启用了此功能,因此该接口仍然会进行反向路径过滤。
  • 换句话说,针对enp45s0接口的反向路径过滤规则将生效,而其他接口将遵循全局设置,即不进行反向路径过滤。

总结:

  • enp45s0接口会进行反向路径过滤,帮助防止IP欺骗,而其他接口则不会执行此过滤。这种配置可以灵活应对不同接口的安全需求。
相关推荐
名字还没想好☜几秒前
Go 用 bufio.Scanner 读大文件踩坑:默认 64KB 行上限、Buffer 扩容与按 Token 切分
开发语言·后端·golang·go
用户60830892904731 分钟前
SpringBoot自定义注解校验
后端
董员外32 分钟前
RAG 系统进化论(六):GraphRAG(基于知识图谱的 RAG),从相似文本走向实体关系
人工智能·后端·设计模式
Conan在掘金32 分钟前
ArkTS 进阶之道(31):状态联动深水区收官边界——为啥四级状态容器 + V1/V2 双轨是状态联动深水区收官根因
后端
Conan在掘金34 分钟前
鸿蒙 7.0 空间美学开篇:沉浸式毛玻璃 + 底部 Sheet 面板——一行 backgroundBlurStyle 玩出物理材质感
后端
Java编程爱好者37 分钟前
R2DBC vs JDBC:Spring Boot 响应式项目该怎么选
后端
AskHarries1 小时前
Sitemap 怎么自动生成
后端
神奇小汤圆1 小时前
深入 Java 线程池:从源码原理、生产调优到故障排查全链路指南
后端
Conan在掘金1 小时前
ArkTS 进阶之道(30):@Track 精准观测边界——为啥 class 属性级观测只刷关联 UI 根因
后端
明月_清风1 小时前
🚀 OpenAI 数据代理架构全解析:从 600 PB 到自然语言的六层上下文工程
前端·后端·架构