Joh*_* M. 9 networking linux security kernel
我正在尝试配置我的 Linux 服务器的内核,以便它不会充当路由器,以提高安全性。重点不是转发数据包。
我发现了这个:
echo 0 > /proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)
和这个:
sysctl -w net.ipv4.ip_forward=0
Run Code Online (Sandbox Code Playgroud)
显然两者都做同样的事情,但我不确定它们之间的真正区别是什么。如果可能的话,我还想使效果永久化。
没有区别。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);
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
如果您想要永久的东西,您需要/etc/sysctl.conf在/etc/sysctl.d(例如/etc/sysctl.d/99-disable-ip-forwarding.conf)下编辑或添加一个文件,其中包含:
# Disable IP packet forwarding
net.ipv4.ip_forward = 0
Run Code Online (Sandbox Code Playgroud)
顺便说一下,一些发行版默认已经明确禁用了它。例如 RHEL <= 6 或 Fedora <= 15 有这个/etc/sysctl.conf:
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
Run Code Online (Sandbox Code Playgroud)
Fedora 20 不再明确禁用它。有没有转发设定/etc/sysctl.conf,/etc/sysctl.d/或/usr/lib/sysctl.d/。