找出与 sysctl.conf 和 sysctl.d 相关的内核选项的值

找出与 sysctl.conf 和 sysctl.d 相关的内核选项的值

在我的 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。

相关内容