Запись непосредственно в / proc по сравнению с использованием sysctl -w

8

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

Я нашел это:

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

и это:

sysctl -w net.ipv4.ip_forward=0  

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

Джон М.
источник
Нет разницы, sysctl делает то же самое, что и команда echo. Просто проще
vonbrand

Ответы:

6

Нет никакой разницы. Команда 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/.

Кристиан Чиупиту
источник
Разве пересылка не всегда отключена по умолчанию?
user1686
Я тоже так думаю, но вы никогда не знаете, какие дикие дистрибутивы могут быть там :-)
Cristian Ciupitu,
@grawity, в моем дистрибутиве он также отключен по умолчанию. Я немного растерялся, есть ли какая-либо другая конфигурация ядра, чтобы наша система не работала в качестве маршрутизатора?
Джон М.
@JohnM .: что следует избегать, если по умолчанию отключено?
Кристиан Чиупиту
@CristianCiupitu, я не знаю, я новичок в Linux, и все, что я хочу отключить мой сервер от запуска в качестве маршрутизатора. Так что я не уверен, достаточно ли этой команды :)
Джон М.