web-dev-qa-db-ja.com

sysctl-wを使用するのではなく/ procに直接書き込む

セキュリティを強化するために、Linuxサーバーのカーネルをルーターとして機能しないように構成しようとしています。重要なのは、パケットを転送しないことです。

私はこれを見つけました:

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

この:

sysctl -w net.ipv4.ip_forward=0  

明らかに両方とも同じことをしますが、私はそれらの本当の違いが何であるかわかりません。また、可能であれば効果を永続的にしたいと思います。

8
John M.

違いはありません。 Linuxのsysctlコマンドは、/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/には転送設定はありません。

6