直接写入 /proc 与使用 sysctl -w

直接写入 /proc 与使用 sysctl -w

我正在尝试配置我的 Linux 服务器的内核,以便它不会充当路由器,以提高安全性。重点是不转发数据包。

我发现了这一点:

echo 0 > /proc/sys/net/ipv4/ip_forward  

和这个:

sysctl -w net.ipv4.ip_forward=0  

显然,两者的作用相同,但我不确定它们之间真正的区别是什么。如果可能的话,我还想让效果永久存在。

答案1

没有区别。Linuxsysctl上的命令直接写入 中的文件/proc/sys。以下代码片段来自sysctl证明这一点:

/*
 * Write a sysctl setting
 */
static int WriteSetting(const char *setting)
{
    /* ... */

    /* used to open the file */
    tmpname = xmalloc(equals - name + 1 + strlen(PROC_PATH));
    strcpy(tmpname, PROC_PATH);
    strncat(tmpname, name, (int) (equals - name));
    tmpname[equals - name + strlen(PROC_PATH)] = 0;
    /* change . to / */
    slashdot(tmpname + strlen(PROC_PATH), '.', '/');

    /* ... */

    fp = fopen(tmpname, "w");
    /* some error checking ... */
    rc = fprintf(fp, "%s\n", value);

    /* ... */
}

如果您想要永久保存,则需要编辑/etc/sysctl.conf或添加一个文件/etc/sysctl.d(例如/etc/sysctl.d/99-disable-ip-forwarding.conf),其中包含:

# Disable IP packet forwarding
net.ipv4.ip_forward = 0

顺便说一句,一些发行版已经禁用了此功能明确地默认情况下。例如,RHEL <= 6 或 Fedora <= 15 中有以下内容/etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

Fedora 20 不再明确禁用它。或中没有转发设置/etc/sysctl.conf/etc/sysctl.d//usr/lib/sysctl.d/

相关内容