在我的 Ubuntu 机器上,在/etc/sysctl.conf
文件中,我默认注释掉了反向路径过滤选项,如下所示:
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1
但/etc/sysctl.d/10-network-security.conf
它们(同样,默认情况下)没有被注释掉:
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
那么反向路径过滤是否启用呢?哪个配置位置优先?如何检查这些和其他内核选项的当前值?
答案1
检查 sysctl 变量的值就像这样简单
sysctl <variable name>
顺便说一句,设置 sysctl 变量就像
sudo sysctl -w <variable name>=<value>
但以这种方式所做的更改可能只会保留到下次重新启动为止。
至于哪个配置位置/etc/sysctl.conf
或/etc/sysctl.d/
优先,/etc/sysctl.d/README
文件内容如下:
最终用户可以使用 60-*.conf 及以上版本,或者使用/etc/sysctl.conf 直接地,它会覆盖此目录中的任何内容。
在两个位置中的任何一个位置编辑配置后,可以应用更改
sudo sysctl -p
答案2
此类内容通常位于/proc
和/或/sys
内核接口中(首先,请记住这些目录中没有任何内容是常规磁盘文件,它们都是通往内核的直接行)。
所以,例如:
»for x in /proc/sys/net/ipv4/conf/*/rp_filter; do echo -ne "$x "`cat $x`"\n"; done
/proc/sys/net/ipv4/conf/all/rp_filter 0
/proc/sys/net/ipv4/conf/default/rp_filter 1
/proc/sys/net/ipv4/conf/em1/rp_filter 1
/proc/sys/net/ipv4/conf/lo/rp_filter 0
/proc/sys/net/ipv4/conf/wlan0/rp_filter 1
看起来我为 em1、wlan0 和“默认”设置了 rp_filter。您只需写入文件句柄即可设置或取消设置它们:
»cd /proc/sys/net/ipv4/conf/lo
»echo 1 > rp_filter
»cat rp_filter
1
»echo 0 > rp_filter
»cat rp_filter
0
如前所述,这是与内核的直接通信,因此立即生效。这些不是配置文件。如果你尝试做错事:
»echo whatever > rp_filter
bash: echo: write error: Invalid argument
当然,这并不是说你不能用这种方式把事情搞砸。请务必阅读下面的评论。
答案3
要完成接受的答案,虽然/etc/sysctl.conf
设置确实优先于 中的设置/etc/sysctl.d/
,但原始问题中公开的示例显示了 中的两个注释掉的变量/etc/sysctl.conf
:
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1
和相同的变量没有注释掉/etc/sysctl.d/10-network-security.conf
:
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
这可能会产生误导,因为评论是不是一个设置,但只是一个评论可能是一个设置。
在这种情况下,变量实际上都设置为 1,尽管在更强大的配置文件中它们被注释掉了。
如果/etc/sysctl.conf
我们有:
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
那么变量最终会被设置为0。