【博客493】rp_filter对流量的影响

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的客户端回复响应。

两种常见的非法攻击手段:

1、DDos攻击(Distribute Deny of Service)

分布式拒绝服务攻击。通过构造大量的无用数据包向目标服务发起请求,占用目标服务主机大量的资源,还可能造成网络拥塞,进而影响到正常用户的访问。

2、IP Spoofing(IP欺骗)

IP Spoofing指一个客户端通过伪造源IP,冒充另外一个客户端与目标服务进行通信,从而达到某些不可告人的秘密。

配置方式

1、临时生效的配置方式

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

使用 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
……

2、修改内核参数的映射文件

在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 
……

3、永久生效的配置方式

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

修改/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
……

example

假设机器有2个网口:

eth0: 192.168.1.100
eth1:200.153.1.122

数据包源IP:10.75.153.98,目的IP:200.153.1.122

系统路由表配置为:

[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default      192.168.1.234      0.0.0.0       UG    0      0        0 eth0  
192.168.120.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.75.153.98    0.0.0.0         255.255.255.0   U     0      0        0 eth0

系统rp_filter参数的配置为:

[root@localhost ~]# sysctl -a | grep rp_filter
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1

在这里插入图片描述

如上所示,数据包发到了eth1网卡,如果这时候开启了rp_filter参数,并配置为1,则系统会严格校验数据包的反向路径。从路由表中可以看出,返回响应时数据包要从eth0网卡出,即请求数据包进的网卡和响应数据包出的网卡不是同一个网卡,这时候系统会判断该反向路径不是最佳路径,而直接丢弃该请求数据包。(业务进程也收不到该请求数据包)

<think>好的,用户想了解如何在Linux中配置和使用rp_filter参数。首先,我需要回忆一下rp_filter的作用和相关配置方法。 首先,rp_filter反向路径过滤,用来防止IP地址欺骗,增强网络安全。它有三种模式:0(关闭)、1(严格模式)、2(宽松模式)。用户可能需要知道这些模式的区别和应用场景。 接下来,配置方法。用户可以通过sysctl命令临时修改,或者编辑sysctl.conf文件永久生效。需要具体说明步骤,比如使用echo命令修改/proc下的文件,或者修改/etc/sysctl.conf后执行sysctl -p。 然后,需要注意不同网络接口可能需要单独设置,比如eth0、eth1,或者使用all和default。还要提到Oracle RAC的情况,引用中的例子需要设置rp_filter为2,这可能和多个私网网卡有关,应该引用用户提供的参考内容,特别是引用[2]和[3]。 用户可能遇到的常见问题,比如网络不通的情况,需要检查rp_filter设置是否导致丢包。可能需要指导如何临时关闭来测试,或者调整到宽松模式。 此外,相关参数如arp_filter、arp_ignore、arp_announce可能也需要一起配置,但用户的问题主要集中在rp_filter,所以可以简要提及,但主要回答rp_filter的配置。 还要确保回答结构清晰,分步骤说明配置方法,注意事项,以及验证方式。最后生成相关问题,覆盖应用场景、与其他参数的关系、Oracle RAC的特殊配置等,符合用户给的示例中的问题格式。</think>### 如何在Linux中配置和使用rp_filter参数 #### 1. **rp_filter参数的作用** `rp_filter`(Reverse Path Filtering)是Linux内核用于验证数据包来源的机制,通过反向路径检查防止IP地址欺骗攻击。其工作模式如下: - **0(关闭)**:不进行反向路径验证。 - **1(严格模式)**:检查数据包的源地址是否可通过接收网卡的路由表返回,否则丢弃[^1]。 - **2(宽松模式)**:只要存在任一网卡可通过路由到达源地址即放行[^2]。 #### 2. **配置方法** ##### 临时生效(重启后失效) ```bash # 查看当前配置 sysctl net.ipv4.conf.all.rp_filter # 修改配置(以eth0网卡为例) echo 2 > /proc/sys/net/ipv4/conf/eth0/rp_filter ``` ##### 永久生效 1. 编辑`/etc/sysctl.conf`文件: ```bash # 全局设置 net.ipv4.conf.default.rp_filter = 2 net.ipv4.conf.all.rp_filter = 2 # 按网卡单独设置(例如私网网卡eth2、eth3) net.ipv4.conf.eth2.rp_filter = 2 net.ipv4.conf.eth3.rp_filter = 2 ``` 2. 应用配置: ```bash sysctl -p ``` #### 3. **特殊场景示例** - **Oracle RAC多私网网卡**:若使用HAIP实现私网冗余,需将所有私网网卡的`rp_filter`设为`2`以避免网络不通[^2]。 - **多网卡负载均衡**:结合`arp_filter=1`,确保ARP响应与路由表一致[^1]。 #### 4. **验证与调试** ```bash # 检查配置是否生效 cat /proc/sys/net/ipv4/conf/eth2/rp_filter # 网络测试(替换为目标IP) ping -I eth2 192.168.1.100 ``` 若出现丢包,可临时将`rp_filter`设为`0`进行问题排查[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值