Linux内核参数rp_filter

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

配置⽅式
临时⽣效的配置⽅式
临时⽣效的配置⽅式,在系统重启,或对系统的⽹络服务进⾏重启后都会失效。

这种⽅式可
⽤于临时测试、或做实验时使⽤。

使⽤ 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
……
修改内核参数的映射⽂件
在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
……
⼀、rp_filter参数介绍
rp_filter参数⽤于控制系统是否开启对数据包源地址的校验。

⾸先看⼀下Linux内核⽂档中的描述:
rp_filter - INTEGER
0 - No source validation.
1 - Strict mode as defined in RFC3704 Strict Reverse Path
Each incoming packet is tested against the FIB and if the interface
is not the best reverse path the packet check will fail.
By default failed packets are discarded.
2 - Loose mode as defined in RFC3704 Loose Reverse Path
Each incoming packet's source address is also tested against the FIB
and if the source address is not reachable via any interface
the packet check will fail.
Current recommended practice in RFC3704 is to enable strict mode
to prevent IP spoofing from DDos attacks. If using asymmetric routing
or other complicated routing, then loose mode is recommended.
The max value from conf/{all,interface}/rp_filter is used
when doing source validation on the {interface}.
Default value is 0. Note that some distributions enable itin startup scripts.
即rp_filter参数有三个值,0、1、2,具体含义:
0:不开启源地址校验。

1:开启严格的反向路径校验。

对每个进来的数据包,校验其反向路径是否是最佳路径。

如果反向路径不是最佳路径,则直接丢弃该数据包。

2:开启松散的反向路径校验。

对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意⽹⼝),如果反向路径不同,则直接丢弃该数据包。

⼆、rp_filter参数⽰例
假设机器有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⽹卡出,即请求数据包进的⽹卡和响应数据包出的⽹卡不是同⼀个⽹卡,这时候系统会判断该反向路
径不是最佳路径,⽽直接丢弃该请求数据包。

(业务进程也收不到该请求数据包)
解决办法:
1.修改路由表,使响应数据包从eth1出,即保证请求数据包进的⽹卡和响应数据包出的⽹卡为同⼀个⽹卡。

2.关闭rp_filter参数。

(注意all和default的参数都要改)
1)修改/etc/sysctl.conf⽂件,然后sysctl -p刷新到内存。

2)使⽤sysctl -w直接写⼊内存:sysctl -w net.ipv4.conf.all.rp_filter=0
3)修改/proc⽂件系统: echo "0">/proc/sys/net/ipv4/conf/all/rp_filter
三、开启rp_filter参数的作⽤
1. 减少DDoS攻击
校验数据包的反向路径,如果反向路径不合适,则直接丢弃数据包,避免过多的⽆效连接消耗系统资源。

2. 防⽌IP Spoofing
校验数据包的反向路径,如果客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳路径,则直接丢弃数据包,不会向伪造IP的客户端回复响应。

Ps:两种常见的⾮法攻击⼿段:
1. DDos攻击(Distribute Deny of Service)
分布式拒绝服务攻击。

通过构造⼤量的⽆⽤数据包向⽬标服务发起请求,占⽤⽬标服务主机⼤量的资源,还可能造成⽹络拥塞,进⽽影响到正常⽤户的访问。

2. IP Spoofing(IP欺骗)
IP Spoofing指⼀个客户端通过伪造源IP,冒充另外⼀个客户端与⽬标服务进⾏通信,从⽽达到某些不可告⼈的秘密。

相关文档
最新文档