反向路由校验rp_filter

前言

最近在工作中部署生产系统的时候遇到了一个问题:网卡能收到数据,但系统进程却收不到相关数据,查了半天发现是rp_filter的问题,今天就记录一下。

正文

rp_filter(Reverse Path Filtering)参数定义了网卡对接收到的数据包进行反向路由验证的规则。它有三个值,0,1,2,具体含义如下:

  • 0:关闭反向路由校验
  • 1:开启严格的反向路由校验。对每个进来的数据包,校验其反向路由是否是最佳路由。如果反向路由不是最佳路由,则直接丢弃该数据包。
  • 2:开启松散的反向路由校验。对每个进来的数据包,校验其源地址是否可达,即反向路由是否能通(通过任意网口),如果反向路由不同,则直接丢弃该数据包。

反向路由校验

所谓反向路由校验,就是在一个网卡收到数据包后,把源地址和目标地址对调后查找路由出口,从而得到反向后的路由出口,然后根据反向路由出口进行过滤。

当rp_filter的值为1时,要求反向路由的出口必须与数据包的入口网卡是同一块,否则就会丢弃数据包;

当rp_filter的值为2时,要求反向路由必须是可达的,如果反向路由不可达,则会丢弃该数据包;

当rp_filter的值为0时,不进行校验。

开启rp_filter参数的作用

  • 减少DDoS攻击:校验数据包的反向路径,如果反向路径不合适,则直接丢弃该数据包,避免过多的无效连接消耗系统资源
  • 防止IP Spoofing:校验数据包的反向路径,如果客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳路径,则直接丢弃该数据包,不会向伪造IP的客户端回复响应。

配置方式

在Linux文件系统映射出的内核参数配置文件中记录了Linux系统中网络接口反向路由校验的配置参数rp_filter的值。可以使用编辑器修改文件的内容,也可以使用如下指令修改文件内容:

echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/rp_filter

在系统重启或对系统的网络服务进行重启后还会一直保持生效状态。修改 /etc/sysctl.conf配置文件可达到永久生效的目的

net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1


标题:反向路由校验rp_filter
作者:staymeloo7
联系方式:staycoolsun@gmail.com

    评论
    0 评论
avatar

取消