我正在尝试配置我的 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/