8

Я пытаюсь настроить ядро моего сервера Linux так, чтобы оно не действовало как маршрутизатор, для большей безопасности. Дело не в том, чтобы пересылать пакеты.

Я нашел это:

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

и это:

sysctl -w net.ipv4.ip_forward=0  

Очевидно, что оба делают одно и то же, но я не уверен, в чем реальная разница между ними. Я также хотел бы сделать эффекты постоянными, если это возможно.

1 ответ1

5

Нет никакой разницы. Команда sysctl в Linux записывает напрямую в файлы в /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/ .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .