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


8

我试图配置Linux服务器的内核,以使其不充当路由器,以提高安全性。重点不是转发数据包。

我发现了这一点:

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

和这个:

sysctl -w net.ipv4.ip_forward=0  

显然两者都做同样的事情,但是我不确定它们之间的真正区别是什么。我还想使效果永久化。


没什么区别,sysctl与echo命令相同。只是简单一点。
vonbrand

Answers:


6

没有区别。sysctlLinux上的命令直接写入中的文件/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/


默认情况下,是否不总是转发?
user1686

我也这么认为,但您永远不知道那里可能有什么野生分布:-)
Cristian Ciupitu

@grawity确实是这样,默认情况下在我的发行版中也处于关闭状态。我现在有点困惑,是否还有其他内核配置以避免我们的系统作为路由器运行?
John M.

@JohnM .:如果禁用了默认设置,应该避免什么?
Cristian Ciupitu

@CristianCiupitu,我不知道,我是Linux的新手,我想禁用runnig作为路由器的所有服务器。所以我不确定该命令是否足够:)
John M.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.