内网网络 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欺骗,而其他接口则不会执行此过滤。这种配置可以灵活应对不同接口的安全需求。
相关推荐
拖孩1 小时前
一个人 + AI 做的小程序,今天,正式回本了
前端·后端·微信小程序
进击的丸子1 小时前
代理网络环境下 Linux Pro 在线激活实操指南
javascript·后端·安全
念何架构之路2 小时前
Go reflect包值操作 Value 的读写、可设置性与 interface 布局
开发语言·后端·golang
小林ixn2 小时前
用 FastAPI + SQLAlchemy 从零手搓一个博客系统:一套能落地、能讲清楚的 RESTful 后端
后端·python·fastapi
不识君3 小时前
esl-client 2.0.0 发布:Java 项目接入 FreeSWITCH,从引入到使用
spring boot·后端·开源
牧瀬クリスだ3 小时前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
Rain的Java大神之路3 小时前
北漂 13 年,我把 Java 家底钉成了这张知识图谱(全站免费)
java·后端·程序员
Amos_Web3 小时前
通过 Rspack 源码学 Rust(一):`mod`、`pub` 与 `use crate`/`use super`
后端
张彦峰ZYF3 小时前
拆得开不等于该拆开:微服务与模块化单体的边界判据、规模阈值、团队适配与一致性代价
后端·微服务·边界是否稳定·扩展天花板是否到顶·有无小组能独立值班·独立部署的自由会否被用上·这一刀是否切断不可降级的不变量
是江迪呀4 小时前
介绍一个开源项目 —— 烂笔头
前端·后端