Rootop 服务器运维与web架构

反向路径检查rp_filter

# ip为自动获取时的路由表
[root@localhost ~]# ip route show
default via 192.168.11.1 dev ens33 proto dhcp src 192.168.11.68 metric 100 
default via 192.168.12.1 dev ens36 proto dhcp src 192.168.12.28 metric 101 
192.168.11.0/24 dev ens33 proto kernel scope link src 192.168.11.68 metric 100 
192.168.12.0/24 dev ens36 proto kernel scope link src 192.168.12.28 metric 101 

# ip为固定时的路由表
[root@localhost ~]# nmcli connection modify Wired\ connection\ 1 ipv4.method manual ipv4.addresses 192.168.11.68/24 ipv4.gateway 192.168.11.1 ipv4.dns 114.114.114.114 connection.autoconnect yes
[root@localhost ~]# nmcli connection modify Wired\ connection\ 2 ipv4.method manual ipv4.addresses 192.168.12.28/24 ipv4.gateway 192.168.12.1 ipv4.dns 114.114.114.114 connection.autoconnect yes
把网卡down再up查看
[root@localhost ~]# ip route show
default via 192.168.11.1 dev ens33 proto static metric 100 
default via 192.168.12.1 dev ens36 proto static metric 101 
192.168.11.0/24 dev ens33 proto kernel scope link src 192.168.11.68 metric 100 
192.168.12.0/24 dev ens36 proto kernel scope link src 192.168.12.28 metric 101 

可以看到不管自动还是手动指定ip默认路由是从192.168.11.1网关走。

本机电脑ip为 192.168.6.100,本机和目标机器通过三层交换机连接。

本机ping 192.168.11.68是通的,但是ping 192.168.12.28不通。
原因就是因为almalinux(ID_LIKE=”rhel centos fedora”)默认开启反向路径检查 – Reverse Path Filtering(rp_filter)

# 查看内核参数
[root@localhost ~]# sysctl -a |grep -w rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.ens33.rp_filter = 1
net.ipv4.conf.ens36.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1

rp_filter是Linux Kernel以及众多网络设备采用的一种保护机制,以用来检查收到的数据包的原地址是否可路由。
开启rp_filter功能时,当服务器收到一个数据包之后,将此数据包的源地址和目的地址对调后也就是构建的响应数据包,
通过查找路由表之后发现响应包依然从收到数据包的网卡发送回去,则表示此消息通过了rp_filter的检测。

此内核参数有3个值:
0 关闭反向路由校验
1 严格模式,对每一个进来的数据包,如果反向路由不是通过收到数据的包接口,校验失败后收到的数据包丢弃
2 宽松模式,对每个进来的数据包,校验源地址是否可达,如果反向路由可以通过任何接口到达,那么校验成功,否则校验失败后数据包丢失

# 测试开关脚本
[root@localhost ~]# cat rp.sh
if [ "$1" == "stop" ]; then
	sysctl -w net.ipv4.conf.all.rp_filter=0
	sysctl -w net.ipv4.conf.default.rp_filter=0
	sysctl -w net.ipv4.conf.ens33.rp_filter=0
	sysctl -w net.ipv4.conf.ens36.rp_filter=0
	sysctl -w net.ipv4.conf.lo.rp_filter=0
else
	sysctl -w net.ipv4.conf.all.rp_filter=1
	sysctl -w net.ipv4.conf.default.rp_filter=1
	sysctl -w net.ipv4.conf.ens33.rp_filter=1
	sysctl -w net.ipv4.conf.ens36.rp_filter=1
	sysctl -w net.ipv4.conf.lo.rp_filter=1
fi
[root@localhost ~]# bash rp.sh stop

当关闭检查时(设置为0),2个ip都可以ping通了,也可以通过这2个ip连接ssh服务。

在不同的linux发行版中,此值可能不同。在ubuntu系统中,此值默认为2,即宽松模式。

https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
目前RFC3704推荐启用严格模式以防止DDos攻击对IP欺骗的攻击。
如果使用非对称路由或其他复杂的路由,则推荐使用宽松模式。

非对称路由
非对称路由是指发送和接收数据包时,分别使用了主机和目的地设备之间两条不同的路径。
参考:https://blog.csdn.net/chiyuwei1766/article/details/50706306

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5464.html

作者:Venus

服务器运维与性能优化

评论已关闭。