Linux内核参数 rp_filter

简介

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

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

什么是反向路由校验

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

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

rp_filter的配置项

rp_filter是Linux的内核参数,可以针对每个网卡进行配置

 net.ipv4.conf.all.rp_filter
net.ipv4.conf.default.rp_filter
net.ipv4.conf.lo.rp_filter
net.ipv4.conf.eth0.rp_filter
net.ipv4.conf.eth1.rp_filter
net.ipv4.conf.eth2.rp_filter
……

开启rp_filter参数的作用

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

配置方式

要配置Linux内核中的 rp_filter 参数有多种配置方式可供选择,下面分别介绍。

临时生效的配置方式

临时生效的配置方式,在系统重启,或对系统的网络服务进行重启后都会失效。这种方式可用于临时测试、或做实验时使用。

使用 sysctl 指令配置

sysctl 命令的 -w 参数可以实时修改Linux的内核参数,并生效。所以使用如下命令可以修改Linux内核参数中的rp_filter 。

sysctl -w net.ipv4.conf.default.rp_filter =1
sysctl -w net.ipv4.conf.all.rp_filter =1
sysctl -w net.ipv4.conf.lo.rp_filter =1
sysctl -w net.ipv4.conf.eth0.rp_filter =1
sysctl -w net.ipv4.conf.eth1.rp_filter =1
……

有关 sysctl 指令的更详细介绍,请参见Linux的系统man手册(man sysctl),或其他有关sysctl指令详细介绍的文章。

修改内核参数的映射文件

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

echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter 
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter 
echo 1 > /proc/sys/net/ipv4/conf/lo/rp_filter 
echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter 
echo 1 > /proc/sys/net/ipv4/conf/eth1/rp_filter 
……

永久生效的配置方式

永久生效的配置方式,在系统重启、或对系统的网络服务进行重启后还会一直保持生效状态。这种方式可用于生产环境的部署搭建。

修改/etc/sysctl.conf 配置文件可以达到永久生效的目的。

在sysctl.conf配置文件中有一项名为可以添加如下面代码段中的配置项,用于配置Linux内核中的各网络接口的 rp_filter 参数。

net.ipv4.conf.default.rp_filter =1
net.ipv4.conf.all.rp_filter =1
net.ipv4.conf.lo.rp_filter =1
net.ipv4.conf.eth0.rp_filter =1
net.ipv4.conf.eth1.rp_filter =1
……

需要注意的是,修改sysctl.conf文件后需要执行指令sysctl -p 后新的配置才会生效。

有关 sysctl 指令和sysctl.conf配置文件的更详细介绍,请参见Linux的系统man手册(man sysctl和man sysctl.conf),或其他有关sysctl指令和sysctl.conf配置文件的文章。

说明

此文是作者在互联网上阅读了大量有关 rp_filter 的文章后,根据自己的理解进行的总结。由于个人水平限制,难免有所失误。如果您在阅读时发现谬误之处,还望指出,以期共同进步。

推荐阅读更多精彩内容