内网网络 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欺骗,而其他接口则不会执行此过滤。这种配置可以灵活应对不同接口的安全需求。
相关推荐
忆雾屿17 分钟前
云原生时代 Kafka 深度实践:06原理剖析与源码解读
java·后端·云原生·kafka
Undoom2 小时前
🔥支付宝百宝箱新体验!途韵归旅小帮手,让高铁归途变旅行
后端
不超限2 小时前
Asp.net Core 通过依赖注入的方式获取用户
后端·asp.net
啊哈灵机一动2 小时前
Node.js 进程间通信与自定义消息的核心知识点解析
后端
pengyu2 小时前
【Java设计原则与模式之系统化精讲:零】 | 编程世界的道与术(理论篇)
java·后端·设计模式
Aurora_NeAr2 小时前
深入浅出Docker
后端
程序员岳焱3 小时前
16.Java Annotation注解:元数据与代码增强
java·后端·编程语言
瀚海澜生3 小时前
redis系列(2)——AOF日志和RDB快照
后端
面朝大海,春不暖,花不开4 小时前
Spring Security默认配置覆盖指南
java·后端·spring